【OpenCV】基于HOG与SVM的行人检测学习
最近听了关于HOG与SVM的报告,比较深刻的学习了算法原理与实现方式。这里根据一些资料作下总结,方便日后拾起:
A.方向梯度直方图(HOG,Histogram of Gradient)
将图像依次划分为检测窗口(window)、块(block)、胞元(cell)3个层次
大体流程:
- 逐像素计算方向梯度;
- 对cell中的像素根据梯度划分区间,给出统计直方图;
- 对于每个block中重叠的cell进行对比度归一化;
- 把所有直方图向量组成HOG特征向量。
HOG特征向量:
OpenCV对于HOG描述子(即特征向量)维度的计算:
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
HOGDescriptor hog(Size(64,128),Size(16,16),Size(8,8),Size(8,8),9);//HOG检测器,用来计算HOG描述子的其特征向量维度即:
B.支持向量机SVM(Support Vector Machine)
它是一个有监督的学习模型,通常用来进行模式识别、分类、以及回归分析。
大体可以理解为:利用正负样本(特征)学习,确定分割两种训练样本的最佳超平面,从而用于新对象的分类、识别。这里便是提取正负样本的HOG特征进行训练,然后同样根据待分类对象的HOG特征进行归类或识别。
C.具体资料
支持向量机(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