最近在做关于视觉显著性相关的算法,视觉显著性检测的算法跟大多数依靠准确率(Precision)去衡量算法(例如人脸识别,是否识别正确)优劣有一些区别,它依靠的是PR曲线去判断哪个算法更胜一筹。因为我做完显著性检测算法想要对这个算法进行对比的时候也查到了很多相关P-R曲线的代码,但似乎都不太能运行(可能很大程度上是因为我对它们输入变量和一些matlab的高级功能不了解),并且考虑到PR曲线的原理还是很容易实现的,所以自己动手写了一版我认为蛮简洁易懂的,希望有缘人能搜到也能用的方便。

PR曲线即查准率(Precision)与查全率(Recall),以查全率为坐标x轴,查准率为坐标y轴,从而画出了一条曲线。

P-R图直观地显示出学习器在样本总体上的查全率和查准率。在进行比较时,若一个学习器的P-R曲线完全被另一个学习器的曲线完全“包住”,则我们就可以断言后者的性能优于前者。

查准率和查全率的概念很简单:(拿了张图)

true class我们可以认为是图片显著性的真实情况(ground truth),hypothesized class我们可以认为是我们的算法计算出来的图片显著性情况。那么什么是真正例?假正例?通俗的说saliencymap一般都是二值图(但其实算法计算出来的是一张灰度图,我们通过阈值去将它转化为二值图,而阈值则会一直变化,后面会提及),其中一张图片中有若干个像素点,像素点的值为1则为显著区域(前景),值为0则为背景。我们定义值为1(前景)的为正例,值为0(背景)的为反例;真正例即saliencymap(算法计算出的显著图)为1,ground truth也为1,假正例即saliencymap为1,但ground truth也为0。真假反例也是如此。

我用的是MSRA-1000数据集,将显著性检测计算得出的结果放在saliencymap文件夹里,再将ground truth放在GT文件夹里(为什么会涉及文件夹名称?。。。因为代码里有文件夹路径。。。所以说一下他们的名字)。我们的saliencymap是一张灰度图,我们将它从阈值0~255计算查准率与查全率,每个阈值的查准率与查全率计算数据集里的平均值(即1000张图的查准率,查全率全部计算出来求平均),然后再画一下图plot一下。

Pre=zeros(256,1);
Rec=zeros(256,1);
imgRoot='./GT/';
imgRoot2='./saliencymap/';
imnames=dir([imgRoot '*' 'bmp']);
imnames2=dir([imgRoot2 '*' 'png']);
for i=0:255MP=zeros(length(imnames),1);MR=zeros(length(imnames),1);for l=1:length(imnames)imname=[imgRoot imnames(l).name];imname2=[imgRoot2 imnames2(l).name];%将groundtruth转化为二值灰度的图GT=imread([imname(1:end-4) '.bmp']);GT=rgb2gray(GT);GT=(GT)>0;k=numel(GT);GT=reshape(GT,k,1);%saliencymapSAP=imread([imname2(1:end-4) '.png']);SAP=(SAP)>=i;SAP=reshape(SAP,k,1);TP=0;FP=0;FN=0;TN=0;for j=1:kif SAP(j)==1if GT(j)==1TP=TP+1;elseFP=FP+1;endelse           %SAP(j)==0if GT(j)==1FN=FN+1;elseTN=TN+1;endendendP=TP/(TP+FP);MP(l)=P;R=TP/(TP+FN);MR(l)=R;endsum_MP=0;sum_MR=0;for k=1:length(imnames)sum_MP=sum_MP+MP(k);sum_MR=sum_MR+MR(k);endPre(i+1)=sum_MP/length(imnames);Rec(i+1)=sum_MR/length(imnames);end
x=Rec;
y=Pre;
plot(x,y,'r','LineWidth',0.5);
xlabel('Recall');
ylabel('Precision');
axis([0 1 0 1])

效果图:

嗯。。。第一次写这种,好累。。。明明没写什么内容但是就是写了很久。。。这个代码运算量很大,跑起来比较慢(估计是读文件很耗费时间)。顺便希望我可以坚持学习。。。

