OpenCV中的旋转和缩放不变模板匹配

时间:2012-09-26 12:19:11

标签: c++ opencv pattern-recognition

  

可能重复:
  scale and rotation Template matching

我有一个模板灰度图像,上面有白色背景和黑色形状。我还有几个类似的测试图像,它们的旋转和形状各不相同。测试图像与模板不同,但它们是相似的。

我想比较这两个图像,看看模板是否匹配,与任何测试图像最相似。图像中没有失真,没有噪声和其他缺陷。是否有关于此主题的任何教程?

2 个答案:

答案 0 :(得分:11)

首先尝试最简单的方法。

如果我理解正确你有一些模特 - 白色背景上的黑色形状。您可以将其视为blob - 通过计算主轴角度找到它的质心和旋转 - 看there

然后你必须从其他图像中分割出形状。然后尝试使用matchShapes()函数找到最佳的相应形状 - 请参阅there如何使用它。

matchShapes()函数使缩放和旋转不变匹配。最小的匹配形状可以带来更好的匹配。

扩展您的问题,您可以找到质量中心和最佳匹配斑点的旋转,并找到模型和匹配图像之间的旋转,缩放和位移。

答案 1 :(得分:4)

这是一个非常复杂的主题。您通常可以使用广义霍夫变换和标准化灰度相关等选项来处理模板匹配。问题是它们在最简单的表达式中不是缩放或旋转不变的。你需要关注当时的问题,通用解决方案很复杂。我建议先进行简单的模板匹配。然后添加" hacks"用于旋转和缩放。对于旋转,您可以缩小(低分辨率匹配)和模板匹配旋转模型。这也可以处理规​​模。