HOG特徵,即方向梯度直方圖(Histogram of Oriented Gradient, HOG),是計算機視覺領域中用於目標檢測的一種特徵描述子。其通過計算圖像部分區域的梯度信息,並進行統計梯度信息的直方圖來構成特徵向量。通常地,將HOG所提取到的特徵向量喂入預訓練好的SVM分類器,可實現圖像識別的功能。HOG+SVM的思路在2005年CVPR上提出,在行人識別檢測上表現出了很好的效果。
HOG特徵核心思想
-
基於梯度:HOG特徵用於目標檢測,爲了找到局部目標,尋找其輪廓是可行且必要的方法。一般來說,在物體的邊緣部分纔有比較明顯的梯度(背景或物體內部色彩變化不明顯,因此梯度也不明顯),所以物體的表象與形狀可以較好的被梯度描述。
-
特徵描述子:特徵描述子是一種圖像特徵的表示。在HOG裏面,它可以將原來尺寸大小爲的圖像轉化成爲一個長度爲n的向量,以此來保留原始圖像中重要的信息(梯度),並且過濾掉一些不相關的信息(如背景)。例如在OpenCV的API中,一副64*128大小的圖像,經過轉化後變成一個長度爲3780的向量(下文會有詳細分析)
-
劃分區域cell:將一副圖像劃分成若干個連通的小區域(一般爲正方形),這些小區域成爲細胞單元(cell)。一個cell中包含若干個像素點,如8*8。計算這個cell中每個像素點所對應的梯度,並構成方向梯度直方圖,將每一個cell得到的直方圖結合起來,即可得到特徵描述器。
-
更大的區域block:爲了消除光照和陰影對於圖像的影響,需要在更大的區域內,對這些cell對應的直方圖進行對比度歸一化。
實現步驟
-
圖像灰度化:若輸入的圖像是RGB三通道的圖像,則首先需要將其轉化爲灰度圖。
-
Gamma矯正法:利用Gamma變換對 1 中得到的灰度圖像進行標準化,以減少光照因素的影響。Gamma變換的公式如下:
此處可以取0.5等數值
-
計算每一個像素的梯度(梯度大小及方向):通常利用[-1,0,1]算子與原圖像進行卷積,得到每個像素在水平方向的梯度;同時利用算子與原圖像卷積,得到每個像素在豎直方向的梯度。利用兩個方向的梯度的合成,得到總的梯度大小與方向,其計算公式如下:
其中 , 表示原圖像在水平和豎直方向上的梯度,代表數字圖像的像素值,則對於點(x,y)來說,它的梯度計算公式如下:
其中G表示梯度大小, 表示梯度的方向。
通過梯度的計算,我們不僅僅能夠對於物體的邊緣輪廓,紋理等特徵進行捕捉,同時可以進一步減輕光照的影響。
-
爲每個cell構建梯度直方圖
細胞單元中的每一個像素點,都爲某個基於方向的直方圖通道投票。
假設一個cell中包含8*8個像素,則根據標號 3 中這64個像素值對應的梯度構建直方圖:
一般地,我們把直方圖劃分爲9項(0-8),稱之爲9個bin,對應了9個梯度的方向區間。在每個像素的梯度中,梯度方向 的取值爲。對於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度以後,與正梯度方向同樣計算。
總結一下,就是對於每個8*8的cell,通過每個像素的梯度方向及大小進行直方圖的構建。梯度方向決定了該像素爲哪一個bin投票,而梯度的大小代表着投票權重的大小。 -
將cell組合成更大的塊(block),進行塊內歸一化:
爲了進一步減輕光照對於梯度特徵的影響,應當進行塊內歸一化操作。
我們之前設定的cell的大小爲,在這裏,假設一個block的大小爲16*16。因此一個block包含個cell。一個cell對應的特徵是9維的,因此將一個塊中的4個cell所對應的直方圖串聯起來,得到一個block對應的特徵是36維。此時對於梯度強度做歸一化處理,得到的向量成爲HOG描述符。
-
關於HOG特徵向量的維度
對於一個128*64大小的圖像,假設cell的大小爲,block的大小爲,梯度被平均分爲9個bin,窗口每次滑動的步長爲8個像素值。那麼橫向滑動中,總共有 個窗口;在縱向滑動中,總共有 個窗口。對於每個cell,其特徵向量對應9維;而對於每個cell,其HOG特徵對應;對於要檢測的整張圖像來說,其HOG特徵的維度爲
-
通過以上六步的變換,我們從一張(3表示channel)的圖像中,提取到了一個3780維的向量。隨後將該向量投入到與訓練好的分類起(如SVM)中,就可以目標檢測了。
總結
本文簡單介紹了HOG特徵的基本原理。目前還處於學習階段,如有不當的地方,歡迎一起討論交流~
參考網站:
https://blog.csdn.net/liulina603/article/details/8291093
https://blog.csdn.net/chaipp0607/article/details/70888899