OpenCV HOGDescriptor在静态图像中返回错误的结果

时间:2014-05-31 06:51:37

标签: java android opencv

我试图在Android中使用OpenCV HOGDescriptor检测静态图像中是否存在人。

这是Android的java代码,我在Android上找不到一个例子,我试图在peopledetect.cpp中将C ++示例移植到它。

mHOGDescriptor = new HOGDescriptor();
mHOGDescriptor.setSVMDetector(HOGDescriptor.getDefaultPeopleDetector());
Mat img = Highgui.imread(path);
final MatOfRect foundLocations = new MatOfRect();
final MatOfDouble foundWeights = new MatOfDouble();
final Size winStride = new Size(8, 8);
final Size padding = new Size(32, 32);

mHOGDescriptor.detectMultiScale(img, foundLocations, foundWeights, 0.0, winStride, padding, 1.05, 2.0, false);
Boolean withFace = false;
Rect[] array = foundLocations.toArray();
for (int j = 0; j < array.length; j++) {
    Rect rect = array[j];
    Log.i("TEST", "Height " + rect.height + ", Width " + rect.width);
}

当我再次测试一组30张照片时,我注意到误报的数量非常高。一些没有明显人物特征的照片也被标记为与人一样。 (在上面的foundLocation数组中,rect的高度和宽度都相当高)。例如,带有几朵花的照片被标记为内部有2个人。这是非常明显的错误。

我能做些什么来改善它吗?

1 个答案:

答案 0 :(得分:0)

简短回答是,有。

如果我理解正确,您已经在30张照片上训练了您的描述符?这是一个非常低的数字,通过增加您的训练数据量将增加您的检测。


如果你的意思是你正在测试你在c ++代码中使用的相同描述符,那么这里有一个稍微替代的答案。

特征检测是一项非常难以掌握的事情,即使使用非常好的HOG检测器,您也可能会得到许多误报。你没有提到你的真正积极率如何,我会认为它不是太糟糕。想象一下,如果一朵花看起来像是经过训练来检测人的东西,它是一个长薄的东西,顶部有一个大圆圈;非常类似于一个人...