haarclassifiers的最佳参数

时间:2014-04-29 20:31:32

标签: c++ opencv computer-vision object-detection

我正在尝试使用提供的xml文件haarcascade_frontalface_althogcascade_pedestrians.xml检测面部和行人。到目前为止,我可以得到一些检测,但行人检测非常差,人脸检测是平均的。我正在使用640x480或480x640图像在iphone上进行此操作。我可以使图像更大,但处理速度更快。此外,我可能会将处理移动到服务器,但问题仍然是相同的。截至目前,我这样做是为了得到结果。

面孔:下面的第一个甚至不起作用。它不会编译。

faceDetector.detectMultiScale(matgrey, faces, 1, 1, 2, 0|CV_HAAR_SCALE_IMAGE, cv::Size(30,30));

所以我已经使用了下面的函数调用。

faceDetector.detectMultiScale(matgrey, faces);

行人:

hog.detectMultiScale(rgbMat, found, 0, cv::Size(8,8), cv::Size(32,32), 1.05, 2);

我真的想提高结果质量。我很好奇,如果更改参数会增强结果。我想要最佳结果,因此处理时间不是一个大问题。

谢谢,任何反馈都会很棒。

1 个答案:

答案 0 :(得分:1)

对于面部检测,您无法设置第三个参数(即scaleFactor - 指定图像尺寸在每个图像比例下减少多少的参数)为1,您将失去以多尺度方式搜索面部,因为它无法重新调整大小。尝试将其更改为1.05(即默认值)或其他。

要获得更好的面部检测效果,请查看this thread以获取CascadeClassifier::detectMultiScale()参数的建议值。


对于行人检测,为了提高其质量,您应该尝试修改HOGDescriptor::detectMultiScale()的第三个(即hit_threshold)和最后一个参数(即group_threshold)。

特别是,你应该让它们更高,以获得更好的行人检测结果:

  • hit_threshold:要素与SVM分类平面之间距离的阈值。
  • group_threshold:调节相似性阈值的系数。检测到时,某些对象可以被许多矩形覆盖。阈值用于一组矩形以保留它。