显著检测论文解析1
本人在图像处理方面的主要研究方向是显著性检测,在刚接触显著性时感觉很难下手,有太多东西不是很清楚。学习到现在我对这一块有了一定的认识,现在对显著性领域我读过的近几年比较好的论文写一下我的见解,希望对有需要的同学有一定帮助。如果所写有错误的地方希望大神们指正。
显著性检测
因为
是一个非常具体的研究方向,所以并不像跟踪,人脸识别这种有一些经典的方法步骤。显著性就是对目标的提取,只不过是一种无监督的学习。我们也可以认为它是一种图像分割方法,因此在显著性检测算法中基本都要涉及到图像的最低层,这些底层处理处理也是显著性的难点所在。我在学习显著性检测时第一篇论文是Global contrast based salient region detection,即基于全局对比的显著区域检测(作者主页:http://mmcheng.net/salobj/,点击打开链接)。这篇论文可以作为首先学习的文章,是因为该算法仅仅是利用了像素间的颜色对比来提取显著目标。该文方法虽然简单但是很清晰地阐明了对图像底层信息的利用。
文章主要由两部分组成,也就是程明明提出的两种算法:1、基于颜色直方图的对比算法(HC);2、基于区域对比算法(RC)。首先,我们来说一下HC方法。文中现实定义了像素显著值得衡量标准:
(1)
这里的I(*)表示像素*,D(a,b)表示像素a,b在LAB颜色空间的距离。这个定义就是说像k与其他像素颜色对比越大其越显著,即对比度高的是显著元素。因为相同的颜色计算结果一样,因此论文建立了一个颜色统计直方图。在论文中作者首先将RGB三通道256级量化为12级,然后根据每一级的出现概率,取前95%的颜色以达到减少计算量的目的。因为作者源码是c++,而我用matlab复现时采用像素与颜色映射构建颜色直方图,即假设像素a的RGB三分量为r,g,b,则其颜色映射为Label=12^2*a+12*b+c。这样以序号代表颜色就可以构建出颜色直方图还可以得到原图像素的对应映射表,这就相当于按颜色将所有像素进行分类。然后根据(1)计算出每种颜色的显著值在对应回每个像素:
(2)
该式可以认为是取第cl个颜色与其他颜色对比度的期望为其显著值。在根据映射表还原到每个个像素后就可以得到初步显著图,而在此之后论文还有一步颜色空间上的平滑处理,这一步对最终结果影响较大,其实就是以颜色距离为标准,对每种颜色的显著值进行平滑处理。
接着论文就开始了第二种算法,即RC算法。该算法可以说是对HC算法的改进,其改进之处在于将像素上升到区域,这样就考虑到了目标的整体性。但是相应的算法的复杂度随之上升,在RC算法中,首先利用基于图的图割方法将原图进行分割,然后对每个区域分别建立局部颜色直方图。这里的图割方法可以参考Graph Based Image Segmentation(http://cs.brown.edu/~pff/segment/,点击打开链接)这里有C++代码,对与MATLAB代码可以参考(http://www.mathworks.com/matlabcentral/fileexchange/25866-efficient-graph-based-image-segmentation,点击打开链接),这个代码里采用两种聚类方法,大家在使用时用其中一个就可以了
,如下图。
在图割完成以后再利用HC中建立直方图的方法构造出每个区域的局部直方图,显然这个计算代价是很大的。最终的区域显著值计算公式如下:
这里是作者加入空间因素后的显著计算公式,这里所谓的空间因素是指两区域相聚越近则两者间的相互影响越大,也就是说这两者的对比
度
在所有对比度中应该占有越大的权重。所以Ds是指两区域的空间距离(可以用区域中心去计算);w是指ri区域的像素数,就是一个权重;而Dr就是颜色距离,其计算公式如下:
公式中f(c1,i)和f(c2,j)分别指
第一个区域中
第i个颜色出现的概率和第二各区域中第j个颜色的概率;后面的指的是这两种颜色的LAB颜色距离。这个等式就是计算出两区域颜色直方图中每个颜色与另一直方图中所有颜色距离的平均。这个计算量很大。
写到这论文的理论部分就结束了。然后给大家传一个颜色直方图的matlab小代码:http://pan.baidu.com/s/1hqvwAUg,点击打开链接.其运行结果稍加说明:
这来两幅图分别是colormap(映射表)和hist(颜色直方图)的举例,colormap中矩阵元素颜色序号(即hist中行数);hist中每一行的前三列为量化后的RGB值,如需要0-255量级,可自行还原。