|
详见[url:2m3x2m4a]http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=15213[/url:2m3x2m4a]。
内容如下:
核心的是使用卷积原理:
cvDFT( _dft_img, _dft_img, CV_DXT_FORWARD, isz.height );
cvGetSubRect( dft_templ, dst,
cvRect(0,(templ_cn>1?yofs:0),dftsize.width,dftsize.height) );
cvMulSpectrums( _dft_img, dst, _dft_img, CV_DXT_MUL_CONJ );
cvDFT( _dft_img, _dft_img, CV_DXT_INVERSE, csz.height );
步骤如下:
1.将模板图像填补到和待匹配图像一样大小,补充的部分填0.进行傅里叶变换,下面称作傅里叶模板。(模板原始图像放在左上角,对应后面取值矩阵起始点也是左上角。)
2.将待匹配图像进行傅里叶变换。下面称为傅里叶图像。
3.将傅里叶模板与傅里叶图像进行傅里叶乘法。之后进行反变换。
4.在上述变换结果取相关矩阵大小(起始点参照1。)即为结果(使用cvMatchTemplate方法选取为CV_TM_CCORR,此时即为结果。其他方法则在此基础上增加了其他操作。)
因为 有补零影响,所以使用cvMatchTemplate得到的位置可能有偏差,建议得到这个结果后,自己再写for循环在附近点进行匹配计算结果。
欢迎大家继续来讨论,找到正确描述它的原理的表述,然后加到中文文档里面,
可以避免想我学过冈萨雷斯的《数字图像处理》,但遇到相关计算还是傻傻的去写for循环实现匹配。 |
|