1. 程式人生 > >Haar特徵和積分圖

Haar特徵和積分圖

一、Haar-like特徵

        什麼是特徵,我把它放在下面的情景中來描述,假設在人臉檢測時我們需要有這麼一個子視窗待檢測的圖片視窗不斷的移位滑動子視窗每到一個位置,就會計算出該區域的特徵,然後用我們訓練好的級聯分類器對該特徵進行篩選,一旦該特徵通過了所有強分類器的篩選,則判定該區域為人臉。

那麼這個特徵如何表示呢?好了,這就是大牛們乾的好事了。後人稱這他們搞出來的這些東西叫Haar-Like特徵。

下面是Viola牛們提出的Haar-like特徵。

下面是Lienhart等牛們提出的Haar-like特徵。

     這些所謂的特徵不就是一堆堆帶條紋的矩形麼,到底是幹什麼用的?我這樣給出解釋,將上面的任意一個矩形放到人臉區域上,然後,將白色區域的畫素和減去黑色區域的畫素和,得到的值我們暫且稱之為人臉特徵值

如果你把這個矩形放到一個非人臉區域,那麼計算出的特徵值應該和人臉特徵值是不一樣的,而且越不一樣越好,所以這些方塊的目的就是把人臉特徵量化,以區分人臉和非人臉。

        為了增加區分度,可以對多個矩形特徵計算得到一個區分度更大的特徵值,那麼什麼樣的矩形特徵怎麼樣的組合到一塊可以更好的區分出人臉和非人臉呢,這就是AdaBoost演算法要做的事了

2、積分圖(加速器)

      它是Haar分類器能夠實時檢測人臉的保證, 在前面的章節中,我們熟悉了Haar-like分類器的訓練和檢測過程,你會看到無論是訓練還是檢測,每遇到一個圖片樣本,每遇到一個子視窗影象,我們都面臨著如何計算當前子影象特徵值的問題,一個

Haar-like特徵在一個視窗中怎樣排列能夠更好的體現人臉的特徵,這是未知的,所以才要訓練,而訓練之前我們只能通過排列組合窮舉所有這樣的特徵,僅以Viola牛提出的最基本四個特徵為例,在一個24×24size的視窗中任意排列至少可以產生數以10萬計的特徵,對這些特徵求值的計算量是非常大的。

而積分圖就是只遍歷一次影象就可以求出影象中所有區域畫素和的快速演算法,大大的提高了影象特徵值計算的效率。

我們來看看它是怎麼做到的。

積分圖是一種能夠描述全域性資訊的矩陣表示方法。積分圖的構造方式是位置(i,j)處的值ii(i,j)是原影象(i,j)左上角方向所有畫素的和

          

積分圖構建演算法:

1)用s(i,j)表示行方向的累加和,初始化s(i,-1)=0;

2)用ii(i,j)表示一個積分影象,初始化ii(-1,i)=0

3)逐行掃描影象,遞迴計算每個畫素(i,j)行方向的累加和s(i,j)和積分影象ii(i,j)的值

s(i,j)=s(i,j-1)+f(i,j)

ii(i,j)=ii(i-1,j)+s(i,j)

4)掃描影象一遍,當到達影象右下角畫素時,積分影象ii就構造好了。

積分圖構造好之後,影象中任何矩陣區域的畫素累加和都可以通過簡單運算得到如圖所示。

          

D的四個頂點分別為α、β、γ、δ,則D的畫素和可以表示為

Dsum = ii( α )+ii( β)-(ii( γ)+ii( δ ));

Haar-like特徵值無非就是兩個矩陣畫素和的差,同樣可以在常數時間內完成。