除了這篇,還可以參考:http://blog.csdn.net/zouxy09/article/details/7929348/
Code可以見(jiàn)cs231n的features.py中的實(shí)現(xiàn),簡(jiǎn)潔明了。
轉(zhuǎn)載自:http://www.cnblogs.com/hrlnw/archive/2013/08/06/2826651.html
Histogram of Oriented Gridients,縮寫(xiě)為HOG,是目前計(jì)算機(jī)視覺(jué)、模式識(shí)別領(lǐng)域很常用的一種描述圖像局部紋理的特征。這個(gè)特征名字起的也很直白,就是說(shuō)先計(jì)算圖片某一區(qū)域中不同方向上梯度的值,然后進(jìn)行累積,得到直方圖,這個(gè)直方圖呢,就可以代表這塊區(qū)域了,也就是作為特征,可以輸入到分類器里面了。那么,接下來(lái)介紹一下HOG的具體原理和計(jì)算方法,以及一些引申。
1.分割圖像
因?yàn)镠OG是一個(gè)局部特征,因此如果你對(duì)一大幅圖片直接提取特征,是得不到好的效果的。原理很簡(jiǎn)單。從信息論角度講,例如一幅640×480的圖像,大概有30萬(wàn)個(gè)像素點(diǎn),也就是說(shuō)原始數(shù)據(jù)有30萬(wàn)維特征,如果直接做HOG的話,就算按照360度,分成360個(gè)bin,也沒(méi)有表示這么大一幅圖像的能力。從特征工程的角度看,一般來(lái)說(shuō),只有圖像區(qū)域比較小的情況,基于統(tǒng)計(jì)原理的直方圖對(duì)于該區(qū)域才有表達(dá)能力,如果圖像區(qū)域比較大,那么兩個(gè)完全不同的圖像的HOG特征,也可能很相似。但是如果區(qū)域較小,這種可能性就很小。最后,把圖像分割成很多區(qū)塊,然后對(duì)每個(gè)區(qū)塊計(jì)算HOG特征,這也包含了幾何(位置)特性。例如,正面的人臉,左上部分的圖像區(qū)塊提取的HOG特征一般是和眼睛的HOG特征符合的。
接下來(lái)說(shuō)HOG的圖像分割策略,一般來(lái)說(shuō)有overlap和non-overlap兩種,如下圖所示。overlap指的是分割出的區(qū)塊(patch)互相交疊,有重合的區(qū)域。non-overlap指的是區(qū)塊不交疊,沒(méi)有重合的區(qū)域。這兩種策略各有各的好處。


先說(shuō)overlap,這種分割方式可以防止對(duì)一些物體的切割,還是以眼睛為例,如果分割的時(shí)候正好把眼睛從中間切割并且分到了兩個(gè)patch中,提取完HOG特征之后,這會(huì)影響接下來(lái)的分類效果,但是如果兩個(gè)patch之間overlap,那么至少在一個(gè)patch會(huì)有完整的眼睛。overlap的缺點(diǎn)是計(jì)算量大,因?yàn)橹丿B區(qū)域的像素需要重復(fù)計(jì)算。
再說(shuō)non-overlap,缺點(diǎn)就是上面提到的,有時(shí)會(huì)將一個(gè)連續(xù)的物體切割開(kāi),得到不太“好”的HOG特征,優(yōu)點(diǎn)是計(jì)算量小,尤其是與Pyramid(金字塔)結(jié)合時(shí),這個(gè)優(yōu)點(diǎn)更為明顯。
2.計(jì)算每個(gè)區(qū)塊的方向梯度直方圖
將圖像分割后,接下來(lái)就要計(jì)算每個(gè)patch的方向梯度直方圖。步驟如下:
A.利用任意一種梯度算子,例如:sobel,laplacian等,對(duì)該patch進(jìn)行卷積,計(jì)算得到每個(gè)像素點(diǎn)處的梯度方向和幅值。具體公式如下:

其中,Ix和Iy代表水平和垂直方向上的梯度值,M(x,y)代表梯度的幅度值,θ(x,y)代表梯度的方向。
B.將360度(2×PI)根據(jù)需要分割成若干個(gè)bin,例如:分割成12個(gè)bin,每個(gè)bin包含30度,整個(gè)直方圖包含12維,即12個(gè)bin。然后根據(jù)每個(gè)像素點(diǎn)的梯度方向,利用雙線性內(nèi)插法將其幅值累加到直方圖中。

C.(可選)將圖像分割成更大的Block,并利用該Block對(duì)其中的每個(gè)小patch進(jìn)行顏色、亮度的歸一化,這一步主要是用來(lái)去掉光照、陰影等影響的,對(duì)于光照影響不劇烈的圖像,例如很小區(qū)域內(nèi)的字母,數(shù)字圖像,可以不做這一步。而且論文中也提及了,這一步的對(duì)于最終分類準(zhǔn)確率的影響也不大。
3.組成特征
將從每個(gè)patch中提取出的“小”HOG特征首尾相連,組合成一個(gè)大的一維向量,這就是最終的圖像特征。可以將這個(gè)特征送到分類器中訓(xùn)練了。例如:有44=16個(gè)patch,每個(gè)patch提取12維的小HOG,那么最終特征的長(zhǎng)度就是:1612=192維。
4.一些引申
與pyramid相結(jié)合,即PHOG。PHOG指的是,對(duì)同一幅圖像進(jìn)行不同尺度的分割,然后計(jì)算每個(gè)尺度中patch的小HOG,最后將他們連接成一個(gè)很長(zhǎng)的一維向量,作為特征。例如:對(duì)一幅512512的圖像先做33的分割,再做66的分割,最后做1212的分割。接下來(lái)對(duì)分割出的patch計(jì)算小HOG,假設(shè)為12個(gè)bin即12維。那么就有912+3612+14412=2268維。需要注意的是,在將這些不同尺度上獲得的小HOG連接起來(lái)時(shí),必須先對(duì)其做歸一化,因?yàn)?3尺度中的HOG任意一維的數(shù)值很可能比12*12尺度中任意一維的數(shù)值大很多,這是因?yàn)閜atch的大小不同造成的。PHOG相對(duì)于傳統(tǒng)HOG的優(yōu)點(diǎn),是可以檢測(cè)到不同尺度的特征,表達(dá)能力更強(qiáng)。缺點(diǎn)是數(shù)據(jù)量和計(jì)算量都比HOG大了不少。
參考文獻(xiàn):
Navneet Dalal and Bill Triggs,《Histograms of Oriented Gradients for Human Detection》,2005
A. Bosch, A. Zisserman, and X. Munoz, 《Representing shape with a spatial pyramid kernel》,2007