任小康 陳鴻享
(西京學院,陜西 西安710123)
方向梯度直方圖(Histogram of Oriented Gradient, HOG)是用于計算機視覺識別和處理過程中對物體形狀、輪廓進行檢測的特征描述子。通過計算并統計數字圖像中被識別物體邊緣的梯度方向直方圖來構成特征描述子。
2005 年在IEEE 國際計算機視覺與模式識別會議(IEEE Conference on Computer Vision and Pattern Recognition,CVPR)[1]上,來自法國的研究人員Navneet Dalal 和Bill Triggs 提出利用HOG 對圖像邊緣特征進行提取,并利用支持向量機(Support Vector Machine,SVM)作為二分類器訓練此模型,該模型經過大量對測試樣本測試后發現,HOG 與SVM 相結合的方法是速度和效果綜合平衡性能較好的一種行人檢測(Pedestrian Detection)方法。
HOG+SVM模型廣泛應用于計算機視覺,尤其在行人檢測領域獲得了極大的成功。行人檢測技術可與行人跟蹤、行人重識別等技術結合,應用于人工智能系統、車輛輔助駕駛系統、智能機器人、智能視頻監控、人體行為分析、智能交通等領域,是當前的熱門研究方向之一。
一幅數字圖像,其梯度主要在與被檢測圖像的輪廓處,即目標區域的邊緣部分可以很好地用方向密度分布進行描述。
通過提取關鍵信息并丟棄冗余信息來簡化圖像,通常對于HOG 特征描述子,輸入圖像的大小為64×128×3,輸出特征向量的長度為3780。為了解決光照變化和陰影對結果的影響,將這些在細胞單元中獲取到的局部直方圖在圖像的更大的范圍,即區間(block) 進行對比度歸一化[2](Contrast normalization)。
被檢測的物體輪廓能夠被梯度的分布所描述。首先將整幅圖像分割成小的連接區域,然后每個區域生成一個方向梯度直方圖,最后將這些直方圖的組合即可表示出特征描述子。
圖像梯度算法:
用于行人檢測的HOG 特征描述符是在圖像的64×128 塊上計算的,要計算HOG 描述子,首先需要計算像素點的水平和垂直梯度,根據原始圖像計算像素點(x,y)梯度圖像Gx和Gy。研究者分析了許多一階微分算子,結果最終表明[-1,0,1]和[1,0,-1]T算子效果最好,而由此可以給出梯度在[-1,0,1]和[1,0,-1]T算子下的定義為:

其中I(x,y)為圖像在像素點(x,y)處的灰度值,Gx(x,y)和Gy(x,y)分別是某像素點(x,y)處的梯度水平值和梯度垂直值,由此可以給出像素點(x,y)處的梯度幅值大小以及梯度方向的定義如下公式(2)。

其中,G(x,y)為像素點(x,y)處的梯度幅值,α(x,y)為像素點Gx(x,y)處的梯度方向。梯度方向會取絕對值,計算得出的梯度是“無符號的”,因此得到的角度范圍是[0,180°]。
3.2.1 細胞
最小的連通區域即細胞(cell),而由細胞再組成塊(block),對一張灰度圖像,1 個細胞大小為8px×8px,而1 個塊由4 個細胞構成,則1 個塊大小為16px×16px。在統計梯度方向時首先是以細胞為單位進行統計,之后再以塊為單位進行處理。
3.2.2 塊
塊由細胞構成,塊與塊之間有重疊,作用是在檢測窗口(window) 中依次水平和垂直滑動從而遍歷并統計每個塊內的方向梯度直方圖,由于每個塊由4 個細胞構成,每個細胞的寬和高均為8px,遍歷結束后要統計所有細胞中的方向梯度直方圖,因此在滑動時塊的橫向滑動增量和縱向滑動增量均與細胞的寬和高相等,即為8px。
3.2.3 檢測窗口
通常檢測圖像像素比較大,但是作為訓練樣本,只關注其具有特征部分的圖像區域,譬如人臉,因此需要對原始圖像進行預處理,即選擇出需要研究的區域作為采樣目標區域,而這個目標區域即為檢測窗口,檢測窗口的選取可以在圖像的任意部位,圖中窗口大小為64px×128px,HOG 輸入的并不是原始圖像,而是由預處理之后的檢測窗口。
研究者結果表明,將圖像分成若干個細胞單元,每個細胞單元大小為8px×8px,采用9 個bins 直方圖來統計8px×8px 個像素的梯度信息[3],每個bins 方向塊為20 度時能夠得到最好的檢測結果,量化的公式如下:

