2013-12-23 39 views
2

我对检测单个物体感兴趣,更准确地说是没有级间变化的灭火器(所有灭火器看起来都一样)。然而,应用程序被认为是实时的,即机器人正在探索环境,并且每当它看到感兴趣的对象时,它应该能够检测到它并给出它的像素坐标。选择哪种算法进行物体检测?

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

任何类型的输入将不胜感激。 谢谢。
(P.S包涵我是新手,以计算机视觉和堆放超过流量)

UPDATE1: enter image description here

高度变化都被安装在墙壁上,但不同的高度。我尝试了SIFT特性和弓,但在测试部分中提取弓描述符的代价很高。此外,我不知道如何在图像被分类为正面后在图像内找到对象(像素坐标)。

更新2:

我终于用筛+蝴蝶结+ SVM和我能够为对象进行分类。但是使用这种技术,我只能得到物体是否出现在场景中的输出端。 我如何检测对象,即获取边界框或对象的中心。采用上述方法实现这些结果的兼容方法是什么? 谢谢大家。

+0

如果对象内有足够的结构/纹理,筛选/冲浪和对象的不同视图的数据库可以完成这项工作。 经过svm训练的HoG描述符是另一种最近广泛使用的科学技术。 – Micka

+1

这很大程度上取决于您的数据,例如颜色会有很大的帮助。如果您的传感器具有立体视觉,3D功能才可用。如果所有灭火器处于同一水平,则可以使用高度信息。其他功能取决于你的灭火器的外观。你可以张贴一些机器人拍摄的灭火器照片吗? – HugoRune

+0

@HugoRune请参阅更新。 – user3126137

回答

2

我会建议使用颜色作为主要功能来查找,并且只根据需要尝试其他功能。红色的灭火器非常有特色,不应该在办公室的其他地方经常出现。其他的计算更昂贵的测试只能在正确颜色的区域执行。

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

我建议以下方法:

  • 降噪与中值滤波
  • 将图像转换为HSV格式(色调,饱和度,值)
  • 选择像素接近特定的暗图像红色与InRange()
    现在你有一个二进制图像图像,只包含红色的像素。
  • 计数的红色像素用CountNonZero()
    • 如果该数量太小的数量,中止
  • 从通过形态学开二进制图像中去除噪声/关闭
  • 找到所有的轮廓您的照片中的斑点与findContours或CvBlob库
  • 检查是否有斑点的正确宽度,正确的高度和正确的宽度/高度比
    因为您的灭火器是v高精度的气缸,宽高比将从每个角度不变。宽度和高度当然会随距离相机的不同而有所不同。
    • 如果宽度和高度不匹配,中止
  • 重复这些步骤来找到灭火器底部的黑色部分,
    • 中止如果没有黑色区域与正确红色区域的下方的宽度/高度
  • (或许也重复这些步骤在金属顶部和黄色矩形)

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

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

+0

*由于您的灭火器是垂直的气瓶,所以宽度/高度比率将从每个角度保持不变。*只有在您对机器人相对于灭火器的移动方式做出假设时才是如此。总体而言,您的方法需要对环境进行相当多的假设,并且不会很健壮。 –

+0

@HannesOvrén我假设机器人沿地面水平移动,并保持其摄像机大致与地面对齐,并且灭火器垂直悬挂在墙壁上人类可达到的高度。我认为这是一个非常合理的假设,认为可以通过测试最小边界矩形的比例来改善错误边界。总的来说,我不同意你的结论,即基于颜色的识别在这种情况下不会很强大,但也许你可能想要指定其他假设或提出更合适的方法? – HugoRune

+0

我同意你对运动的假设很好。只是,例如,您仍然可以获得透视扭曲。你非常靠近灭火器。仅以颜色为基础将意味着您对照明条件做出了假设,并且没有其他具有该颜色的物体会出现。此外,灭火器不仅是红色的,而且还有相当多的文本,这意味着强大的阈值处理和牢固的blob可能会很困难。我没有更好的答案,因为我有点偏离了我的舒适区。我只是想对你的回答给出一些看法:) –