Hog特征實質是:梯度的統計信息,即針對邊緣作特征提取
意義:目標的表象和形狀
轉載于zouxy09大神的文章,加上自己些微的理解和應用!
http://blog.csdn.net/zouxy09/article/details/7929348/
上述基本講清楚了,其實重點在于如下:
大概過程:
HOG特征提取方法就是將一個image(你要檢測的目標或者掃描窗口):
1)灰度化(將圖像看做一個x,y,z(灰度)的三維圖像);
2)采用Gamma校正法對輸入圖像進行顏色空間的標準化(歸一化);目的是調節圖像的對比度,降低圖像局部的陰影和光照變化所造成的影響,同時可以抑制噪音的干擾;
3)計算圖像每個像素的梯度(包括大小和方向);主要是為了捕獲輪廓信息,同時進一步弱化光照的干擾。
4)將圖像劃分成小cells(例如6*6像素/cell);
5)統計每個cell的梯度直方圖(不同梯度的個數),即可形成每個cell的descriptor;
6)將每幾個cell組成一個block(例如3*3個cell/block),一個block內所有cell的特征descriptor串聯起來便得到該block的HOG特征descriptor。
7)將圖像image內的所有block的HOG特征descriptor串聯起來就可以得到該image(你要檢測的目標)的HOG特征descriptor了。這個就是最終的可供分類使用的特征向量了。
其中用Opencv實現需要注意:
HOGDescriptor *hog = new HOGDescriptor(cvSize(64, 48), cvSize(32, 32), cvSize(8, 8), cvSize(16, 16), 9);
cvSize(64, 48)
:滑動窗口大小(不明白為什么設為圖像的大小)
cvSize(32, 32)
:block大小
cvSize(8, 8)
:block的移動步長
cvSize(16, 16)
:cell大小
9
:bins個數
前四個參數的單位都是像素。
一個重要的公式是:?(window_size - block_size)/block_stride + 1?
上述公式說明一個樣本圖像的block數量的計算方法,
而一個樣本圖像的特征數量的計算方法為 ? ? ? ?
特征數量= bins * 每個block的cell數量 * block數量