2016-01-25 52 views
2

我所知,来完成这项任务所需的步骤:OpenCV的 - 使用SVM和HOG用于人员检测

  1. 收集训练集(正面和负面套)。
  2. 提取要用于训练SVM的每个图像的猪描述符(当前为'1'类标签为正,'-1'类为负类标签)。
  3. 将训练的SVM设置为HOGDescriptor并使用detect/detectMultiscale。

我已经完成了上述所有步骤。我只是困惑,HOGDescriptor.detect/detectMultiscale检测到哪个类?它是否仅检测正面类别标签(1)?

+0

这可以帮助你:http://www.geocities.ws/talh_davidc/ – SomethingSomething

回答

2

在计算机视觉中,视觉描述符或图像描述符(即,HoG)是图像内容的视觉特征的描述。他们描述了诸如形状,颜色,纹理或运动等基本特征。因此,HoG描述符仅描述了图像中显示的场景 - 即在街上行走的行人,您可以在下面看到示例HoG描述符(HoG仅计算图像的局部部分中梯度方向的出现):

enter image description here

支持向量机是用于分类,回归和异常值检测的一组监督学习方法。但最初,支持向量机是一种用于构建最佳二元(2级)分类器的技术,所以支持向量机决定了描述符的含义。因此,HoG的输出是SVM的输入,后者的输出是+1或-1。

OpenCV提供了一个隐藏此操作的接口,可以通过函数调用完成全部对象检测。这是HOGDescriptor::detectMultiScale()所做的,它使用多尺度窗口执行对象检测。一旦cv::HOGDescriptor hog实例将被宣布,那么SVM分类的系数应该也做:

hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector()); 

然后detectMultiScale()执行完整的对象检测(描述符提取和二元分类在一起),并返回的边框每个考生:

std::vector<cv::Rect> found; 
hog.detectMultiScale(frame, found, 0, cv::Size(8,8), cv::Size(32,32), 1.05, 2); 
+0

谢谢您的答复。在我的情况下,我想使用自定义SVM来检测人(不是默认值)。我已经通过提取正面和负面图像的猪描述符来训练线性SVM,并且我还可以通过使用hog.setSVMDetector(svm.getSupportVectors())将猪设置为使用训练好的SVM。令我困惑的是detectMultiScale。它是否检测到负面课堂(无人)或正面课堂(人)?对不起,我只是新手opencv和计算机视觉。 – rjoniuqa

+0

'detectMultiScale'只返回肯定结果,但它们可以是真正的肯定(正确识别为人物的对象)或误报(像汽车,树木等被错误识别为人物的对象) – Kornel