1. 程式人生 > >【目標檢測】HOG特徵學習記錄

【目標檢測】HOG特徵學習記錄

HOG特徵即方向梯度直方圖(Histgram of Oriented,HOG),最初是用來檢測行人的特徵描述子,現在也廣泛用於計算機視覺和影象處理中進行物體檢測。

通過計算和統計影象區域性區域的梯度方向直方圖來構成特徵。

影象的梯度主要存在於物體的邊緣,而區域性目標和形狀能夠被梯度或邊緣的方向密度分佈很好地描述。

先放一張HOG特徵檢測的流程圖。

一、影象預處理

因為在HOG特徵中,顏色並不起什麼作用,所以首先將彩色影象灰度化。

為了減少光照的影響,需要將影象進行規範化,能有效降低影象區域性的陰影和光照變化。

通常用Gamma公式對影象進行規範化:

二、計算梯度

影象的梯度分為水平方向的梯度和垂直方向的梯度,再以此梯度計算每個畫素的梯度幅值和梯度方向。

使用的梯度運算元是:

  • 水平邊緣運算元:[-1, 0, 1];
  • 垂直邊緣運算元:[-1, 0, 1]T。

影象畫素點(x,y)水平方向梯度和垂直方向梯度分別是:

進而可以求出該畫素點的梯度幅值和梯度方向:

當然,作者也實驗了更復雜的梯度運算元,但結果表明,在行人檢測中,越簡單的運算元效果越好。

三、構建cell梯度方向直方圖

作者將影象分成若干個cell,cell有矩形,圓形,和圓環。作者實驗發現矩形cell和圓形cell的效果差不多,圓環cell的效果最差。

這裡以矩形cell為例,每個cell 6x6個畫素。

梯度分為有符號的梯度0-360,和無符號的梯度0-180。作者在行人檢測中使用的是無符號的梯度。

將180度等分成9個bin,用這9個bin來統計6x6畫素的梯度資訊。對cell內的每個畫素用梯度方向直方圖進行加權投票,權重的梯度的幅值。在實際實現中加權採用三線性插值的方法,即將當前畫素的梯度方向大小,畫素在cell中的x座標與y座標這三個值來作為插值權重,而被用來插入的值作為畫素的梯度幅值。

四、構建block歸一化梯度直方圖

由於光照等因素的影響,使得cell內的梯度幅值的變化範圍非常大,因此作者對梯度做了歸一化。

採用的方法是將cell組合成更大的block,將一個block內所有的cell的特徵向量串聯起來得到該block的HOG特徵。

作者將3x3個cell組成一個block,所以一個block的尺寸是18x18畫素。

block的構建採用滑窗的形式,設定步長在整個影象上進行滑動。根據設定的步長不同,block和block之間可能有重疊的部分,這樣能使得同一個cell的不同歸一化結果對最後的HOG向量都有貢獻。

借用網路上的一幅圖來表示(如有侵權,請聯絡刪除):

Block & normalization][6]![è¿éåå¾çæè¿°

一個cell有9個bin,所以一個block的特徵描述是9*9=81維。

作者對block採用的是L2-Hys的規範化方法。

L2-Hys分為兩步:

  1. L2-norm:
  2. 對1的結果進行截斷(v-0.2v)

五、生成HOG特徵描述向量

將影象上的每一個block進行正規化之後,將所有的描述子收集起來就是整個影象的特徵。