选择哪种算法进行物体检测?

时间:2013-12-23 08:42:33

标签: opencv computer-vision object-detection

我感兴趣的是更准确地检测单个物体是一种没有类间可变性的灭火器(所有灭火器看起来都相同)。但是,该应用程序应该是实时的,即机器人正在探索环境,每当它看到感兴趣的对象时,它应该能够检测到它并给出它的像素坐标。

我的问题是哪种算法对这项任务来说是个不错的选择? 1.这是一个分类问题,我们应该使用功能(筛选/冲浪等)+ bow + svm?
2.其他一些解决方案(不知道)。

任何形式的输入将不胜感激。 谢谢。
(P.S。对我来说,我是计算机视觉的新手和堆叠的流程)

UPDATE1: enter image description here

高度变化全部安装在墙上但高度不同。我尝试了SIFT功能和弓,但在测试部分提取弓描述符是昂贵的。此外,我不知道如何在图像被分类为正后定位对象(像素坐标)。

更新2:

我终于使用了sift + bow + svm并且能够对对象进行分类。但是使用这种技术,我只得到对象是否存在于场景中的输出内容? 如何检测对象,即获取对象的边界框或中心。什么是用于实现这些结果的上述方法的兼容方法。 谢谢大家。

2 个答案:

答案 0 :(得分:2)

我建议使用颜色作为寻找的主要功能,并且只根据需要尝试其他功能。灭火器红色非常独特,在办公环境的其他地方不应经常发生。然后,只能在正确颜色的区域中执行其他计算成本更高的测试。

这是一个很好的tutorial for color detection,它还解释了如何找到所需颜色的良好阈值。

我建议采用以下方法:

  • 使用中值滤镜对图像进行去噪
  • 将图像转换为HSV格式(色相,饱和度,值)
  • 使用InRange()选择接近该特定红色阴影的像素 现在您有一个仅包含红色像素的二进制图像图像。
  • 使用CountNonZero()计算红色像素的数量
    • 如果该数字太小,则中止
  • 通过形态学开启/关闭从二进制图像中去除噪音
  • 使用findContours或CvBlob库查找图片中所有blob的轮廓
  • 检查是否有正确宽度,正确高度和正确宽度/高度比的blob 由于您的灭火器是垂直气缸,因此宽度/高度比从各个角度都是恒定的。宽度和高度当然会随着与相机的距离而有所不同。
    • 如果宽度和高度不匹配,则中止
  • 重复这些步骤,找到灭火器底部的黑色部分,
    • 如果没有黑色区域,红色区域下方的宽度/高度正确
    • ,则中止
  • (也许还会对金属顶部和黄色矩形重复这些步骤)

这些测试都应该非常快。如果它们太慢,则可能会降低输入图像的分辨率。

根据您的环境,这可能已经足够强大了。如果没有,您可以继续进行筛选/冲浪功能匹配,但只能在具有正确颜色的斑点周围的小区域中进行。您也不一定必须为每个帧执行此操作,每个第n帧应足以进行确认。

答案 1 :(得分:0)

这是一个老问题..但仍然希望我建议使用YOLO算法来解决这个问题。 YOLO非常适合这种情况。