【OpenCV】基于HOG与SVM的行人检测学习

最近听了关于HOG与SVM的报告,比较深刻的学习了算法原理与实现方式。这里根据一些资料作下总结,方便日后拾起:


A.方向梯度直方图(HOG,Histogram of Gradient)

将图像依次划分为检测窗口(window)、块(block)、胞元(cell)3个层次

大体流程:

  1. 逐像素计算方向梯度;
  2. 对cell中的像素根据梯度划分区间,给出统计直方图;
  3. 对于每个block中重叠的cell进行对比度归一化
  4. 把所有直方图向量组成HOG特征向量。

HOG特征向量:

60e6e3d54ca9518b964b3&690

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描述子的

其特征向量维度即:clip_image002


 

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

原文地址:https://www.cnblogs.com/KC-Mei/p/4534009.html