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