顯著目標檢測論文(一)——Global Contrast based Salient Region Detection (2011)

這篇論文其實在 作者的主頁 上面已經給出中文版的論文了,這裏主要是爲了總結對比最近研究過的顯著性檢測方法。同時後續博客也將對照源碼分析論文中算法的實現(TODO).


1、引言


論文的算法是基於以下幾點觀察提出(即 RC 算法的特點):

  • 基於全局對比度的方法傾向於將大範圍的目標和周圍環境分離開. 這種方法要優於那些通常只在輪廓附近產生較高顯著性的局部對比度方法.
  • 全局的考慮可以爲圖像中相似區域分配一個相近的顯著值, 這樣就可以均勻的凸顯目標.
  • 一個區域的顯著性主要是由它和周圍區域的對比度決定, 相距很遠的區域就幾乎不起作用了.
  • 爲了能夠適應大規模圖像集處理和高效圖像檢索, 分類的應用需求, 顯著性檢測算法應該快速, 簡單.

根據這幾點的觀察, 作者在文章中提出了兩種方法,分別是基於直方圖對比度的方法(Histogram Contrast)和基於局域對比度的方法(Region-based Contrast)。


2、基於直方圖統計的對比度(HC)


文中提出 HC 方法來檢測顯著性, HC 方法是通過計算與其他像素的顏色差異來得到像素的顯著性值.

一個像素的顯著性值用它和圖像中其他像素顏色的對比度來定義. 例如圖像 II 中像素 IkI_k 的顯著性值定義爲:

(1)S(Ik)=IiID(Ik,Ii) \tag{1} S(I_k) = \sum_{\forall{I_i \in I}}D(I_k, I_i)

其中 D(IkIi)D(I_k,I_i) 爲像素 IkI_k 和像素 IiI_i 在 Lab 空間的顏色距離。將公式展開可得:

(2)S(Ik)=D(Ik,I1)+D(Ik,I2)++D(Ik,IN) \tag{2} S(I_k) = D(I_k, I_1) + D(I_k, I_2) +\cdots + D(I_k, I_N)

其中 N 爲圖像 II 的像素個數.

如果按照以上方法計算,相同顏色值的像素得到的顯著性顯著性值也相同,如此一來,我們可以將相同顏色值的像素 cjc_j 歸到一起, 不必對每個像素都進行計算,可以得到以下公式:

(3)S(Ik)=S(cl)=j=1nfjD(cl,cj) \tag{3} S(I_k) = S(c_l) = \sum_{j = 1}^{n} f_jD(c_l, c_j)

其中,

  • clc_l 爲像素 IkI_k 的顏色值;
  • nn 爲圖像中所含的顏色總數;
  • fjf_jcjc_j 顏色在圖像中出現的概率(即直方圖中 cjc_j 顏色的個數);

用公式 (1) 計算顯著性值時, 算法的複雜度爲 O(N2)O(N^2), 對於中等圖像來說, 這個計算的代價也已經很高了.

公式 (3) 計算顯著性值時的算法複雜度爲 O(N)+O(n2)O(N) + O(n^2), 如果 O(n2)O(N)O(n^2) \leq O(N), 那麼時間複雜度就可以優化到 O(N)O(N). 因此, 加速的關鍵在於減少圖像像素顏色的總數. 因爲彩色圖片有三個通道,每個通道取值爲 0-255,所以總共有 2553255^3 \approx 16 萬種顏色,計算複雜度太大.


2.1 基於直方圖的加速


顯著性算法一般只是圖像應用的預處理部分, 因此應該是 fast 的. 本文提出了一種基於直方圖的加速方法。

爲了加快算法的運行時間,降低算法的時間複雜度,作者使用基於直方圖加速的方法,將每個通道值從 255 量化到 12, 這會將顏色數量減少到 n=123=1728n = 12^3 = 1728 種顏色. 考慮到自然圖像中的顏色只佔據整個色彩空間中很小的一部分, 可以將出現頻率較小的顏色丟掉,確保顏色覆蓋 95% 以上的像素就可以了, 這樣可以將顏色數目減少到 n = 85 左右, 剩下的 5% 的像素所佔的顏色被直方圖中距離最近的顏色所代替。


2.2 顏色空間平滑


由於減少顏色數量會對圖片產生一定的瑕疵, 然後導致相似顏色可能會被量化爲不同的值, 所以作者通過顏色空間平滑來解決這個問題: 每個顏色的顯著值被替換爲相似顏色(在 L*a*b 顏色空間)顯著值的加權平均。文中使用 m=n4m = \frac{n}{4} 個最近鄰顏色來平滑顏色 cc 的顯著性值. 公式如下:

(4)S(c)=1(m1)Ti=1m(TD(c,ci))S(ci) \tag{4} S'(c) = \frac{1}{(m-1)T} \sum_{i = 1}^{m} (T-D(c, c_i))S(c_i)

其中,

  • T=i=1mD(c,ci)T = \sum_{i=1}^{m}D(c, c_i) 爲顏色 c 和它的 m 個最近鄰 cic_i 之間的距離;
  • (m1)T(m-1)T 爲歸一化因數, 由以下公式得到(這裏有點繞):

i=1m(TD(c,ci))=(m1)T \sum_{i = 1}^{m} (T-D(c, c_i)) = (m-1)T

