圖像處理之HOG特征提取算法
HOG(Histogram of Oriented Gradient)特征在對象識别與模式比對中是一種常見的特征提取算法,是基于本地像素塊進行特征直方圖提取的一種算法,對象局部的變形與光照影響有很好的穩定性,最初是用HOG特征來來識别人像,通過HOG特征提取+SVM訓練,可以得到很好的效果,OpenCV已經有了。HOG特征提取的大緻流程如下:
第一步:
Gamma校正,主要是對輸入圖像進行校正,主要是為了補償顯示器帶來的灰階偏差。常見的系數在2.5左右,這個方面的資料非常多。ImageJ的源代碼中也有Gamma校正的實作,可以參照。
第二步:
圖像轉灰階,這個也屬于常見操作了。
第三步:
計算圖像的梯度與方向,可以使用SOBEL算子實作,最終得到圖像的梯度振幅與角度。

第四步:
将圖像劃分為8x8的小網格,對每個小網格内的圖像做梯度方向直方圖,每個8x8=64個像素為一個CELL,對每個CELL根據角度分為9個直方圖塊(BIN),每個BIN的範圍是20度。假設在CELL的某個像素點的角度是10,則把他對應的梯度值累加放到第一個編号是0的直方圖中,最終得到編号是0~8的各個直方圖的資料。這樣做的一個不好的地方是,沒有精準反應出來梯度權重對相鄰直方圖的影響,得到直方圖也不是反鋸齒的資料,是以一個剛好的方法,是根據角度的值,計算對應像素的梯度在左右相鄰直方圖上的權重,根據權重累加相應的值到相鄰的直方圖中。這樣就完成了HOG中最重要的一步,權重角度直方圖資料統計。CELL網格分割圖如下:
得到對應的直方圖如下:
角度直方圖的編号與角度範圍。
五:塊描述子
将2x2的網格單元組合成為一個大的塊(Block)對每個塊之間有1/2部分是重疊區域。主要是将每個Cell的直方圖合并為一個大的直方圖向量,這樣每個塊就有36個向量描述子。對每個塊的描述子做歸一化處理,常見的歸一化處理為L2-norm或者L1-norm,公式如下:
這樣就得到每個塊的描述子,對一個對象特征來說塊可以是矩形的也可以是圓形的,根據要提取對象特征決定。得到特征之後,在目标圖像上以一個CELL大小為步長,檢測目标圖像上是否有比對的對象特征,對象特征比對可以基于相似度,最常見的是歐幾裡得距離與巴斯系數。
舉例:
對于64x128的像素塊,可以分為8x16個Cell分為7x15個塊(R-HOG) 總計的直方圖向量數為:7x15x2x2x9 = 3780個向量
關鍵部分的代碼實作: