【问题标题】:scale and rotation Template matching缩放和旋转模板匹配
【发布时间】:2012-05-26 20:13:51
【问题描述】:

我正在使用CV_TM_CCORR_NORMED 匹配模板的方法来比较两个图像...我想让这个旋转和缩放不变..有什么想法吗?

我尝试对图像和模板的傅里叶变换使用相同的方法,但旋转后的结果仍然不同

【问题讨论】:

    标签: c++ image-processing opencv computer-vision template-matching


    【解决方案1】:

    有比通过特征检测和单应性匹配模板比例和旋转不变更简单的方法(如果你知道它真的只有旋转和比例,但其他一切都是不变的)。 对于真实对象检测,上述建议的基于关键点的方法效果更好。

    如果您知道它是同一个模板并且不涉及透视变化,您可以使用图像金字塔进行尺度空间检测,并在该金字塔的不同级别上匹配您的模板(通过简单的方法,例如 SSD 或 NCC )。在金字塔的较高(=较低分辨率)级别上找到粗略的匹配会很便宜。事实上,它非常便宜,您还可以在低分辨率级别上粗略地旋转模板,当您将模板回溯到更高分辨率级别时,您可以使用更细粒度的旋转步进。这是一种非常标准的模板匹配技术,在实践中效果很好。

    【讨论】:

      【解决方案2】:

      旋转不变量

      对于每个关键点:

      1. 在关键点周围取区域。
      2. 用梯度或其他方法计算该区域的方位角。
      3. 将此角度上的图案和请求区域旋转到 0。
      4. 计算这个旋转区域的描述符并匹配它们。

      尺度不变

      BRISK方法

      【讨论】:

        【解决方案3】:

        当您的对象在场景中旋转或缩放时,与matchTemplate 匹配的模板效果不佳。

        您应该尝试Features2D Framework 中的 openCV 功能。例如SIFTSURF 描述符,以及FLANN 匹配器。此外,您还需要findHomography 方法。

        Here 是在场景中查找旋转对象的一个​​很好的例子。

        更新:

        简而言之,算法是这样的:

        1. 查找对象图像的关键点 1.1。从这些关键点中提取描述符

        2. 寻找场景图像的关键点 2.1 从关键点提取描述符

        3. 按匹配器匹配描述符

        4. 分析您的匹配项

        有不同类别的 FeatureDetector、DescriptorExtractors 和 DescriptorMatches,您可以阅读它们并选择适合您任务的那些。

        【讨论】:

        • **谢谢,我已经使用了单应性,而不是冲浪,我发现角落是兴趣点,这对 FLANN 有效吗? surf 和 sift 可能需要很长时间并降低性能**
        • Points of interest 是通用术语。它们是边缘,主要是角落。您是如何找到兴趣点的?您可以使用任何 openCV FeatureDetectors,或自己编写。例如有FASTSTAR。它们简单快速。但他们不保留有关兴趣点角度的信息。 SURFSIFT 速度较慢,但​​它们关于兴趣点的信息更大(角度)。 SIFTSURF 允许您找到比例不变的匹配项。但是你可以为你的匹配器使用任何 openCV 检测器。您也可以尝试不同的匹配器(openCV 中很少)
        • @Storm2012 如果这个答案有帮助和/或回答了你的问题,你might want to consider accepting it
        • 注意 sift/surf/etc.方法不适用于特征很少的对象。例如。同质物体。他们需要模板中有足够的角和边缘。
        猜你喜欢
        • 2015-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-14
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多