Matlab中能否使用imfilter计算两张图像的相关性?
你给出的imfilter调用确实会执行互相关运算,但它和normxcorr2的计算逻辑存在本质区别,输出结果不一致属于正常现象,具体差异如下:
1. 核心计算逻辑差异
imfilter执行的是原始像素值互相关:直接将第二个输入参数作为核,和第一张图的滑动窗口做乘积求和,没有任何归一化操作,输出结果的取值范围完全由输入图像的像素亮度决定,极易受图像亮度、对比度差异的干扰。normxcorr2执行的是归一化互相关:计算前会先对第一张图的局部滑动窗口、第二张模板图分别做去均值、除以标准差的处理,再做乘积求和,最终输出结果的取值范围严格限制在[-1,1]区间,完全消除了亮度、对比度差异对相关结果的影响,匹配精度更高,这也是它的输出更符合你预期的核心原因。
2. 边界处理与输出尺寸差异
- 你调用
imfilter时指定了'replicate'边界参数,会对第一张图的边界做像素复制填充,最终输出的相关结果尺寸和第一张输入图完全一致。 normxcorr2默认无边界填充,采用全匹配计算逻辑,最终输出的结果尺寸为size(img1) + size(img2) - 1,大于两张输入图的尺寸,需要自行裁剪后才能和原图尺寸对齐。
3. 输入参数限制差异
imfilter对输入的核没有尺寸、通道数限制,支持多通道图像直接计算。normxcorr2要求作为模板的较小图像尺寸必须小于等于待匹配图像,且仅支持单通道灰度图输入,传入多通道图像会直接报错。
补充说明
如果希望用imfilter实现接近normxcorr2的效果,需要自行实现滑动窗口的局部归一化逻辑,实现成本较高,直接调用normxcorr2是更高效的选择。
内容的提问来源于stack exchange,提问作者Saquib Khan
相关产品推荐
相关产品推荐

