目標檢測算法之HOG特徵

      HOG特徵,即方向梯度直方圖(Histogram of Oriented Gradient, HOG),是計算機視覺領域中用於目標檢測的一種特徵描述子。其通過計算圖像部分區域的梯度信息,並進行統計梯度信息的直方圖來構成特徵向量。通常地,將HOG所提取到的特徵向量喂入預訓練好的SVM分類器,可實現圖像識別的功能。HOG+SVM的思路在2005年CVPR上提出,在行人識別檢測上表現出了很好的效果。

HOG特徵核心思想

  1. 基於梯度:HOG特徵用於目標檢測,爲了找到局部目標,尋找其輪廓是可行且必要的方法。一般來說,在物體的邊緣部分纔有比較明顯的梯度(背景或物體內部色彩變化不明顯,因此梯度也不明顯),所以物體的表象與形狀可以較好的被梯度描述。

  2. 特徵描述子:特徵描述子是一種圖像特徵的表示。在HOG裏面,它可以將原來尺寸大小爲whw*h的圖像轉化成爲一個長度爲n的向量,以此來保留原始圖像中重要的信息(梯度),並且過濾掉一些不相關的信息(如背景)。例如在OpenCV的API中,一副64*128大小的圖像,經過轉化後變成一個長度爲3780的向量(下文會有詳細分析)

  3. 劃分區域cell:將一副圖像劃分成若干個連通的小區域(一般爲正方形),這些小區域成爲細胞單元(cell)。一個cell中包含若干個像素點,如8*8。計算這個cell中每個像素點所對應的梯度,並構成方向梯度直方圖,將每一個cell得到的直方圖結合起來,即可得到特徵描述器。

  4. 更大的區域block:爲了消除光照和陰影對於圖像的影響,需要在更大的區域內,對這些cell對應的直方圖進行對比度歸一化。

實現步驟

  1. 圖像灰度化:若輸入的圖像是RGB三通道的圖像,則首先需要將其轉化爲灰度圖。

  2. Gamma矯正法:利用Gamma變換對 1 中得到的灰度圖像進行標準化,以減少光照因素的影響。Gamma變換的公式如下:

    f(I)=Iγf(I) = I^{\gamma}

    γ\gamma 此處可以取0.5等數值

  3. 計算每一個像素的梯度(梯度大小及方向):通常利用[-1,0,1]算子與原圖像進行卷積,得到每個像素在水平方向的梯度;同時利用[101]T[-1,0,1]^T算子與原圖像卷積,得到每個像素在豎直方向的梯度。利用兩個方向的梯度的合成,得到總的梯度大小與方向,其計算公式如下:

    Gx(x,y)=I(x+1,y)I(x1,y)G_{x}(x,y) = I(x+1,y) - I(x-1,y)

    Gy(x,y)=I(x,y+1)I(x,y1)G_{y}(x,y) = I(x,y+1) - I(x,y-1)

    其中GxG_{x}GyG_{y} 表示原圖像在水平和豎直方向上的梯度,II代表數字圖像的像素值,則對於點(x,y)來說,它的梯度計算公式如下:

    G(x,y)=Gx(x,y)2+Gy(x,y)2G(x,y) = \sqrt{G_{x}(x,y)^2 + G_{y}(x,y)^2 }

    θ(x,y)=tan1(Gy(x,y)Gx(x,y))\theta (x,y) = \tan ^{-1}(\frac{G_{y}(x,y) }{G_{x}(x,y)} )

    其中G表示梯度大小,θ\theta 表示梯度的方向。

    通過梯度的計算,我們不僅僅能夠對於物體的邊緣輪廓,紋理等特徵進行捕捉,同時可以進一步減輕光照的影響。

  4. 爲每個cell構建梯度直方圖

    細胞單元中的每一個像素點,都爲某個基於方向的直方圖通道投票。

    假設一個cell中包含8*8個像素,則根據標號 3 中這64個像素值對應的梯度構建直方圖:

    一個cell對應的直方圖
    一般地,我們把直方圖劃分爲9項(0-8),稱之爲9個bin,對應了9個梯度的方向區間。在每個像素的梯度中,梯度方向θ\theta 的取值爲[180,180][-180,180]。對於0-180度的梯度來說,將180度平分爲9個區域(bin),即每個bin對應20度。因此,如果在這個cell中,有一個像素的梯度在20-40度之間,則直方圖上對應標號爲1的bin被投票,其數目就+1(先這麼認爲);同樣的,如果有一個像素值在100-120度之間,則直方圖上標號爲5的bin的數值+1。

    那麼梯度的方向用到了,梯度的大小怎麼使用呢?其實我們發現,在找到梯度所對應的bin標號之後,加的這個數應該與梯度的的大小相關(不是簡單的+1)。例如有個像素梯度方向爲45度,大小爲3。那麼,應該在標號2上面+3。(也有說法是45度與40度相差5度,與60度相差15度,因此按照1:3的比例將梯度大小3加到對應的bin上面,感覺大同小異)

    類似的,對於梯度方向爲-180 - 0的部分,先將其+180度以後,與正梯度方向同樣計算。

    bin與其角度對應關係
    總結一下,就是對於每個8*8的cell,通過每個像素的梯度方向及大小進行直方圖的構建。梯度方向決定了該像素爲哪一個bin投票,而梯度的大小代表着投票權重的大小。

  5. 將cell組合成更大的塊(block),進行塊內歸一化:

    爲了進一步減輕光照對於梯度特徵的影響,應當進行塊內歸一化操作。

    我們之前設定的cell的大小爲888*8,在這裏,假設一個block的大小爲16*16。因此一個block包含222*2個cell。一個cell對應的特徵是9維的,因此將一個塊中的4個cell所對應的直方圖串聯起來,得到一個block對應的特徵是36維。此時對於梯度強度做歸一化處理,得到的向量成爲HOG描述符。

  6. 關於HOG特徵向量的維度

    對於一個128*64大小的圖像,假設cell的大小爲888*8,block的大小爲161616*16,梯度被平均分爲9個bin,窗口每次滑動的步長爲8個像素值。那麼橫向滑動中,總共有 1+(6416)/8=71+(64-16)/8 = 7 個窗口;在縱向滑動中,總共有 1+(12816)/8=151+(128-16)/8 = 15 個窗口。對於每個cell,其特徵向量對應9維;而對於每個cell,其HOG特徵對應94=369*4=36維;對於要檢測的整張圖像來說,其HOG特徵的維度爲36715=378036*7*15 = 3780

  7. 通過以上六步的變換,我們從一張128643128*64*3(3表示channel)的圖像中,提取到了一個3780維的向量。隨後將該向量投入到與訓練好的分類起(如SVM)中,就可以目標檢測了。

總結

      本文簡單介紹了HOG特徵的基本原理。目前還處於學習階段,如有不當的地方,歡迎一起討論交流~

參考網站:

https://blog.csdn.net/liulina603/article/details/8291093

https://blog.csdn.net/chaipp0607/article/details/70888899

發佈了38 篇原創文章 · 獲贊 87 · 訪問量 7319
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章