确定边缘检测处理图像的相似性

时间:2011-04-25 07:56:37

标签: c# image-processing edge-detection image-comparison

我希望我能从stackoverflow社区获得一些关于我为高级项目遇到的两难困境的指导。首先,我想声明我是一名新手程序员,我相信你们中的一些人会很快告诉我这个项目是我的头脑。我很快意识到这可能是真的。

现在就是这样,让我给出一些定义:

项目目标: 与许多其他人一样,该项目的目标是在各种SO问题中寻求实现(其中许多问题在我的努力过程中对我非常有帮助),就是检测 无论停车位是满还是可用,最终都会向用户报告(理想情况是通过iPhone或Droid或其他移动应用程序以便于使用 - 由于时间限制,这方面很快被认为超出了我的工作范围)。

正在使用的工具: 我已经大量使用了AForge.Net库的资源,它为我提供了所有构建块,用于将项目整合到从IP摄像机捕获视频,对图像应用过滤器,以及最终完成目标检测。因此,您将知道我选择使用C#编程,主要是因为初学者易于使用。其他选项包括MATLAB / C ++,带OpenCV的C ++和其他选择。

问题

这是我遇到问题的地方。下面链接了一个已在AForge图像处理实验室中预处理过的图像。使用的过滤器和过程的顺序是:灰度,直方图均衡,Sobel边缘检测,最后是Otsu Threshholding(尽管我不相信需要最后一步)。

http://i.stack.imgur.com/u6eqk.jpg

正如您可以用肉眼看到的那样,当然,在我用相机监视的空间中,有一系列检测到的边缘显然是停放的汽车。这些汽车明显地由亮车轮的图案定义,这种“双轨道”模式基本上代表了侧窗的外边缘,甚至是这种情况下车牌的轮廓。具体来说,在项目的延续中,选择的摄像机将是一个尽可能覆盖尽可能多的块的PTZ,因此我只想关注汽车的侧面特征(消除车牌等因素) 。也可以考虑诸如用于天窗的矩形的特征,但是显然这不是汽车的通用特征,而一般的窗口轮廓是。

我们都可以看到这些模式存在差异,当然还有汽车品牌和型号。但是,通常这个序列不仅可以成功检索到所需的特征,而且还可以消除视线中的道路(重要的是,如果您要检测空的空间,我打算将道路颜色用作“第一个试金石”...如果我检测到与道路数据一致的灰度级,特别是如果在区域中没有检测到边缘,我觉得我可以安全地假设一个空的空间)。我的问题是这个,希望它足够通用,对网站上的其他人实际上有益:

重点问题:
有没有办法拍摄一个图像片段(通过裁剪),然后将检测到的边缘序列与来自相机的未来新帧进行比较?更具体地说,有没有办法做到这一点,同时允许余地/基本上为边缘的微小差异创建公差阈值?

关于问题的个人想法/头脑风暴
- 我确信有一种方法可以逐个像素地比较裁剪到边缘周围的矩形,然后通过新处理的帧滑动裁剪后的图像,逐个像素地进行比较,但这样做不会除非您与检测到的边缘完全匹配,否则请特别提供帮助。

所有帮助都表示赞赏,我也非常乐意根据需要澄清。

2 个答案:

答案 0 :(得分:3)

让我试一试。

你有两张照片。让我们称之为BeforePic和AfterPic。对于这两张图片中的每张图片,您都有一个ROI(感兴趣的矩形) - AKA是一个裁剪的部分。

你想看看AfterPic.ROI是否与BeforePic.ROI非常不同。 “非常不同”,我的意思是差异大于某个阈值。

如果这确实是你的问题,那么它应该分为三个部分:

  1. 获取BeforePic和AfterPic(以及每个的ROI)。
  2. 将图片\边缘差异的抽象概念翻译成数字。
  3. 将差异与某个阈值进行比较。
  4. 第一部分并不是你问题的一部分,所以我会忽略它。 最后一部分基本上找到了正确的门槛。再次超出了问题的范围。 第二部分是我认为问题的核心(我希望我不会完全离开这里)。为此,我将使用算法ShapeContext(在PDF中,最好将它实现到3.3节,因为它对于3.4及以上的需求来说太强大了。)

    形状上下文是一种使用图像边缘且成功率很高的图像匹配算法。 实现这个是我的决赛项目,它似乎是一个完美的匹配(没有双关语意)为你。如果您的边缘良好,并且您的投资回报率准确,那么您也不会失败。

    实施可能需要一些时间,但如果操作正确,这将非常适合您。 不用考虑,一个糟糕的实现可能会运行缓慢,我已经看到每个图像最坏的情况是5秒。另一方面,一个好的(但不是完美的)实现每个图像需要不到0.1秒。

    希望这有帮助,祝你好运!

    编辑:我找到了implementation of ShapeContext in C# @ CodeProject,如果感兴趣的话

答案 1 :(得分:2)

我在工作中遇到了相当多的机器视觉问题,而我能告诉你的最重要的事情就是更简单更好。方法越复杂,意外边界情况就越有可能造成失败。在工业中,我们通常通过尽可能简化条件来解决这个问题,强加严格的约束来限制我们需要考虑的事物的数量。当然,学生项目与行业项目不同,因为您需要展示对特定技术的理解,这可能比它是否是您选择承担的问题的可靠解决方案更重要。

需要考虑的一些事项:

  1. 街上有预先设定的停车位吗?您是否可以选择手动预先定义摄像机将观察到的停车区域?这可以大大简化问题。

  2. 当汽车非法停放时(例如占用多个地点),您是否可以提供不正确的结果?

  3. 当空间中出现意外的环境条件(如垃圾桶,坑洞,汇集的水或雪)时,您是否可以提供不正确的结果?

  4. 您是否需要支持所有类别的车辆(汽车,平板卡车,货车,送货卡车,摩托车,迷你电动车,三脚架车辆?)

  5. 您是否可以拍摄没有车辆的街道基线快照?

  6. 至于比较两组边缘,可能最稳健的方法被称为几何模型发现(将数据感兴趣的边缘描述为一系列'边缘',将它们组合成链并比较几何),但这是过度杀死您的应用程序。我会更多地关注停车区域中存在的“边缘像素”计数的阈值或者与基线图像的差异(然而,需要注意图像偏移,因为来自室外温度变化的材料扩展可能导致视野变为由于相机机械移动而略有变化。)