这篇论文其实在 作者的主页 上面已经给出中文版的论文了,这里主要是为了总结对比最近研究过的显著性检测方法。同时后续博客也将对照源码分析论文中算法的实现(TODO).
1、引言
论文的算法是基于以下几点观察提出(即 RC 算法的特点):
- 基于全局对比度的方法倾向于将大范围的目标和周围环境分离开. 这种方法要优于那些通常只在轮廓附近产生较高显著性的局部对比度方法.
- 全局的考虑可以为图像中相似区域分配一个相近的显著值, 这样就可以均匀的凸显目标.
- 一个区域的显著性主要是由它和周围区域的对比度决定, 相距很远的区域就几乎不起作用了.
- 为了能够适应大规模图像集处理和高效图像检索, 分类的应用需求, 显著性检测算法应该快速, 简单.
根据这几点的观察, 作者在文章中提出了两种方法,分别是基于直方图对比度的方法(Histogram Contrast)和基于局域对比度的方法(Region-based Contrast)。
2、基于直方图统计的对比度(HC)
文中提出 HC 方法来检测显著性, HC 方法是通过计算与其他像素的颜色差异来得到像素的显著性值.
一个像素的显著性值用它和图像中其他像素颜色的对比度来定义. 例如图像 I I I 中像素 I k I_k Ik 的显著性值定义为:
(1) S ( I k ) = ∑ ∀ I i ∈ I D ( I k , I i ) \tag{1} S(I_k) = \sum_{\forall{I_i \in I}}D(I_k, I_i) S(Ik)=∀Ii∈I∑D(Ik,Ii)(1)
其中 D ( I k , I i ) D(I_k,I_i) D(Ik,Ii) 为像素 I k I_k Ik 和像素 I i I_i Ii 在 Lab 空间的颜色距离。将公式展开可得:
(2) S ( I k ) = D ( I k , I 1 ) + D ( I k , I 2 ) + ⋯ + D ( I k , I N ) \tag{2} S(I_k) = D(I_k, I_1) + D(I_k, I_2) +\cdots + D(I_k, I_N) S(Ik)=D(Ik,I1)+D(Ik,I2)+⋯+D(Ik,IN)(2)
其中 N 为图像 I I I 的像素个数.
如果按照以上方法计算,相同颜色值的像素得到的显著性显著性值也相同,如此一来,我们可以将相同颜色值的像素 c j c_j cj 归到一起, 不必对每个像素都进行计算,可以得到以下公式:
(3) S ( I k ) = S ( c l ) = ∑ j = 1 n f j D ( c l , c j ) \tag{3} S(I_k) = S(c_l) = \sum_{j = 1}^{n} f_jD(c_l, c_j) S(Ik)=S(cl)=j=1∑nfjD(cl,cj)(3)
其中,
- c l c_l cl 为像素 I k I_k Ik 的颜色值;
- n n n 为图像中所含的颜色总数;
- f j f_j fj 为 c j c_j cj 颜色在图像中出现的概率(即直方图中 c j c_j cj 颜色的个数);
用公式 (1) 计算显著性值时, 算法的复杂度为 O ( N 2 ) O(N^2) O(N2), 对于中等图像来说, 这个计算的代价也已经很高了.
公式 (3) 计算显著性值时的算法复杂度为 O ( N ) + O ( n 2 ) O(N) + O(n^2) O(N)+O(n2), 如果 O ( n 2 ) ≤ O ( N ) O(n^2) \leq O(N) O(n2)≤O(N), 那么时间复杂度就可以优化到 O ( N ) O(N) O(N). 因此, 加速的关键在于减少图像像素颜色的总数. 因为彩色图片有三个通道,每个通道取值为 0-255,所以总共有 25 5 3 ≈ 255^3 \approx 2553≈ 16 万种颜色,计算复杂度太大.
2.1 基于直方图的加速
显著性算法一般只是图像应用的预处理部分, 因此应该是 fast 的. 本文提出了一种基于直方图的加速方法。
为了加快算法的运行时间,降低算法的时间复杂度,作者使用基于直方图加速的方法,将每个通道值从 255 量化到 12, 这会将颜色数量减少到 n = 1 2 3 = 1728 n = 12^3 = 1728 n=123=1728 种颜色. 考虑到自然图像中的颜色只占据整个色彩空间中很小的一部分, 可以将出现频率较小的颜色丢掉,确保颜色覆盖 95% 以上的像素就可以了, 这样可以将颜色数目减少到 n = 85 左右, 剩下的 5% 的像素所占的颜色被直方图中距离最近的颜色所代替。
2.2 颜色空间平滑
由于减少颜色数量会对图片产生一定的瑕疵, 然后导致相似颜色可能会被量化为不同的值, 所以作者通过颜色空间平滑来解决这个问题: 每个颜色的显著值被替换为相似颜色(在 L*a*b
颜色空间)显著值的加权平均。文中使用
m
=
n
4
m = \frac{n}{4}
m=4n 个最近邻颜色来平滑颜色
c
c
c 的显著性值. 公式如下:
(4) S ′ ( c ) = 1 ( m − 1 ) T ∑ i = 1 m ( T − D ( c , c i ) ) S ( c i ) \tag{4} S'(c) = \frac{1}{(m-1)T} \sum_{i = 1}^{m} (T-D(c, c_i))S(c_i) S′(c)=(m−1)T1i=1∑m(T−D(c,ci))S(ci)(4)
其中,
- T = ∑ i = 1 m D ( c , c i ) T = \sum_{i=1}^{m}D(c, c_i) T=∑i=1mD(c,ci) 为颜色 c 和它的 m 个最近邻 c i c_i ci 之间的距离;
- ( m − 1 ) T (m-1)T (m−1)T 为归一化因数, 由以下公式得到(这里有点绕):
∑ i = 1 m ( T − D ( c , c i ) ) = ( m − 1 ) T \sum_{i = 1}^{m} (T-D(c, c_i)) = (m-1)T i=1∑m(T−D(c,ci))=(m−1)T
直观的理解一下 T − D ( c , c i ) T-D(c, c_i) T−D(c,ci): T − D ( c , c i ) T-D(c, c_i) T−D(c,ci) 是平滑显著性值使用的权值, 在 c i c_i ci 的邻域中, 如果 c i c_i ci 和 c c c 的颜色距离最近, 那么 D ( c , c i ) D(c, c_i) D(c,ci) 的值必然最小, 因此越相似的显著性值就会得到越大的权值.
以下是平滑前后的显著性值直方图对比图.
可以注意到相似的显著性值分配到相似的显著性值,减少了量化的瑕疵。同时可以看到, 平滑后的显著性值明显大于平滑前的显著性值, 显著性图的对比度得到加强.
注意区分两个颜色空间, 量化发生在 RGB 颜色空间,测量距离在 Lab 颜色空间。
3、基于区域的对比度(RC)
人类对于一张图片中目标的注意力具有以下两个特点:
- 在一张图片中, 人们会更加注意到和周围物体对比度非常大的区域;
- 在一张图片中, 对一个特定的区域, 与其相邻区域的高对比度比距其很远区域的高对比度更加容易引起视觉注意;
计算像素级对比度时引进空间关系会使得计算代价非常大, 因此文中引进一种对比度分析方法: Region Contrast, 将空间关系和区域对比度(Region Contrast) 结合到一起.
首先将图像分割成若干区域,然后计算区域之间的颜色对比度, 再用每个区域和其他区域对比度的加权和来为此区域定义显著性值. 加权和操作中使用的权值由区域(Region) 的空间距离决定, 较远的区域分配较小的权值.
3.1 用稀疏直方图比较来计算 Region Contrast
首先使用 [基于图的图像分割方法][3] 将图像分割成若干区域, 为每个区域建立第 2 节提到的颜色直方图. 对每个区域 r k r_k rk, 通过测量它与其他区域的颜色对比度来计算它的显著性,公式如下:
(5) S ( r k ) = ∑ r k ≠ r i ω ( r i ) D ( r k , r i ) \tag{5} S(r_k) = \sum_{r_k \ne r_i} \omega(r_i)D(r_k, r_i) S(rk)=rk̸=ri∑ω(ri)D(rk,ri)(5)
其中,
- ω ( r i ) \omega(r_i) ω(ri) 为区域 r i r_i ri 的权值, 表示 r i r_i ri 区域中的像素个数, 这里用它来强调大区域的颜色对比度;
- D ( r k , r i ) D(r_k, r_i) D(rk,ri) 为两个区域的颜色度量, 定义为:
(6) D r ( r k , r i ) = ∑ i = 1 n 1 ∑ j = 1 n 2 f ( c 1 , i ) f ( c 2 , j ) D ( c 1 , i , c 2 , j ) \tag{6} D_r(r_k, r_i) = \sum_{i= 1}^{n_1}\sum_{j= 1}^{n_2} f(c_{1,i})f(c_{2,j})D(c_{1,i}, c_{2,j}) Dr(rk,ri)=i=1∑n1j=1∑n2f(c1,i)f(c2,j)D(c1,i,c2,j)(6)
其中,
- n 1 , n 2 n_1, n_2 n1,n2 分别表示第一, 第二区域内的颜色总数;
- f ( c 1 , i ) f(c_{1,i}) f(c1,i) 为第 i 个颜色在第 1 个区域的所有 n 1 n_1 n1 种颜色中出现的概率;
- f ( c 2 , j ) f(c_{2,j}) f(c2,j) 为第 j 个颜色在第 2 个区域的所有 n 2 n_2 n2 种颜色中出现的概率;
- D r ( c 1 , i , c 2 , j ) D_r(c_{1,i}, c_{2,j}) Dr(c1,i,c2,j) 表示第 1 个区域第 i 种颜色和地 2 个区域第 j 种颜色之间的距离。
原文中提到这样一句话: 我们使用区域的概率密度函数(即归一化的颜色直方图)中颜色出现的概率作为 "两个区域颜色距离 D r ( c 1 , i , c 2 , j ) D_r(c_{1,i}, c_{2,j}) Dr(c1,i,c2,j)" 的权值, 以强调主要的颜色之间的区别, 即计算区域颜色距离时主要颜色之间的距离起着较大的作用. 直观的理解就是主要的颜色在直方图中出现的概率相对较大, 权值也相对较大; 反之, 出现概率小的颜色在求解距离时起到的作用就很小.
3.2 空间加权区域对比度
在区域对比度的基础上引入空间信息,即在式子 (5) 中引入空间权值,公式如下:
(7) S ( r k ) = ∑ r k ≠ r i exp ( − D s ( r k , r i ) σ s 2 ) ⋅ ω ( r i ) D r ( r k , r i ) \tag{7} S(r_k) = \sum_{r_k \ne r_i} \text{exp}(\frac{-D_s(r_k, r_i)}{\sigma_s^2}) \cdot \omega(r_i)D_r(r_k, r_i) S(rk)=rk̸=ri∑exp(σs2−Ds(rk,ri))⋅ω(ri)Dr(rk,ri)(7)
其中,
- D s ( r k , r i ) D_s(r_k, r_i) Ds(rk,ri) 表示区域 r k r_k rk 和 r i r_i ri 之间的空间距离, 定义为两个区域重心的欧氏距离.
- σ s \sigma_s σs 控制空间权值强度. σ s \sigma_s σs 越大, 空间权值对显著性值的影响越小.
在文中的实验中, σ s 2 = 0.4 \sigma_s^2 = 0.4 σs2=0.4, 像素坐标归一化到 [0, 1] 之间.
4. 算法代码实现流程
这里只是提到了代码中的实现流程, 详细的代码分析参见下一篇博客(TODO).
代码中的实现顺序和之前论文中提到的流程几乎一致, 大致流程如下:
- 在 RGB 颜色空间量化颜色数目, 即减少颜色数目, 为了提高算法效率;
- 基于 Graph 的分割方法将图像划分成若干区域, 得到 Region Index;
- 根据 Region Index 填充每个区域的 Region 参数;
- 根据公式 (6) 和公式 (7) 计算 Region Contrast, 将区域显著值分配到原图像素坐标中得到 Saliency Map;
- 获取前景/背景的 mask, 选取原图宽高尺寸的 0.02 比例的窄边界当做参考背景;
- 根据第 (5) 步的前景/背景 mask refine 第 (4) 步中得到的 Saliency Map 值.
5、算法应用 - SalientCut
最后, 论文中还提到一种方法是: SalientCut, 其核心是 Grabcut 分割方法. 主要做了以下两点改进:
- 将 GrabCut 需要指定 Bounding Box 先验标注框的部分替换为显著值特征图;
- 迭代过程中依然使用 GrabCut 算法, 对每次迭代结果应用腐蚀膨胀运算来获取下一次迭代需要的 Trimap.
参考资料
[1]: Global Contrast based Salient Region detection
[2]: 论文作者主页
[3]: P. Felzenszwalb and D. Huttenlocher. Efficient graph-based
image segmentation. IJCV, 59(2):167–181, 2004. 411, 413
论文的作者主页上提供代码下载。