缩放和旋转模板匹配

Sto*_*012 18 c++ opencv image-processing computer-vision template-matching

我正在使用匹配模板的方法CV_TM_CCORR_NORMED来比较两个图像...我想制作这个旋转和缩放不变..任何想法?

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

Lar*_*bar 34

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

您应该尝试使用Features2DFramework中的openCV函数.例如SIFT,SURF描述符和FLANN匹配器.此外,您将需要findHomography方法.

是在场景中找到旋转对象的一个​​很好的例子.

更新:

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

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

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

  3. 匹配器匹配描述符

  4. 分析你的比赛

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

  • @ Storm2012如果这个答案有帮助和/或回答了你的问题,你[可能会考虑接受它](http://meta.stackexchange.com/q/5234/161198). (4认同)
  • 注意筛选/冲浪/等.方法对于具有很少特征的对象是不利的.例如同质物体.它们需要模板中足够的角和边. (2认同)

Geo*_*rge 6

旋转不变

对于每个关键点:

  1. 占据关键点周围的区域.
  2. 用梯度或其他方法计算该区域的方向角.
  3. 将此角度的图案和请求区域旋转为0.
  4. 计算此旋转区域的描述符并匹配它们.

尺度不变

请参阅BRISK方法


Tom*_*Tom 5

比通过特征检测和单应性来匹配模板比例尺和旋转不变性更容易的方法(如果您知道模板实际上仅是旋转的和比例尺,但其他所有条件都是不变的)。对于真正的物体检测,以上建议的基于关键点的方法效果更好。

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