检测卡车车轮

时间:2014-03-17 17:03:30

标签: c# opencv image-processing emgucv surf

我目前正在开展一个项目,我们有一组用相机拍摄的卡车照片。我需要检测它是什么类型的卡车(它有多少个轮子)。所以我正在使用EMGU试图检测到这一点。

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

所以我不知道接下来我应该尝试什么,我尝试实施SURF算法以匹配它们之间的轮子,但这似乎不起作用,因为它们不完全相同,有没有办法我可以实现一个“松散”的SURF算法?

这就是我的开始。

这是Hough Circle检测后得到的结果。许多错误的检测,有些甚至没有接近圆形,后轮由于某种原因被检测为单个。

Hough Circles

是否有可能确认检测到的圆圈实际上是使用SURF轮子并在它们之间进行匹配?我对下一步应该做的事情感到有点迷茫,任何帮助都会非常感激。

(抱歉英语不好)

更新

这就是我所做的。 我使用blob跟踪能够在我的照片集中找到斑点。有了这个我有效地可以找到移动卡车。然后我将blob的矩形分成两部分并从那里取下半部分我知道我得到了应该包含轮子的区域,这大大增加了检测。然后我会对我得到的车轮进行轻度强度松动检查。由于它们通常更黑,我应该得到一个相当低的价值,并可以丢弃太白,180/255及以上的任何东西。我也知道我的圆半径不能大于检测区的一半除以一半。

After dectection

3 个答案:

答案 0 :(得分:28)

在这个答案中,我描述了一种使用以下图像成功测试的方法:

图像处理管道以downsampling输入图像开始,或执行color reduction操作以减少图像中的数据量(颜色)。这会创建较小的像素组。我选择下采样

管道的第二阶段执行 gaussian blur 以平滑/模糊图像:

接下来,图像已准备好 thresholded ,即二值化:

第4阶段要求在二值化图像上执行 Hough Circles 以找到车轮:

管道的最后阶段是在原始图片上找到的 draw the circles

这种方法不是一个强大的解决方案。这只是为了激励您继续寻找答案。

我不做C#,抱歉。祝你好运!

答案 1 :(得分:7)

首先,车轮凸起是椭圆形而不是圆形。其次,一些背景渐变可以很容易地产生类似圆形的物体,所以这里应该不会有任何意外。椭圆的问题当然是它们有5个DOF而不是3DOF作为圆圈。请注意,五维Hough空间变得不切实际。一些广义Hough变换可能以许多额外的误报(FA)圆为代价来解决椭圆问题。要对抗FA,你必须确认它们确实是属于卡车的轮子,而不是其他任何东西。

您可能需要首先根据对象和背景而不是车轮检测来指定问题。这很重要,因为物体会创建一个视觉上下文来检测轮子,而背景分析将显示在第一个地方分割卡车(物体)是多么容易。如果相机是静态的,可以使用动作来检测背景。如果背景相对均匀,其颜色的高斯混合模型可能有助于消除其中的大部分。

答案 2 :(得分:4)

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

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

(看一下样品)

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

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

P.S: 为了抑制误报,还加入了某种跟踪。我发布的图书馆链接还包含一些跟踪算法,例如:离散卡尔曼滤波器和粒子滤波器都带有样本!

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