讀古今文學網 > 刷臉背後:人臉檢測 人臉識別 人臉檢索 > 7.11 HOG算法 >

7.11 HOG算法

HOG,英文全稱為Locally Normalised Histogram of Gradient Orientation in Dense Overlapping Grids,即局部歸一化的梯度方向直方圖,是一種對圖像局部重疊區域的密集型描述符,它統計圖像的局部區域的梯度方向信息作為局部凸顯該區域的表徵。具體來說,將梯度方向(0°~360°)劃分成9個區間,將圖像劃分成16×16像素的若干塊(Block),每個塊再劃分成4個8×8像素的單元格(Cell)。對於每一個Cell,計算每一像素點的梯度方向和模,按梯度方向增加對應bin的值,最終綜合n個Cell的梯度直方圖形成一個高維描述子向量[13-16]。

7.11.1 HOG算法的使用

在Windows 7環境下,安裝CodeBlock編譯環境,並配置OpenCV。

該算法對應的項目名稱是HoG_Project。具體執行步驟如下。

(1)打開HoG_Project文件夾,然後用CodeBlocks打開HoG_Project.cbp文件。

(2)如果不修改輸入數據及相關參數,則直接執行(4)。

(3)如果修改數據,則可在主函數中的第一行代碼中進行修改:

其中,readImg的第一個參數是圖像集的文件名,第二個參數是圖像文件的後綴名。

(4)運行HoG.cpp文件即可。

注意:本實驗中使用的圖像為灰度圖,尺寸大小都是相同的。

7.11.2 HOG算法原理

在 OpenCV 中,HOG描述子是針對一個檢測窗口而言的,一個窗口有[(128-16)/8+1]×[(64-16)/8+1]=105個Block,一個Block有4個Cell,一個Cell的HOG描述子向量的長度是9,所以一個檢測窗口的HOG描述子的向量長度是105×4×9=3780維。文獻[15]中給出了HOG算法原理的步驟:

(1)灰度化圖像處理。在本實驗中,圖像集是灰度圖,所以該算法代碼就沒有再對圖像一一進行灰度化處理。

(2)計算圖像每一個像素的梯度,該梯度包括大小和方向。計算圖像橫坐標和縱坐標的梯度,在此基礎上求每個像素位置的梯度方向值。這一步不僅可以捕獲輪廓和紋理信息,還可以進一步弱化光照的影響。

(3)將圖像分割成小的Cell。一個Cell是HOG特徵最小的結構單位,Block和窗口win的滑動步長就是一個Cell的寬度或高度,因此,需要先把整幅圖像分割成一個個的Cell。

(4)為每個Cell構建梯度方向直方圖。這是最關鍵的一步,它主要是統計局部圖像梯度信息並進行量化,得到局部圖像區域的特徵描述向量。

(5)將Cell組成大的Block,然後Block內歸一化梯度直方圖。這也是很關鍵的一步。

(6)生成HOG特徵描述向量。將所有的Block的HOG描述符組合在一起,形成最終的特徵向量,該特徵向量描述了檢測窗口的圖像內容。

在本實驗中,我們使用的圖像集全部都是灰度圖,尺寸大小都是150×200像素。在本實驗中檢測窗口的大小為64×128像素(其中Block大小為16×16像素,Block的滑動步長為8×8像素,Cell大小為8×8像素,一個Cell內統計9個方向的梯度直方圖),窗口滑動步長為64×64像素,擴充像素數為42×56像素。也就是說,寬擴充42個像素點,高擴充56個像素點,因此每一幅圖像的檢測窗口共有9個,即我們使用3780×9=34 020維度的特徵向量表示每一幅圖像。於是,我們便得到了每一幅圖像的表示,接著進行圖像之間的匹配,本算法中我們使用的是歐氏距離度量方法。閾值為16,也就是說,我們認為歐氏距離小於16的圖像都是相似圖像。

7.11.3 HOG算法實現

我們使用的是OpenCV中的HOG特徵提取功能,它使用了HOGDescriptor類的封裝。下面程序中的部分代碼來自文獻[13-16]。

7.11.4 HOG算法的實驗數據、實驗結果及分析

1.實驗數據

實驗輸入數據為150×200像素的原始圖像,數據集路徑為「..HoG_Projectimage150×200」。輸入的測試圖像為文件夾中的第一個圖像。實驗輸出數據為圖像的序號和圖像之間的距離,輸出數據存於「.HoG_ProjectHoG_distance.txt」。

2.實驗結果

查詢圖像如圖7-17所示。

圖7-17 查詢圖像(7)

檢索出的部分相似圖像如圖7-18所示。

圖7-18 檢索出的部分相似圖像(7)

以下是HoG_distance.txt的部分內容展示,如表7-7所示。

表7-7 HoG_distance.txt部分內容展示

續表

3.實驗分析

從檢索結果中我們發現,返回結果並不多,但是結果中的誤報數很小(為零),所有返回的圖像都與查詢相關。本次實驗的查准率是37/37×100%=100%,查全率是37/42×100%=88.095%。