前言
在【模式識(shí)別】SVM實(shí)現(xiàn)人臉表情分類一文中,我曾使用Hog特征+SVM的方式實(shí)現(xiàn)表情分類,但對(duì)于Hog特征的原理并未做深入整理。此篇將結(jié)合scikit-image
來(lái)簡(jiǎn)單分析Hog特征的原理和維度關(guān)系。因?yàn)闆]看過(guò)原論文,因此自己的理解可能會(huì)有偏差,如有錯(cuò)誤,歡迎評(píng)論區(qū)指正。
圖像梯度
在進(jìn)入到Hog之前,需要先了解圖像中梯度的概念。
以下圖為例(圖源:[1]),黑色像素點(diǎn)值為0,白色像素點(diǎn)值為1,分別求X方向梯度和Y方向梯度,從后兩幅圖可以看出,當(dāng)箭頭從0突變到1時(shí),梯度為正值,圖像中以白色邊緣表示,反之為負(fù)值,以黑色的陰影表示。
更進(jìn)一步,把X方向的梯度和Y方向的梯度進(jìn)行融合,這樣可以計(jì)算出每一個(gè)像素點(diǎn)的融合梯度大小和方向。
例如,上圖中選擇了一個(gè)像素點(diǎn),其相鄰位置的像素大小如宮格所示,X方向梯度大小為50,Y方向梯度大小為50,那么其融合梯度大小為70.1,方向?yàn)?5°。
計(jì)算公式的數(shù)學(xué)表達(dá)如下[2]:
有了上面的概念之后,下面進(jìn)入到Hog特征提取的流程。
標(biāo)準(zhǔn)化gamma空間和顏色空間(Gamma/Colour Normalization)
標(biāo)準(zhǔn)化gamma空間和顏色空間是Hog特征提取的第一步。
這一步主要做了3個(gè)操作:
-
1、因?yàn)轭伾畔⒂绊懖淮螅虼讼绒D(zhuǎn)化為灰度圖;
-
2、進(jìn)行g(shù)amma校正:
gamma<1在高灰度值區(qū)域內(nèi),動(dòng)態(tài)范圍變小,圖像對(duì)比度降低,圖像整體灰度值變大,顯得亮一些;gamma>1在低灰度值區(qū)域內(nèi),動(dòng)態(tài)范圍變小,圖像對(duì)比度降低,圖像整體灰度值變小,變得暗淡[3]
校正公式如下:
校正的好處在于:能夠有效地降低圖像局部的陰影和光照變化 -
3、對(duì)圖像尺寸進(jìn)行重新調(diào)整,并讓各像素進(jìn)行歸一化;
計(jì)算圖像梯度
圖像預(yù)處理之后,就要計(jì)算圖中每一個(gè)像素點(diǎn)的梯度。之前已經(jīng)給出了圖像梯度的計(jì)算公式,但在實(shí)際使用中,兩個(gè)方向上的梯度分量可以用卷積的方式來(lái)快速計(jì)算。
- x方向的梯度分量gradscalx:用[-1,0,1]梯度算子對(duì)原圖像做卷積運(yùn)算
- y方向的梯度分量gradscaly:用[1,0,-1]梯度算子對(duì)原圖像做卷積運(yùn)算
為每個(gè)細(xì)胞單元構(gòu)建梯度方向直方圖
下面就需要引入一個(gè)細(xì)胞單元(Cell)的概念,這里Cell的尺寸可以自由設(shè)定,我這里以8 X 8 的尺寸為例,如下圖所示:
這張貓選自VOC2012數(shù)據(jù)集,我對(duì)其進(jìn)行了一定的裁剪。
這里的8 X 8指代一個(gè)Cell中包含8 X 8個(gè)像素點(diǎn),例如圖中的網(wǎng)格,每個(gè)網(wǎng)格代表一個(gè)像素點(diǎn),對(duì)于每一個(gè)像素點(diǎn)可以計(jì)算出一個(gè)梯度值和方向。
下面就要統(tǒng)計(jì)每個(gè)Cell的梯度直方圖,通常來(lái)說(shuō),直方圖是用來(lái)統(tǒng)計(jì)頻率的。這里也類似,因此,需要先把360°角度進(jìn)行分類。按照原作者的說(shuō)法,分成9份效果最好。于是就有了下面這張圖[3]:
這里表示的是每一塊為20°,這里初次看可能會(huì)有個(gè)疑問:360°/9 = 40°,每一塊是40°才對(duì),為什么是20°呢?
這是由于角度只看了數(shù)值,因此正角度和負(fù)角度的符號(hào)進(jìn)行忽略,因此180°/9 = 20°
舉個(gè)例子,第一個(gè)像素點(diǎn)梯度方向?yàn)?5°,40°<45°<60°,這樣它就被劃分到第三組。
以此類推,統(tǒng)計(jì)一個(gè)Cell中每個(gè)像素點(diǎn)的角度,就可以得到梯度方向直方圖。
把細(xì)胞單元組合成大的塊(block),并歸一化梯度直方圖
下一步就要引入另一個(gè)新概念:塊(block),一些博文中也稱作窗口(windows),應(yīng)該是同一個(gè)東西。
還是拿這張貓圖舉例,假設(shè)block的大小為2 X 2,那么就包含2 X 2個(gè)cell,所占據(jù)的尺寸為(16,16)個(gè)像素。
如圖中的藍(lán)框代表cell,黃框代表block,這里block的大小也是通過(guò)人為指定。這樣,一個(gè)block內(nèi)所有cell的特征向量串聯(lián)起來(lái)便得到該block的HOG特征,同時(shí),需要在塊內(nèi)進(jìn)行歸一化。歸一化的方法大致有四種:
根據(jù)原作者描述,使用L2-Hys
方法效果最好[3]。
至于這里的大小設(shè)置,個(gè)人理解是和目標(biāo)的尺寸有關(guān)。例如,行人檢測(cè)的最佳參數(shù)設(shè)置是:3×3細(xì)胞/區(qū)間、6×6像素/細(xì)胞、9個(gè)直方圖通道[3]。
移動(dòng)block,計(jì)算維度
下面就到最后一步,一張圖里有多個(gè)像素,那么通過(guò)計(jì)算之后,整張圖的hog特征的維度是多少呢?
這里我們進(jìn)入實(shí)踐,來(lái)通過(guò)實(shí)踐來(lái)理解block是如何移動(dòng)的。
首先導(dǎo)庫(kù),使用opencv
和skimage
import cv2
from skimage.feature import hog
定義數(shù)據(jù)預(yù)處理過(guò)程,調(diào)整圖片尺寸為256x256,并將圖片進(jìn)行灰度化和歸一化
def preprocessing(src):
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # 將圖像轉(zhuǎn)換成灰度圖
img = cv2.resize(gray, (256, 256)) # 尺寸調(diào)整g
img = img/255.0 # 數(shù)據(jù)歸一化
return img
提取Hog特征
img = cv2.imread("test.jpg")
img_afterpro = preprocessing(img)
image_features = hog(img_afterpro, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(16, 16), block_norm='L2-Hys')
這里有多個(gè)參數(shù),主要的四個(gè)參數(shù)解釋和默認(rèn)取值如下:
- orientations:方向數(shù)
- pixels_per_cell:胞元大小
- cells_per_block:塊大小
- block_norm:可選塊歸一化方法L2-Hys(L2范數(shù))
這里圖片的大小為(256,256),cell的大小選擇為(8,8),block設(shè)置為(16,16),那么hog特征總的維度是多少呢?起初我的理解是多個(gè)block平鋪整個(gè)圖像,那么每個(gè)block大小為(8x16,8x16)=(128,128),即整幅圖像有四個(gè)block,那么總維度應(yīng)該是16x16x9x2x2=9216然而通過(guò)驗(yàn)證
image_features.shape
輸出的實(shí)際維度應(yīng)為665856
,差得很遠(yuǎn)!
于是我想到了卷積神經(jīng)網(wǎng)絡(luò)中卷積核的滑動(dòng)窗口的運(yùn)動(dòng)方式,假設(shè)這里block也是以滑動(dòng)窗口的方式進(jìn)行運(yùn)動(dòng),每次運(yùn)動(dòng)的步長(zhǎng)為一個(gè)cell的寬度,如下圖所示:
這里的block應(yīng)該是(16,16),我這里為了作圖方便,仍保留為(2,2),旨在領(lǐng)會(huì)傳達(dá)的意思。
如圖所示,每個(gè)block計(jì)算完成之后,向水平/垂直方向移動(dòng)一個(gè)cell的寬度,這樣前一部分的cell會(huì)和下一個(gè)block再次計(jì)算。
這樣block總的個(gè)數(shù)可以這樣計(jì)算:
水平方向block個(gè)數(shù)=(256-128)/8 + 1 =17
垂直方向block個(gè)數(shù)=水平方向block個(gè)數(shù)=17
那么總維度=16x16x9x17x17=665856
結(jié)果證實(shí),該思路是正確的。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-420775.html
Reference
[1]https://www.bilibili.com/video/BV1dz411B7Rd
[2]https://blog.csdn.net/zouxy09/article/details/7929348
[3]https://blog.csdn.net/qq_37791134/article/details/81413758文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-420775.html
到了這里,關(guān)于【特征提取】Hog特征原理簡(jiǎn)介與代碼實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!