關(guān)于HoG算法的介紹
Histogram of oriented gradients 簡稱 HoG, 是計算機視覺和圖像處理領(lǐng)域一種非常重要的特征,被廣泛地應(yīng)用于物體檢測,人臉檢測,人臉表情檢測等。
HoG 最早是在2005 年的CVPR 上由 Navneet Dalal 和 Bill Triggs 提出來的。HoG 的算法很簡單,對于物體的特征表示卻非常有效。簡單而高效,這大概也是其從被提出來之后,就被CV界廣泛使用的原因所在。
下面簡單介紹一下HoG 的算法:首先是計算梯度:
我們可以看到,如果K 定了的話,那么 histogram 的長度也就定了。如果在整張圖像上都用這一個histogram 來統(tǒng)計,那么不管圖像的尺寸多大,最終的histogram還是長度為K。很顯然,這不是我們希望看到的,這樣必然會丟失很多信息。所以就有block representaTIon.
block representaTIon, 簡單來說,就是將圖像進行分塊, 將圖像分成一塊一塊,每一塊都可以用一個histogram 做統(tǒng)計,然后將每一塊的histogram 連起來,形成一個長的的histogram。block representaTIon 也是局部特征提取最常用到的一種方式。
圖像分塊,也有兩種方式,一種是overlap,一種是non-overlap,也就是說塊與塊之間有重疊,或者沒有重疊。在計算HoG的時候,一般都會選擇overlap 的分塊方式。
MATLAB 中已經(jīng)集成了HoG 的函數(shù),可以直接調(diào)用庫函數(shù)計算HoG. 這個函數(shù)的調(diào)用形式如下:
[f1, visualizaTIon]=extractHOGFeatures(I)
其中 I 是輸入的圖像, f1 就是計算得到的HoG 特征,是一個高維的histogram, visualization 是將HoG 進行可視化的一個 object 變量。
這個函數(shù)的輸入變量有很多,除了輸入圖像I 之外,還有一些其它的變量, 一般都會采用默認的缺省值。
下面逐一介紹這些缺省變量:
cellsize: [8 ,8], 這是計算HoG的最小塊了,每個 8×8 的 cell 都可以得到一個histogram。
Blocksize: [2, 2], 這是說明一個block 含有多少個cell,[2 2] 意味著一個block 含有 2×2 個cell。
BlockOverlap: 這是說明block 之間重疊部分的大小,以cell的個數(shù)來表示,默認值是一半的cell都有重疊。
NumBins: 就是上面提到的K,默認值為9。
UseSignedOrientation: 就是上面提到的角度的取值范圍,默認為無符號的角度范圍,即 0°−180°
所以說,采用默認值計算,雖然一個cell 的histogram的長度只有9,但是一個block 有4 個 cell,那么一個block 的histogram 的長度變成了36,對于一張尺寸為64×64 的圖像來說,采用overlap 的分塊方式,將有 49 個block,所以最終 HoG 的長度是 36×64=1764. 圖像尺寸越大,HoG 的長度也會隨之增長。不過總得來說,HoG 還算是一種簡潔緊湊的特征。比起Gabor,LBP,SIFT 來說,算是比較經(jīng)濟實惠,性價比很高的了。
最后給出一個例子: