视觉显著性检测(Visual Saliency Detection)指通过智能算法模拟人的视觉特点,提取图像中的显著区域(即人类感兴趣的区域)。
视觉显著性检测简介人类视觉系统在面对自然场景时具有快速搜索和定位感兴趣目标的能力,这种视觉注意机制是人们日常生活中处理视觉信息的重要机制。随着互联网带来的大数据量的传播,如何从海量的图像和视频数据中快速地获取重要信息,已经成为计算机视觉领域一个关键的问题。通过在计算机视觉任务中引入这种视觉注意机制,即视觉显著性,可以为视觉信息处理任务带来一系列重大的帮助和改善。引入视觉显著性的优势主要表现在两个方面,第一,它可将有限的计算资源分配给图像视频中更重要的信息,第二,引入视觉显著性的结果更符合人的视觉认知需求。视觉显著性检测在目标识别,图像视频压缩,图像检索,图像重定向等中有着重要的应用价值。视觉显著性检测模型是通过计算机视觉算法去预测图像或视频中的哪些信息更受到视觉注意的过程。1
视觉显著性(Visual Attention Mechanism,VA,即视觉注意机制)是指面对一个场景时,人类自动地对感兴趣区域进行处理而选择性地忽略不感兴趣区域,这些人们感兴趣区域被称之为显著性区域。如图1所示,当看到这幅图像时,图中的四个人最能引起人的注意。
视觉显著性包括从下而上和从上往下两种机制。从下而上也可以认为是数据驱动,即图像本身对人的吸引,从上而下则是在人意识控制下对图像进行注意。计算机视觉领域主要做的是从下而上的视觉显著性,而从上而下的视觉显著性由于对人的大脑结构作用不够了解,无法深刻的揭示作用原理,在计算机视觉领域的研究也相应很少。
自底而上基于数据驱动的注意机制仅受感知数据的驱动,将人的视点指导到场景中的显著区域;通常与周围具有较强对比度或与周围有明显不同的区域吸引自下而上的注意。利用图像的颜色、亮度、边缘等特征表示,判断目标区域和它周围像素的差异,进而计算图像区域的显著性。图1为自下而上的注意,第5列红色条和第 4 列的竖直摆放的条形能立即引起人的注意。
自上而下基于任务驱动的目标的注意机制由人的“认知因素” 决定, 比如知识、预期和当前的目标.对图像的特定特征来计算图像区域的显著性。图2为自上而下的注意, 监控任务下, 场景中的人体能引起注意。
视觉显著性检测概述视觉显著性检测计算是指利用数学建模的方法模拟人的视觉注意机制,对视场中信息的重要程度进行计算。Treisman 等的特征集成理论为视觉显著性计算提供了理论基础,将视觉加工过程分为特征登记与特征整合阶段,在特征登记阶段并行地、独立地检测特征并编码,在特征整合阶段通过集中性注意对物体进行特征整合与定位。受特征集成理论的启发,Kock 和 Ullman最早提出了有关视觉注意机制的计算模型,通过滤波的方式得到特征,最后通过特征图加权得到显著图。
Itti于1998年提出基于显著性的视觉注意模型,并在2001年度Nature上对该模型理论作了进一步的完善。Itti的显著性模型最具代表性,该模型已经成为了自下而上视觉注意模型的标准。2
对于一幅输入的图像,该模型提取初级视觉特征:颜色(RGBY)、亮度和方位、在多种尺度下使用中央周边(Center-surround)操作产生体现显著性度量的特征图,将这些特征图合并得到最终的显著图(Saliency map)后,利用生物学中赢者取全(Winner-take-all)的竞争机制得到图像中最显著的空间位置, 用来向导注意位置的选取,最后采用返回抑制 (Inhibition of return) 的方法来完成注意焦点的转移。视觉显著性计算模型大致上可分为两个阶段:特征提取与特征融合。在特征融合阶段,可能存在自底向上的底层特征驱动的融合方式,和自顶向下的基于先验信息与任务的融合方式。因此,视觉显著性检测模型框架大致表述为如图 5 所示。
视觉显著性检测算法LC算法LC算法的基本思想是:计算某个像素在整个图像上的全局对比度,即该像素与图像中其他所有像素在颜色上的距离之和作为该像素的显著值3。
图像 中某个像素 的显著值计算如下:
其中的取值范围为 [0,255], 即为灰度值。将上式进行展开得:
其中N表示图像中像素的数量。
给定一张图像,每个像素的颜色值已知。假定,则上式可进一步重构:
其中,表示图像中第n个像素的频数,以直方图的形式表示。
LC算法的代码实现:
1、直接调用OpenCV接口,实现图像中像素的直方图统计,即统计[0,255]中每个灰度值的数量。
# 直方图,统计图像中每个灰度值的数量hist_array = cv2.calcHist([image_gray], [0], None, [256], [0.0, 256.0])2、计算像素与其他所有像素在灰度值上的距离。
def cal_dist(hist): dist = {} for gray in range(256): value = 0.0 for k in range(256): value += hist[k][0] * abs(gray - k) dist[gray] = value return dist3、将灰度值图像中的像素值更新为对比度值(即距离度量)。
for i in range(image_width): for j in range(image_height): temp = image_gray[j][i] image_gray_copy[j][i] = gray_dist[temp]image_gray_copy = (image_gray_copy - np.min(image_gray_copy)) / (np.max(image_gray_copy) - np.min(image_gray_copy))github上有代码的具体实现:https://github.com/asdfv1929/Saliency_LC_Algorithm
HC算法HC算法和LC算法没有本质的区别,HC算法相比于LC算法考虑了彩色信息,而不是像LC那样只用像素的灰度信息,由于彩色图像最多有256*256*256种颜色,因此直接采用基于直方图技术的方案不适用于彩色图片。但是实际上一幅彩色图像并不会用到那么多种颜色,因此提出了降低颜色数量的方案,将RGB各分量分别映射成12等份,则隐射后的图最多只有12*12*12种颜色,这样就可以构造一个较小的直方图用来加速,但是由于过渡量化会对结果带来一定的影响,因此又用了一个平滑的过程。 最后和LC不同的是,对图像处理在Lab空间进行的,而由于Lab空间和RGB并不是完全对应的,其量化过程还是在RGB空间完成的4。
AC算法AC算法是基于局部对比度的,采用Lab颜色空间计算距离。AC算法通过计算一个感知单元在不同邻域上的局部对比度来实现多尺度显著性计算。内部区域R1,外部区域R2,计算R1和R2的局部对比度时,通过改变R2的大小实现多尺度显著性计算5。
感知单元R1可以是一个像素或一个像素块,其邻域为R2,(R1)R2所包含的所有像素的特征值的平均值作为(R1)R2的特征值。设像素p为R1和R2的中心,p所在位置局部对比度为:
其中N1和N2分别是R1和R2中像素的个数。vk是k这个位置的特征值或特征向量。
AC方法采用Lab颜色特征,采用欧氏距离计算特征距离。R1默认为一个像素,R2边长为[L/8,L/2]之间的正方形区域,L为长宽中较小者。多个尺度的特征显著图通过直接相加得到完整的显著图。
FT算法FT算法从频率角度分析图像。图像在频率域可以分成低频部分和高频部分。低频部分反映了图像的整体信息,如物体的轮廓,基本的组成区域。高频部分反映了图像的细节信息,如物体的纹理。显著性区域检测用到的更多的是低频部分的信息6。在实际进行计算时,FT方法使用窗口5*5的高斯平滑来实现对最高频的舍去。像素的显著性可以用下面公式计算:
其中,为图像的平均特征,使用Lab颜色特征,后一项为像素p在高斯平滑后的Lab颜色特征,||.||为L2范式,即计算前一项和后一项在了Lab颜色空间的欧氏距离。FT方法实现简单,只需要高斯平滑和平均值计算。
matlab代码实现思路如下:
1、对图像进行5*5的高斯平滑。
2、转换颜色空间。RGB颜色空间转换为CIELAB颜色空间。
3、计算整幅图片的l、a、b的平均值。
4、按照算法中的公式,计算每个像素l、a、b值同图像三个l、a、b均值的欧氏距离。得到显著图
5、归一化。图像中每个像素的显著值除以最大的那个显著值。得到最终的显著图。
本词条内容贡献者为:
程鹏 - 副教授 - 西南大学