天天看點

特征提取算法——HOG (Histogram of Gradient)方向梯度直方圖學習筆記1. 伽馬/顔色标準化(Gamma/Colour Normalization)2. 梯度計算(Gradient Computation)3.建構梯度直方圖(Orientation Histograms Build)4. 塊歸一化

今天介紹一種圖像特征提取算法:HOG(Histogram of Gradient)方向梯度直方圖

HOG+SVM廣泛運用與行人檢測,在CVPR2005這篇文章中,實施HOG算法一共有4個步驟。

1. 伽馬/顔色标準化(Gamma/Colour Normalization)

第一步應對圖像進行伽馬矯正和顔色空間标準化的預處理,此步的目的是為了減少光照的影響。

顔色空間标準化中,Dalal等人的論文中分别使用了RGB,LAB和灰階等顔色空間對圖像進行預處理,但對最終結果影響并不大,灰階圖像有微弱優勢,是以這裡使用灰階圖。

伽馬矯正中,Dalal等人的論文使用了Square root gamma compression和Log compression,最終結果顯示Square root gamma compression對檢測有更好的表現。

對于不了解伽馬矯正的同學,具體伽馬矯正的知識可以參考我的這篇文章:https://blog.csdn.net/dx199771/article/details/111504446

對于一些具有大量顔色變化的圖像,沒有進行标準化的RGB圖像也有不錯的表現。

一般對圖像進行預處理時為了去除噪點還會用到高斯平滑對圖像進行模糊處理,但Dalal等人的論文中表示不做高斯平滑的檢測效果最佳,這可能是因為HOG檢測是基于邊緣梯度的,對圖像進行平滑處理會降低邊緣資訊的對比度,進而損失圖像資訊。

2. 梯度計算(Gradient Computation)

對于還不知道梯度是什麼的同學可以參考這篇文章:(TODO)

HOG的第二部就是對輸入圖像的每個像素點位置進行水準方向和豎直方向的方向梯度計算,公式如下:

特征提取算法——HOG (Histogram of Gradient)方向梯度直方圖學習筆記1. 伽馬/顔色标準化(Gamma/Colour Normalization)2. 梯度計算(Gradient Computation)3.建構梯度直方圖(Orientation Histograms Build)4. 塊歸一化
特征提取算法——HOG (Histogram of Gradient)方向梯度直方圖學習筆記1. 伽馬/顔色标準化(Gamma/Colour Normalization)2. 梯度計算(Gradient Computation)3.建構梯度直方圖(Orientation Histograms Build)4. 塊歸一化
特征提取算法——HOG (Histogram of Gradient)方向梯度直方圖學習筆記1. 伽馬/顔色标準化(Gamma/Colour Normalization)2. 梯度計算(Gradient Computation)3.建構梯度直方圖(Orientation Histograms Build)4. 塊歸一化
特征提取算法——HOG (Histogram of Gradient)方向梯度直方圖學習筆記1. 伽馬/顔色标準化(Gamma/Colour Normalization)2. 梯度計算(Gradient Computation)3.建構梯度直方圖(Orientation Histograms Build)4. 塊歸一化

梯度共分為梯度方向和梯度幅值,上述公式中,

特征提取算法——HOG (Histogram of Gradient)方向梯度直方圖學習筆記1. 伽馬/顔色标準化(Gamma/Colour Normalization)2. 梯度計算(Gradient Computation)3.建構梯度直方圖(Orientation Histograms Build)4. 塊歸一化

為梯度方向,

特征提取算法——HOG (Histogram of Gradient)方向梯度直方圖學習筆記1. 伽馬/顔色标準化(Gamma/Colour Normalization)2. 梯度計算(Gradient Computation)3.建構梯度直方圖(Orientation Histograms Build)4. 塊歸一化

為梯度幅值。Deala等人的論文中對比不同微分算子進行梯度計算(包括1-D,3*3Sobel算子和2*2對角矩陣),最終得出[-1,0,1]算子效果最佳。

3.建構梯度直方圖(Orientation Histograms Build)

HOG的第三部是建構梯度直方圖:

這裡首先要将圖像分為n*n個cell。(比如150*150的圖像分為25*25個cell,每個cell就是6*6像素)

統計每個cell的梯度直方圖後就可以建構每個cell的描述子,這裡每個8*8的cell裡有128個數字(8*8*2這裡的2代表梯度幅值和梯度方向)。 

這樣将每個cell中的資料分不到直方圖中就可得到每個cell的描述子。如果不了解具體分布過程不要怕,這裡将通俗的介紹一下:

我們一般将180度的區域分為9個子區域(bins),增量為20,如下圖:每個區域有與其對應的角度(0-20度,20-40度,160-180度)。之後将每個cell中8*8個梯度按角度和幅值分布在每個子區域中。

例如:有一組梯度角度和幅值分别為:

梯度1 梯度2
角度 35° 85°
幅值 80 20

那麼構造出的方向直方圖即為:

20° 40° 60° 80° 100° ... 180°
- 20 60 - 15 5 ... -

這裡梯度幅值如果在兩個角度中間,例如35°,那這個梯度幅值将會根據與每個bin的距離相應的拆分大小。 35°離40°更近,則被配置設定更高權重。離20°更遠則被配置設定更小權重。

梯度表示可以是橫向的也可以是圓形的,如下圖紅車的梯度直方圖可視表示(每一條線代表一個方向,線的長短代表幅值)

如果将每個cell的描述子可視化的表示,就如下圖所示:可以看到,車頭部分每個cell的梯度直方圖很飽滿,像一個炸開的煙花,這表明每個方向上的梯度幅值是平均的,而車門處則是類似橫線的梯度直方圖,這代表僅有幾個方向梯度幅值較大。

特征提取算法——HOG (Histogram of Gradient)方向梯度直方圖學習筆記1. 伽馬/顔色标準化(Gamma/Colour Normalization)2. 梯度計算(Gradient Computation)3.建構梯度直方圖(Orientation Histograms Build)4. 塊歸一化

4. 塊歸一化

由于光照變化等因素可能會幹擾梯度的變化範圍(光照比目前暗1/2,那麼梯度幅值會減少一半)。作者還提出了一種塊歸一化方法:

塊歸一化利用累計空間連通的cells,合成更大的區域blocks(塊)。這樣将每個cell的特征串聯就得到該block的特征(例如2*2的cells合稱為一個block)。我們将歸一化後的塊稱為HOG描述子。

HOG描述子在行人識别,人臉識别的領域帶來了巨大的進步,opencv和skimage中有build-in的HOG方法,大家可以去試一試。

HOG的優缺點:

優點:

  • HOG了解簡單
  • 有一定程度的平移旋轉不變形
  • 采用塊歸一化可以抑制光照顔色等影響

缺點:

  • HOG描述子生成速度慢,不能達到實時檢測的目的
  • 遮擋問題難以解決
  • 對噪點敏感

繼續閱讀