python模板匹配比例问题怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python模板匹配比例问题怎么解决相关的知识,希望对你有一定的参考价值。

参考技术A 如果只是单个目标的匹配,那只需要取相似度最大值所在的位置就可以得出匹配位置;\n如果要匹配多个目标,那就设定一个阈值,就是说,只要相似度大于比如0.8,就认为是要匹配的目标。

模板匹配?对象识别和特征匹配或解决方案是啥?

【中文标题】模板匹配?对象识别和特征匹配或解决方案是啥?【英文标题】:template matching? object recoginition and feature matching or what is the solution?模板匹配?对象识别和特征匹配或解决方案是什么? 【发布时间】:2014-08-18 18:48:38 【问题描述】:

问题:我有一张物体的照片(制造部件,如下面所附照片),使用我的 Andoird 手机相机我想验证相机预览中的物体是否与模板匹配或不是。 (也就是说,它是否与模板相同的部分)

我可以让用户移动摄像头,以便在摄像头预览中获得与模板相似的模板视图,但是会有不同的噪声级别和/或照明,可能还有不同的背景。

问题:你建议我用什么来解决这个问题?我在考虑 Canny 边缘提取,然后将相机帧与模板中的 Canny 边缘提取相匹配?这是一个好主意吗?如果是,请告诉我如何实施?任何资源?样品? (我可以进行 Canny 边缘提取,但找不到匹配的方法)

如果不是一个好主意,那么您有什么建议?

我尝试过的事情:

    特征提取和匹配:我使用了一些来自 OpenCV 的不同提取器和匹配器实现,我的应用程序正在工作并绘制检测到的特征点和匹配等。但是作为图像处理的初学者,我无法理解结果,而且如何知道什么是匹配。有什么想法、帮助、好的资源吗? 模板匹配:我使用了 OpenCV 模板匹配,但是性能很糟糕,我认为这不是解决方案。

【问题讨论】:

您能提供一些您的问题的示例图像吗?输入图像和所需的输出。因此,人们可以尝试一些方法来帮助您。 @GabrielArchanjo 此问题附有一张示例图片。输入图像也将非常相似(正如我所说的理想情况下,我将处理相机输入帧) 要分析的部分到底是什么?你那里有很多灰色,所以很混乱。关于 Canny Edge 的资源,谷歌提供帮助 至少在您提供的图像中,有圆形和正方形等基本形状,因此您可以利用它们的特征,例如形状、大小和它们的相对位置。我认为 Canny 是一个不错的选择,如果捕获的图像中没有巨大的透视变形,hough-circles 也会有所帮助。 还没有尝试过,也没有使用它,所以你必须自己做一些研究(形状匹配)。我想到的简单的事情是:用精明的轮廓提取; Moments 用于形状匹配:docs.opencv.org/modules/imgproc/doc/… ; ICP(迭代最近点)用于精确的精细放置;也许chamfer matching 如果您可以使用其他方法标准化比例和方向。 【参考方案1】:

我在您的测试图像上尝试用手机识别物体,结果是肯定的。

使用的检测器:ORB(Binary Detector)。

使用的描述符:ORB。

匹配技术:蛮力匹配。

图像尺寸 640x480。

我能够检测到大约 500 个特征点(关键点的数量已经足够了,但是当您有更多具有相似外观对象的图像时,它可能会产生错误匹配。您需要优化匹配以避免错误匹配)。

对象识别在两个不同尺度上的结果。

关于您在理解物体识别方面遇到困难。你到底有什么不明白的(具体话题)。 推荐你看这两本书

    Learning OpenCV 作者:Adrian Kaehler、Gary Bradski OpenCV 2 计算机视觉应用程序编程食谱,作者:Robert Laganière(第 8 章和第 9 章)。

干杯!

【讨论】:

非常感谢您的回答,可以和我分享代码sn-p吗?我特别想知道您是如何提取好的匹配项以及判断是否找到(或匹配)对象的标准是什么(您如何在对象周围绘制绿色方块?)非常感谢 另一个问题:如果我将边缘提取的结果(即Canny边缘提取结果)发送给特征提取方法,您认为我会得到更好(更准确)的特征提取吗? 如果我分享代码 sn-p 你会付给我多少钱? :-)。只是在开玩笑!。不幸的是我不能分享代码,因为我的研究所拥有我的算法的版权。如果您阅读我上面提到的书中的两章,您可以很容易地理解对象识别和匹配结果分析的过程。你可以使用一种叫做 Homography 的技术来获得那个绿色方块。请按照this 教程了解如何实现对象识别。 没问题,我明白 :) 非常感谢您的帮助。你觉得我的第二个问题怎么样?它会产生更精确的结果吗?因为我只对零件的轮廓和螺母、孔等主要特征感兴趣。 将 canny 的结果提供给特征提取对您没有任何帮助,因为特征提取基于更好的称为角点检测的技术,它排除了图像中的许多模糊点,只保留高度不同和唯一的点用于匹配。【参考方案2】:

据我了解,精明的边缘检测可能不是最佳解决方案。据我说,在对测试图像进​​行一些基本预处理后,找到它的筛选特征并将其与模板的筛选特征进行比较。 sift 是真正多才多艺的也应该在这里工作。

您也可以尝试 opensurf 功能,它们比 sift 更快,但我没有机会与他们进行大量合作来评论其准确性

【讨论】:

以上是关于python模板匹配比例问题怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Python:匹配 C++ 模板类型的嵌套命名空间

使用Python,OpenCV进行模板匹配单对象多对象及多尺度模板匹配

Python+OpenCV图像处理—— 模板匹配

Python+OpenCV图像处理—— 模板匹配

opencv python:模板匹配

Python 机器视觉 - 基于opencv图像模板匹配实现的简单人脸匹配实例演示,matchTemplate的6大模板匹配算法