使用openCV在图像中寻找“缺失”物体

5
请看下面的两张图片。 图片1 enter image description here 图片2 enter image description here 在图片1中,你可以看到墙上有一块垫子,在图片2中垫子不见了。现在,我要把图片1作为第一张图片,图片2作为第二张图片,并找出缺失的东西。然后,我需要在缺失的物品上方画一个矩形。
在我的程序中,我将每小时检查一次这个问题。
我只能想到“图像差异”这个方法,即“absDiff()”方法。但是我在同一应用程序中使用此技术进行运动检测,因此我不确定同样的技术是否适用于“找到缺失的物品”(因为在这种情况下,它与运动检测有何不同)?
有什么想法可以帮助我像这样找到缺失的物品吗?
3个回答

1

这也是一种运动检测,因为您可以认为Mat已经移出了场景。如果您的图像对齐(即相机放置在相同位置),图像减法是一个很好的开始方式。通过这种方法,您可以了解到哪些对象已经出现或消失。请注意,如果您允许Mat出现在图像中但在不同的位置,这种技术就不适用。

另一方面,如果您正在观察某个Mat,您可以采用物体检测的方法,以便在图像中无法检测到该对象时,可以假设该对象已被盗。您可以通过从对象图像中提取特征(例如SURF)并将其与从网络摄像头图像中提取的特征进行匹配来实现这一点。如果黑色Mat必须始终放置在白色墙上,则检测具有这些颜色的斑点也可能有用。


1
你可以尝试查找两幅图像上的兴趣点,然后看看在图片之间没有匹配的点所在的区域。

谢谢您的回复,我给你点赞。您是指像这样吗?https://dev59.com/X2kw5IYBdhLWcg3wDWTL?rq=1 - PeakGen
我现在不记得具体细节了,我是在写我的硕士论文时读到的。这些被用于试图将2D图像转换为3D场景的系统中(当然不仅限于此)。它们大多是一些带有额外特定信息的角落,这将使得识别哪些角落在图片之间相互对应成为可能。这可以通过查找没有匹配兴趣点的地方或通过定位图片来帮助找到缺失的物体,以便您可以逐像素比较差异。希望这可以帮助到您。 - Dino

1

虽然我晚了7年才来到这个问题,但自从一段时间以来我一直在苦苦寻找解决这个问题的最佳方法,所以我想分享Adrian Rosebrock在pyimagesearch上提供的解决方案。他使用两个图像之间的结构相似性指数(SSIM)来查找不同之处(我所需要的),并基于计算出的差异,找到轮廓以在被识别为“不同”的区域周围放置矩形。与黄金图像进行比较时,我发现它非常有效地用于“模板匹配”或识别图像中的“异常”,可以处理缺失的对象。


很高兴。我进一步调查并使其变得更好,但仍然遇到其他问题,请参见我几天前在datascience.stackexchange上提出的这个问题:https://datascience.stackexchange.com/questions/84709/find-missing-objects-in-image-with-a-priori-knowledge-about-the-missing-object。也许这与您无关,但在我的情况下,我仍然在努力正确地定位“缺失对象”。您必须检查Structural Similarity Index(SSIM)和TransformECC部分以解决您的问题。 - TwinPenguins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接