1、先要明白什么是视觉的显著性。我们人眼在看一幅场景的时候,首先会被该场景中最‘刺眼’或者最‘引人注目’的某一个局部所吸引,虽然该过程对我们来说瞬间发生,再简单不过了,但这个过程要想明白到底发生了什么其实还是挺麻烦的。这个局部就是该视觉场景中最显著的区域。所以视觉显著性检测其实就是让计算机模拟人或灵长类生物在这一瞬间所做的工作,即如何从一整幅视觉场景中找到最‘引人注目’的局部。
2、明白了什么是显著性,那么下一个问题就是为什么要研究显著性?其实研究视觉显著性是研究其他计算机视觉问题的基础。举个最简单的例子,桌面上放一本书,如果你事先不知道,你在看桌面的瞬间就知道书放在哪里,然后你就可以开始学习了。所以,你要想学习,就必须要知道书放在桌面什么地方,而你看桌面的时候,其实就已经完成了一次显著性检测,检测之后就可以对该显著性区域进行识别,识别出来该区域到底是什么才可以做后续工作。这是显著性检测用于识别预处理的例子。其他的如图像分割,文本检测,人脸识别等都有显著性的影子。
了解了是什么,为什么,接下来应该是怎么做的问题。如果机器能和人脑相比,那么显著性检测的重要性便不复存在。虽然现今的神经网络得到了长足的发展,但仍无法和生物神经系统相比。现今提出的显著性检测模型基本上都是基于Koch和Ullman最早提出的生物启发模型,即视觉注意模型(visual attention model)。该模型首先将一副图片进行early representations--即把图像的一些基本特征(如亮度,颜色,方向,形状等)分别表示出来,然后将这些early representations映射到central representation,这个central representation只包含某个被选择的位置的性质,至于哪个位置可投影,由WTA网络决定,最后需要指出的是,当前显著性位置检测出来之后需要进行下一次检测。经过这样一个过程,我们就可以将所有我们想要检测出来的显著性区域检测出来。其实该模型只是给出了大体的一个模型,但具体怎么做并未指出。
3、我的问题:如何将不同的特征表示出来?如何进行投影操作?WTA网络如何设计?如何避免已经检测出的区域再次被检测?检测出了显著性区域后对该区域应该做些什么?后人在该模型的基础上做了很多相关工作。
itti博士最先提出基于center-surround的显著性检测算法。该算法将三个特征(亮度,颜色,方向)表示成多尺度的高斯金字塔,对各个特征进行多尺度减法分别表示成6,12,24副map,然后对各个特征进行归一化处理得到三幅conspicuity maps,最后求均值得到saliency map。
我的问题:如何将各个特征表示成高斯金字塔?这里如何体现中心周边的原则?如何进行多尺度加减运算?如何进行归一化操作?检测出某一个区域后如何检测下一个区域?
程明明博士提出了基于全局对比度的显著性检测。其中利用了两种方法:HC(直方图对比度)和RC(区域对比度)。该方法考虑了区域间的关系,均匀的突出了显著性,速度快且实现简单。HC方法利用直方图对图像颜色进行统计,对彩图先在RGB空间量化,然后进行颜色空间平滑操作。RC方法首先将图像分为若干个区域,对每个区域定义显著性值:该区域和其他区域的对比度的加权和。权值由区域空间距离决定,距离越近权值越大。由这些过程我们知道,RC方法不仅考虑颜色对比度,还考虑了空间关系,所以效果更好,但时间复杂度更高。
寻找能同时检测静态图片和动态视频序列中显著性区域的算法是当今的研究热点,这是做图像分割的前期工作,学者们也做了很多相关的研究。常用的方法是利用背景差法(background subtraction)检测出前景区域,然后利用形态学操作(morphological operations)如膨胀(dilation)、腐蚀(erosion)等进行处理。然而传统的方法只能对背景静止的情况表现较好,如果背景变化或照相机移动,那么只能不断更新背景模型,然而这对实时处理没好处。还有一种理论是目标检测算法(object detection),但这类算法需要对样本进行训练,且需要事先对目标界定范围,对范围外的目标不适用。另一种算法是显著性检测(saliency detection),这类算法基于人类视觉注意模型,不需要训练,对局部特征对比度进行分析。‘Segmenting Salient Objects from Images and Videos’本篇论文在Lab空间建立saliency measures,利用滑动窗对图像进行处理,saliency measures定义为S0(x) = P(F(x)|H0)P(H0)/(P(F(x)|H0)P(H0) + P(F(x)|H1)P(H1)),P(H0)和P(H1)为先验概率,P(H0)一般设为0.2,主要问题是计算hk(x)=P(F(x)|H0)和hb(x)=P(F(x)|H1),而这两者都可通过积分直方图得到。为了使得结果更加robust,这里在得到积分直方图后要对其进行smoothing,也就是用高斯函数进行光滑处理。至此saliency处理部分介绍完毕。
问题:积分直方图是什么?如何用程序实现积分直方图的运算?为什么要用积分直方图?
另外,在上文基础上,大连理工大学卢湖川教授及其学生利用贝叶斯模型实现了更加精确且时间复杂度更低的算法。该算法对以上算法的改进处在于:1、先验概率并非认为设定。
首先使用Harris角点检测算法检测出一个角点集合,构造一个包含角点的凸包,然后利用聚类算法选出saliency区域。
2、采用由粗到细的方法避免了多尺度的复杂运算,简化了运算。
然而该算法在复杂背景及多目标检测中表现不佳,仍需改进。