检测车轮
c#
image-processing
opencv
4
0

我目前正在从事一个项目,该项目有一组通过摄像头行驶的卡车照片。我需要检测它是哪种类型的卡车(它有多少个轮子)。因此,我正在使用EMGU尝试检测到这一点。

我遇到的问题是,我似乎无法使用EMGU的HoughCircle检测来检测车轮,它无法检测所有车轮,还可以检测到树叶中的随机圆。

所以我不知道下一步该怎么做,我尝试实现SURF算法以匹配它们之间的轮子,但是由于它们并不完全相同,这似乎也不起作用,有没有办法我可以实现“松散” SURF算法?

这就是我的开始。

这是在检测到Hough Circle之后得到的。许多错误的检测,甚至有一些甚至还没有接近一个圆,并且出于某种原因将后轮检测为单个。

霍夫圈

是否有可能使用SURF并在彼此之间进行匹配来确认检测到的圆实际上是车轮?我对下一步的工作感到迷茫,不胜感激。

(对不起,英语不好)

更新

这是我所做的。我使用斑点跟踪来找到我的照片集中的斑点。有了这个,我可以有效地找到正在行驶的卡车。然后我将Blob的矩形一分为二,并从那里取下半部分,我知道我得到了应该包含轮子的区域,这大大增加了检测范围。然后,我将对获得的车轮进行轻度的松动检查。由于它们通常是更多的黑色,因此我应该为它们指定一个较低的值,并且可以丢弃任何太白的东西(180/255或更高)。我也知道我的圆半径不能大于检测区域的一半除以一半。

检测后

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

我强烈建议您使用: http : //cvlabwww.epfl.ch/~lepetit/papers/hinterstoisser_pami11.pdf

和C#实现: https//github.com/dajuric/accord-net-extensions

(看一下样品)

通过使用2000多个模板(20-30 fps),该算法可以实现实时性能-因此,您可以涵盖椭圆(投影)和圆形情况。您可以修改手部跟踪样本(FastTemplateMatchingDemo)

通过放置自己的二进制模板(使它们在Paint中:-)

PS:为抑制误报,还引入了某种形式的跟踪。我发布的库链接还包含一些跟踪算法,例如:离散卡尔曼滤波器和粒子滤波器全部带有样本!

该库仍在开发中,因此有可能无法正常工作。请不要犹豫,向我发送消息。

收藏
评论

首先,车轮的投影是椭圆而不是圆形。其次,某些背景渐变很容易产生类似圆形的物体,因此在这里不要感到惊讶。椭圆的问题当然是它们具有5自由度而不是3DOF的圆。注意,五维霍夫空间变得不切实际。一些广义的Hough变换可能可以解决椭圆问题,但要付出很多额外的虚假警报(FA)圈的代价。要对抗FA,您必须验证它们确实是属于卡车的车轮,而没有别的。

您可能需要首先根据对象和背景而不是车轮检测来指定问题。这很重要,因为对象将创建视觉环境来检测车轮,而背景分析将显示首先将卡车(对象)分割成多么容易。如果相机是静态的,则可以使用运动来检测背景。如果背景相对均匀,则其颜色的高斯混合模型可能会帮助消除大部分背景。

收藏
评论

在此答案中,我描述了一种通过以下图像成功测试的方法:

图像处理管线通过对输入图像进行下采样或执行颜色减少操作以减少图像中的数据量(颜色)而开始。这样可以创建较小的像素组。我选择降采样

流水线的第二阶段执行高斯模糊处理 ,以平滑/模糊图像:

接下来,准备对图像进行阈值处理 ,即二化:

第四阶段需要在二值化图像上执行霍夫圆 ,以找到车轮:

管道的最后阶段是绘制在原始图像上找到的圆

这种方法不是可靠的解决方案。这仅是为了激励您继续寻找答案。

我不做C#,对不起。祝好运!

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号