直觀的理解一下 TD(c,ci)T-D(c, c_i): TD(c,ci)T-D(c, c_i) 是平滑顯著性值使用的權值, 在 cic_i 的鄰域中, 如果 cic_icc 的顏色距離最近, 那麼 D(c,ci)D(c, c_i) 的值必然最小, 因此越相似的顯著性值就會得到越大的權值.

以下是平滑前後的顯著性值直方圖對比圖.

在這裏插入圖片描述

可以注意到相似的顯著性值分配到相似的顯著性值,減少了量化的瑕疵。同時可以看到, 平滑後的顯著性值明顯大於平滑前的顯著性值, 顯著性圖的對比度得到加強.

注意區分兩個顏色空間, 量化發生在 RGB 顏色空間,測量距離在 Lab 顏色空間。


3、基於區域的對比度(RC)


人類對於一張圖片中目標的注意力具有以下兩個特點:

  • 在一張圖片中, 人們會更加注意到和周圍物體對比度非常大的區域;
  • 在一張圖片中, 對一個特定的區域, 與其相鄰區域的高對比度比距其很遠區域的高對比度更加容易引起視覺注意;

計算像素級對比度時引進空間關係會使得計算代價非常大, 因此文中引進一種對比度分析方法: Region Contrast, 將空間關係和區域對比度(Region Contrast) 結合到一起.

首先將圖像分割成若干區域,然後計算區域之間的顏色對比度, 再用每個區域和其他區域對比度的加權和來爲此區域定義顯著性值. 加權和操作中使用的權值由區域(Region) 的空間距離決定, 較遠的區域分配較小的權值.


3.1 用稀疏直方圖比較來計算 Region Contrast


首先使用 [基於圖的圖像分割方法][3] 將圖像分割成若干區域, 爲每個區域建立第 2 節提到的顏色直方圖. 對每個區域 rkr_k, 通過測量它與其他區域的顏色對比度來計算它的顯著性,公式如下:

(5)S(rk)=rkriω(ri)D(rk,ri) \tag{5} S(r_k) = \sum_{r_k \ne r_i} \omega(r_i)D(r_k, r_i)

其中,

  • ω(ri)\omega(r_i) 爲區域 rir_i 的權值, 表示 rir_i 區域中的像素個數, 這裏用它來強調大區域的顏色對比度;
  • D(rk,ri)D(r_k, r_i) 爲兩個區域的顏色度量, 定義爲:

(6)Dr(rk,ri)=i=1n1j=1n2f(c1,i)f(c2,j)D(c1,i,c2,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})

其中,

  • n1,n2n_1, n_2 分別表示第一, 第二區域內的顏色總數;
  • f(c1,i)f(c_{1,i}) 爲第 i 個顏色在第 1 個區域的所有 n1n_1 種顏色中出現的概率;
  • f(c2,j)f(c_{2,j}) 爲第 j 個顏色在第 2 個區域的所有 n2n_2 種顏色中出現的概率;
  • Dr(c1,i,c2,j)D_r(c_{1,i}, c_{2,j}) 表示第 1 個區域第 i 種顏色和地 2 個區域第 j 種顏色之間的距離。

原文中提到這樣一句話: 我們使用區域的概率密度函數(即歸一化的顏色直方圖)中顏色出現的概率作爲 "兩個區域顏色距離 Dr(c1,i,c2,j)D_r(c_{1,i}, c_{2,j})" 的權值, 以強調主要的顏色之間的區別, 即計算區域顏色距離時主要顏色之間的距離起着較大的作用. 直觀的理解就是主要的顏色在直方圖中出現的概率相對較大, 權值也相對較大; 反之, 出現概率小的顏色在求解距離時起到的作用就很小.


3.2 空間加權區域對比度


在區域對比度的基礎上引入空間信息,即在式子 (5) 中引入空間權值,公式如下:

(7)S(rk)=rkriexp(Ds(rk,ri)σs2)ω(ri)Dr(rk,ri) \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)

其中,

  • Ds(rk,ri)D_s(r_k, r_i) 表示區域 rkr_krir_i 之間的空間距離, 定義爲兩個區域重心的歐氏距離.
  • σs\sigma_s 控制空間權值強度. σs\sigma_s 越大, 空間權值對顯著性值的影響越小.

在文中的實驗中, σs2=0.4\sigma_s^2 = 0.4, 像素座標歸一化到 [0, 1] 之間.


4. 算法代碼實現流程


這裏只是提到了代碼中的實現流程, 詳細的代碼分析參見下一篇博客(TODO).

代碼中的實現順序和之前論文中提到的流程幾乎一致, 大致流程如下:

  1. 在 RGB 顏色空間量化顏色數目, 即減少顏色數目, 爲了提高算法效率;
  2. 基於 Graph 的分割方法將圖像劃分成若干區域, 得到 Region Index;
  3. 根據 Region Index 填充每個區域的 Region 參數;
  4. 根據公式 (6) 和公式 (7) 計算 Region Contrast, 將區域顯著值分配到原圖像素座標中得到 Saliency Map;
  5. 獲取前景/背景的 mask, 選取原圖寬高尺寸的 0.02 比例的窄邊界當做參考背景;
  6. 根據第 (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

論文的作者主頁上提供代碼下載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章