最近聽了關於HOG與SVM的報告,比較深入的學習了算法原理與實現方式。這裏根據一些資料做下總結,方便往後拾起:html
將圖像依次劃分爲檢測窗口(window)、塊(block)、胞元(cell)3個層次算法
大致流程:ide
- 逐像素計算方向梯度;
- 對cell中的像素根據梯度劃分區間,給出統計直方圖;
- 對於每一個block中重疊的cell進行對比度歸一化;
- 把全部直方圖向量組成HOG特徵向量。
HOG特徵向量:學習
OpenCV對於HOG描述子(即特徵向量)維度的計算:spa
size_t HOGDescriptor::getDescriptorSize() const { CV_Assert(blockSize.width % cellSize.width == 0 && blockSize.height % cellSize.height == 0); CV_Assert((winSize.width - blockSize.width) % blockStride.width == 0 && (winSize.height - blockSize.height) % blockStride.height == 0 ); return (size_t)nbins* (blockSize.width/cellSize.width)* (blockSize.height/cellSize.height)* ((winSize.width - blockSize.width)/blockStride.width + 1)* ((winSize.height - blockSize.height)/blockStride.height + 1); }如如下HOG檢測器:檢測窗口(64,128),塊尺寸(16,16),塊步長(8,8),cell尺寸(8,8),直方圖bin個數9.net
HOGDescriptor hog(Size(64,128),Size(16,16),Size(8,8),Size(8,8),9);//HOG檢測器,用來計算HOG描述子的其特徵向量維度即:
3d
它是一個有監督的學習模型,一般用來進行模式識別、分類、以及迴歸分析。code
大致能夠理解爲:利用正負樣本(特徵)學習,肯定分割兩種訓練樣本的最佳超平面,從而用於新對象的分類、識別。這裏即是提取正負樣本的HOG特徵進行訓練,而後一樣根據待分類對象的HOG特徵進行歸類或識別。htm
支持向量機(SVM)介紹與實現: http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html對象
方向梯度直方圖(HOG)學習筆記: http://blog.sina.com.cn/s/blog_60e6e3d50101bkpn.html
訓練SVM分類器進行HOG行人檢測(實例): http://blog.csdn.net/pb09013037/article/details/41256945
OpenCV HOGDescriptor 參數圖解: http://blog.csdn.net/raodotcong/article/details/6239431