【问题标题】:Detect Object Defects with Open CV使用 Open CV 检测物体缺陷
【发布时间】:2020-09-27 12:30:39
【问题描述】:

我尝试识别对象的变化。因此,我在使用该对象之前和之后拍照。目前我正在处理两张图片的绝对差异,并拍摄生成的差异图像的轮廓。只要对象被完美定位并像之前的图像一样被捕获,它就可以正常工作。只是位置上的微小差异使我的方法毫无用处。

有没有人使用 OpenCV 或 EmguCV 提供不同的解决方案?我正在考虑检查其中一个相邻像素是否相同,那么应该没有检测到变化,但我不知道现有的高性能算法。

示例图片(图片与我的用例不符,但它们应该有助于说明我的问题): Before After

【问题讨论】:

  • 您好,您能否补充一些有关您期望发生的“更改”类型的详细信息?染色?浆纱?地点?您的图像是否总是从相对于对象的完全相同的位置拍摄?环境照明是否恒定?
  • @GeorgeKerwood 我想检测我的对象是否损坏以及损坏在哪里。因此,我拍摄了对象的参考照片,然后拍摄了后照。我的照片总是从同一个位置拍摄的,但我认识到几乎不可能重现像素精确的后像。环境照明是恒定的。
  • 好吧,它是一种自动化的视觉检测应用程序?也许如果你能包含一些示例图像,我会看看一个解决方案。
  • @GeorgeKerwood 不幸的是我不能包含一些示例图像。我会试着举一些我可以给你看的例子。但我想不会在星期一之前。
  • 明白了,如果应用程序是机密的,也许可以尝试提供一些虚假的例子?一些您认为具有相似差异的伪造图片。

标签: c# opencv image-processing emgucv


【解决方案1】:

是的,有很多方法可以做到这一点。我喜欢以下内容:

  • 直方图匹配。获取前后的直方图并检查差异。对光线变化很敏感。如果您处于受控照明设置中,这是非常好的方法

  • 相关匹配。如果您使用 MatchTemplate,您可以获得匹配的“质量”。这可以被制成对光不那么敏感。但对两个图像之间的旋转变化很敏感。

尝试实现一些,让我们看看你的代码。

【讨论】:

  • 感谢您的回答。我忘了提到我想强调差异所在的区域。您的两种方法都只能告诉我有区别,而不是在哪里。我说的对吗?
  • 我在一个 10x10 块的数组上使用了直方图匹配。在这里你可以看出女巫细胞受到了影响。相同的块方法可用于相关匹配。如果你的块太小,我不认为你会得到一个稳定的系统。
  • 好的,我想我会认为我们正在接近它。但是与我使用的方法不存在相同的问题。一旦对象稍微移动,它就会发现差异,因为例如对象的一部分将在与以前不同的块中“可见”。所以块的直方图会有所不同,虽然对象上没有变化-
  • 好吧,如果你把它们结合起来,那就不行了。模板匹配找到对象(旋转和平移),然后将 10x10 块放在顶部(旋转和平移)
猜你喜欢
  • 1970-01-01
  • 2014-08-26
  • 2011-06-29
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
相关资源
最近更新 更多