30

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

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

4

3 回答 3

39

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

您应该尝试使用Features2DFramework 中的 openCV 功能。例如SIFTSURF描述符和FLANN匹配器。此外,您将需要findHomography方法。

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

更新:

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

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

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

  3. 通过匹配器匹配描述符

  4. 分析你的比赛

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

于 2012-05-19T15:52:07.737 回答
6

旋转不变

对于每个关键点:

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

尺度不变

BRISK方法

于 2012-09-08T05:55:42.073 回答
5

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

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

于 2015-04-10T14:49:12.890 回答