模式匹配 - 在第二个图像中查找参考对象[OpenCV?]

tes*_*ino 17 c++ opencv pattern-matching

我有一个参考黑白图像,其中包含一个参考对象(例如硬币).该对象由用户标记,即感兴趣的区域.

现在我想分析其他图像并找到该对象或类似对象的位置和旋转.物体任意放置在相机下方,但从不缩放,视角始终为90度.

我评估了一个完全符合我要求的商业图书馆:Euresys EasyFind

您可以在下面找到手头任务的示例图像.当前的实现使用OpenCV的特征检测,并且无法正常工作.

模板:

在此输入图像描述

找到同一枚硬币的匹配:

在此输入图像描述

对于略有不同的硬币,比赛失败:

在此输入图像描述

特征检测似乎是错误的方法.我需要以某种方式简单地对象.但如果我这样做(Blur,Canny,CornerHarris)功能检测根本不起作用.

我们非常感谢任何有关可靠方法的建议.一个替代的图书馆建议也会很棒.

rot*_*age 9

既然你已经尝试了很多可能的技术,我会要求你通过以下链接(可能你可能已经完成了!!!)

  1. 比较所有特征检测器和描述符
  2. 冲浪,FREAK和轻快的组合

你失败的第3张图像是低对比度,与其余两张完美匹配并不是很棘手...所以我进行了对比度调整,我得到了以下与Orb Feature探测器和Orb Descriptor Extractor的匹配.我应用了对比度调整在特征检测之前的所有图像.

图像1与图像3

在此输入图像描述

图像2与图像3

在此输入图像描述

带图像2的图像1(此组合适用于所有检测器/提取器对)

在此输入图像描述

为了匹配我已经使用BruteForceMatcher<Hamming> matcher 虽然点是局部定位可以很好地猜测.需要使用多于一种技术并首先进行一些圆检测以将特征检测限制为尽可能小的ROI.加上检测点相对于圆心的方向可以轻松获得新的方向信息.参考第一个链接和第二个链接,您可以注意到SURF和BRIEF非常能抵抗光线强度和模糊的变化.因此,SURF和BRIEF的组合也是您可以尝试的.


Gus*_*sky 3

这个问题非常广泛,有很多方法,具体取决于您想要实现的目标。您可以使用霍夫变换来检测硬币,因为它是圆形的,尽管它可能会检测到许多圆形元素(因此这取决于您是否有其他类似的东西)。

更一般地说,您需要使用特征检测器(SURF、ORB、FAST、Shi-Tomassi),在包含硬币的参考系和您正在寻找硬币的参考系之间进行提取和匹配。然后,您可以使用单应性变换来确保您找到的点是相同的,因此您找到了您的硬币。

看一下这个例子:

Features2D + 单应性查找已知对象