3.3.1 計算cell 內每個像素的梯度
對某個梯度的反向塊進行投票(vote),從而形成這個方向的梯度直方圖。細胞單元可以是矩形或者環形。直方圖的方向塊在0 度-180 度(無符號梯度)或者0 度-360 度(有符號梯度)之間均分。為了減少混疊現象,梯度投票在相鄰bin 的中心之間需要進行方向和位置上的雙線性插值,投票的權重根據梯度幅值進行計算。
將原64×128 的圖像劃分為8×8 的cell 單元格,并為每個8×8 個單元格計算梯度直方圖。8×8 圖像塊包含8×8×3=192 個像素值。該色塊的梯度每個像素包含2 個值(大小和方向),總計8×8×2 = 128 個數字,直方圖本質上是9 個bin(數字)的矢量(或數組),對應于角度0、20、40、60…160。
3.3.2 cell 細胞單元格中創建HOG 直方圖
直方圖包含對應于角度0、20、40…160 的9 個面元。創建漸變直方圖過程如下,根據方向選擇數組下標位置,并根據大小選擇投票(進入數組的值)。例如某像素點,它的角度方向為80度,大小為2。因此,它向第5 個數組中添加了2。另一個像素點的漸變角度為10 度,大小為4。由于10 度位于0 到20 之間的一半,因此像素的投票平均分為兩個區域。
一般情況下,如果該角度大于160 度,則該角度在160 到180 之間,該角度將使0 和180 相等。因此,如果角度為165 度的像素對0 度和160 度成比例地貢獻。將8×8 單元中所有像素的貢獻相加,得到9 bins 直方圖。
上述步驟結束后,即創建了圖像的梯度直方圖,但是圖像的梯度對于整張圖片的光照變化會很敏感。如果將所有的像素點都除以2,梯度的幅值也會減半,那么直方圖里的值也會減半,這樣并不能消除光線的影響。理想情況下,特征描述子可以和光線變換無關,為了解決光照變化對直方圖的影響,將直方圖做歸一化處理,首先對某向量用L2范數做歸一化處理:

將V 中的每一個元素除以146.642 得到[0.87,0.43,0.22]。當對V 進行按比例縮放時,歸一化得到的結果還是[0.87,0.43,0.22],故可以解決光照等噪聲對結果的影響。
上一步得到了細胞的梯度方向直方圖,而1 個塊是由2×2=4 個細胞構成,由此,便可得到一個塊的梯度方向直方圖是4×9=36 維的。將各個細胞單元組合成大的區域塊(blocks),得到一個block 內所有細胞單元的特征向量串聯起來便得到此block 的HOG 特征,其中這些區間上的HOG 特征向量是互相重疊的,將歸一化之后的塊描述子就稱為HOG 描述符。
為了計算這整個patch 的特征向量,需要把36×1 的向量全部合并組成一個的向量。向量的大小:現有16×16 塊共有7 個水平和15 個垂直位置,總共7×15=105 個位置。每個16×16 塊由一個36×1 向量表示。因此,將它們全部合并為一個增益向量時,將獲得一個36×105=3780 維向量。

通過分析和研究HOG+SVM實現行人檢測。雖然運行結果達到了預期效果,但是此模型還需要有大量的正、負樣本的訓練,才能提高本模型的泛化能力,由結果可看出,墻壁上的畫和地上的鴿子被誤分類為行人。這足以說明此模型還需要再訓練,同時給出以下解決辦法:
5.1 構建充足豐富的負樣本(房屋、汽車和樹木等非行人樣本)來訓練此模型的泛化能力,使得該模型在測試樣本中有較高的正確率。
5.2 在樣本集不變的情況下,利用AdaBoost(自適應增強算法)提高誤分類樣本的權重,減小被正確分類樣本的權重,使算法更加關注被分錯的樣本,直到算法達到某個預定的足夠小的錯誤率或者達到預先指定的最大迭代次數。