你了解HOG特征嗎?
? ?作者:晟 沚? ? ? ? ??
? ? ? ??
HOG特征在很多任務(wù)中都有應用,如行人檢測,首先對輸入的圖片進行預處理,然后計算像素點的梯度值,然后形成梯度直方圖,然后對blocks進行normalize,最后收集到HOG feature(其實是一行高維的vector)放到SVM里進行監(jiān)督學習,從而實現(xiàn)行人的檢測,對于行人檢測來說,圖像梯度是一個很重要的信息。利用圖像梯度,就可以只關(guān)注邊角信息,以此勾勒出的人的模樣還是可以分辨出來。另外如目標跟蹤也有采用,下一篇具體介紹。
HOG全稱histogramof oriented gradients.如果翻譯成中文就是方向梯度直方圖。它可以用來表示圖像的物體特征,因此能夠檢測出這類物體。
?
01
實例講解
圖像預處理
包括伽馬校正和灰度化。這是可選的步驟,因為實驗證明做不做影響不大。伽馬校正是減少光度對實驗的影響。灰度化是將彩色圖片變成灰度圖。其實彩色圖片也可以直接處理。不過是分別對三通道的顏色值進行梯度計算,最后選擇梯度最大的那個。為簡單起見,假設(shè)輸入為灰度圖,同時大小是64*128。
計算每一個像素點的梯度值,得到梯度圖(規(guī)模和原圖大小一樣)

對于像素點A,要計算水平梯度和豎直梯度,如上圖,水平梯度?gx?=30-20=10,豎直梯度?gy?=64-32=32.
那么總的梯度強度值g和梯度方向??將按照以下公式計算:

梯度方向?qū)〗^對值,因此梯度方向的范圍是0-180度。取絕對值的原因是這樣效果更好。
計算梯度直方圖
按照第二步的計算,每一個像素點都會有兩個值:梯度強度/梯度方向。
現(xiàn)在就計算梯度直方圖,這是一個關(guān)鍵步驟也是HOG能夠work的原因。
梯度直方圖是在一個8*8的cell里面計算的。那么在8*8的cell里面就會有8*8*2=128個值,2是包括了梯度強度和梯度方向。通過統(tǒng)計形成梯度直方圖,128個值將會變成9個值,大大降低了計算量,同時又對光照等環(huán)境變化更加地robust。
首先,將0-180度分成9個bins,分別是0,20,40...160。然后統(tǒng)計每一個像素點所在的bin。請看下圖:

左上圖是8*8的梯度方向值,右上圖是8*8的梯度強度值,下圖是9個bins。
先看兩個藍色圈圈。因為藍圈的方向是80度,大小是2,所以該點就投給80這個bin;
再看兩個紅色圈圈。因為紅色圈圈的方向是10,大小是4,因為10距離0點為10,距離20點為也為10,那么有一半的大小是投給0這個bin,還有一半的大小(即是2)投給20這個bin。
那么統(tǒng)計完64個點的投票數(shù)以后,每個bin就會得到一個數(shù)值,可以得到一個直方圖,在計算機里面就是一個大小為9的數(shù)組。

從上圖可以看到,更多的點的梯度方向是傾向于0度和160度,也就是說這些點的梯度方向是向上或者向下,表明圖像這個位置存在比較明顯的橫向邊緣。因此HOG是對邊角敏感的,由于這樣的統(tǒng)計方法,也是對部分像素值變化不敏感的,所以能夠適應不同的環(huán)境。
對16*16大小的block歸一化
歸一化的目的是降低光照的影響。
歸一化的方法是向量的每一個值除以向量的模長。
比如對于一個(128,64,32)的三維向量來說,模長是?

那么歸一化后的向量變成了(0.87,0.43,0.22)

16*16大小的block由上圖藍框得到,綠色方塊是8*8大小的cell,藍色方塊就是由4個cell組成的block。作者提出要對block進行normalize。那么由于一個cell就會有大小為9的vector,四個cell就有36大小的vector。對block進行normalize就是對這大小為36的vector進行歸一化。
而每一個block將按照上圖籃框移動的方式進行迭代截取。
得到HOG特征向量
每一個16*16大小的block將會得到36大小的vector。那么對于一個64*128大小的圖像,按照上圖的方式提取block,將會有7個水平位置和15個豎直位可以取得,所以一共有7*15=105個block,所以我們整合所有block的vector,形成一個大的一維vector的大小將會是36*105=3780。
得到HOG特征向量,就可以用來可視化和分類了。對于這么大的HOG特征,SVM就排上用場了。
?
END
機器學習算法工程師
? ??? ? ? ? ? ? ? ? ? ? ? ??????????????????一個用心的公眾號
?