视觉显著性检测——PR曲线相关推荐

  1. 计算机视觉——图像视觉显著性检测

    目录 系列文章目录 零.问题描述 一.图像显著性检测 1.定义 2.难点 二.常用评价标准和计算方法 1.综述 2.ROS曲线详述 2.1 混淆矩阵 2.2 ROC曲线简介 2.3 ROC曲线绘制及其 ...

  2. 视觉显著性 matlab,转载图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)...

    图像/视觉显著性检测技术发展情况梳理(Saliency Detection.Visual Attention) Sason@CSDN 转载:http://blog.csdn.net/anshan198 ...

  3. [OpenCV实战]47 基于OpenCV实现视觉显著性检测

    人类具有一种视觉注意机制,即当面对一个场景时,会选择性地忽略不感兴趣的区域,聚焦于感兴趣的区域.这些感兴趣的区域称为显著性区域.视觉显著性检测(Visual Saliency Detection,VS ...

  4. 计算机视觉关键技术论文,视觉显著性检测关键技术研究

    作者姓名导师姓名文献出处论文摘要随着互联网技术和多媒体技术的飞速发展,数字媒体信息呈现出以几何级数增长的态势.海量的数字媒体为人们的娱乐.教育和商业带来便利的同时,也为视觉信息处理技术提出了新的挑战. ...

  5. 对视觉显著性检测(Saliency Object Detection)中Channel Attention的一些总结

    因为最近的paper涉及,所以对channel attention进行了了解,比较浅显,但是以此篇博客记录,之后有相关进展,也会更新.已经有很多相关的文章对Attention的本质,原理进行介绍.例如 ...

  6. 显著性检测 视觉注意机制 超像素分割

    概述 视觉显著性检测(Visual saliency detection)指通过智能算法模拟人的视觉特点,提取图像中的显著区域(即人类感兴趣的区域). 视觉注意机制 视觉注意机制(Visual Att ...

  7. 《融合视觉显著性和局部熵的红外弱小目标检测》论文复现

    1.复现论文概要 复现的论文为<融合视觉显著性和局部熵的红外弱小目标检测>(赵鹏鹏,李庶中等,中国光学2022,http://www.chineseoptics.net.cn/cn/art ...

  8. 显著性检测——GR模型

    显著性检测--GR模型 1. Introduction 2. Saliency Model 2.1 Initial Saliency Map 2.2 Saliency Map Refining Wit ...

  9. matlab 图像显著性检测ft_图像显著性检测总结

    这块的工作一直在跟,一直没有整理,看到别人整理的资料不错,先加入作者链接: http://blog.csdn.net/anshan1984/article/details/8657176点击打开链接 ...

最新文章

  1. Eight puzzle --HOJ 11918
  2. 【机器学习】机器学习必知概念
  3. div中插入图片_Web前端开发基础知识,设置网页背景图,如何在网页中插入图片...
  4. VC,VB程序button、图标样式美化
  5. ejb 2.0 3.0_EJB 3.0注入和查找简介
  6. 猿宵节正确打开方式:你要的大数据、机器学习、神经网络…已配齐
  7. python字符串类型图解_Python基础——数据类型(图解+实例,非常详细!)
  8. 我的asp.net mvc学习过程
  9. Web Service工作原理及实例
  10. java udp传输文件6_文件传输udpjava数据
  11. python3.9性能_谁说Python性能差的
  12. 基于javaweb+SSM的药品管理系统(java+SSM+html+jQuery+Tomcat+mysql)
  13. 期刊论文分析的技巧与程序
  14. 记录一下,关于Instagram
  15. 《C++ Primer》读书笔记——第十三章_拷贝控制
  16. batch文件常用命令
  17. 多粒度和多尺度的区别
  18. 小米java后端实习一面面经
  19. Java常用的文档注释
  20. UG塑胶模具设计:曲面手柄造型处理方法讲解

热门文章

  1. mac 可以连上网,但是自带浏览器和谷歌浏览器打不开网页
  2. 不骗你,没读这一篇,你不可能懂二分
  3. 用户体验--怎样绘制用户体验的地图
  4. 深圳湾将现“小米魔方”!ennead为小米打造深圳国际总部;乐高集团扩大嘉兴工厂产能 | 美通社头条...
  5. linux运维高薪职业及任职要求梳理
  6. Linux知识点总结
  7. 雅虎瓦片地图切片问题
  8. 编写应用程序,从命令行传入两个整型数作为除数和被除数。要求程序中捕获NumberFormatException 异常和ArithmeticException 异常,而且无论在哪种情况下,“总是被执行”
  9. 阿里 oss:You have no right to access this object because of bucket acl
  10. 用strcmp来打印输入三次密码哔哩练习