C++ 缩放和旋转模板匹配
我正在使用带有C++ 缩放和旋转模板匹配,c++,image-processing,opencv,computer-vision,template-matching,C++,Image Processing,Opencv,Computer Vision,Template Matching,我正在使用带有CV\u TM\u CCORR\u NORMED的匹配模板方法来比较两幅图像。。。我想使旋转和缩放保持不变。。有什么想法吗 我尝试在图像和模板的傅里叶变换上使用相同的方法,但旋转后的结果仍然不同当对象在场景中旋转或缩放时,与匹配模板的模板匹配不好 您应该尝试使用feature2dFramework中的openCV函数。例如SIFT或SURF描述符和FLANN匹配器。此外,您还需要findHomography方法 是在场景中查找旋转对象的一个很好的示例 更新: 简言之,算法如下: 查
CV\u TM\u CCORR\u NORMED
的匹配模板方法来比较两幅图像。。。我想使旋转和缩放保持不变。。有什么想法吗
我尝试在图像和模板的傅里叶变换上使用相同的方法,但旋转后的结果仍然不同当对象在场景中旋转或缩放时,与
匹配模板
的模板匹配不好
您应该尝试使用feature2d
Framework中的openCV函数。例如SIFT
或SURF
描述符和FLANN
匹配器。此外,您还需要findHomography
方法
是在场景中查找旋转对象的一个很好的示例
更新:
简言之,算法如下:
- (上述算法中的步骤1和2)
- (算法中的步骤1.1和2.1 (上图)
- (上述算法中的步骤3)
- 以关键点周围的区域为例
- 使用梯度或其他方法计算该区域的方向角
- 将此角度上的图案和请求区域旋转为0
- 计算此旋转区域的描述符并进行匹配 比例不变量
旋转不变性 对于每个关键点:
参见方法(如果您知道它实际上只是旋转和缩放,但其他一切都是不变的),有比通过特征检测和同形文字更容易匹配模板比例和旋转不变的方法。 对于真实目标检测,上述建议的基于关键点的方法效果更好
如果您知道它是同一个模板,并且不涉及透视变化,则可以使用图像金字塔进行缩放空间检测,并在金字塔的不同级别上匹配模板(通过简单的方式,例如SSD或NCC)。在金字塔的较高(=较低分辨率)层次上找到粗略匹配是很便宜的。事实上,它非常便宜,您还可以在低分辨率级别上粗略地旋转模板,当您将模板向下跟踪到更高分辨率级别时,您可以使用更细粒度的旋转步进。这是一种非常标准的模板匹配技术,在实践中效果很好 **谢谢,我已经使用了单应性,而不是冲浪,我发现角作为兴趣点,这对FLANN有用吗?冲浪和筛选可能需要很长时间,并会降低性能**
兴趣点
是一个通用术语。它们是边,大部分是角。你是如何找到兴趣点的?您可以使用任何openCVFeatureDetector
s,也可以编写自己的。例如,有FAST
,STAR
。它们既简单又快速。但他们不保留有关兴趣点角度的信息SURF
和SIFT
速度较慢,但他们关于兴趣点的信息更大(角度)SIFT
和SURF
允许您查找比例不变匹配。但是你可以使用任何openCV检测器来匹配你的匹配器。您也可以尝试不同的匹配器(openCV中很少有)@Storm2012如果这个答案有用和/或回答了您的问题,您可以。请注意,sift/surf/etc.方法对具有小功能的对象不适用。例如,均质物体。他们需要模板中有足够的角和边。