使用imfilter和conv2的不同结果

时间:2013-06-28 15:56:15

标签: matlab image-processing filter

基于this questionthis one我认为" imfilter"和" conv2"应该有相同的结果。但试试这段代码,你会看到差异。问题是什么?

I = imread('tire.tif');  
fil=[1 2 3;4 5 6;7 8 9];  
out1=conv2(double(I),fil,'same');  
out2=uint8(out1);  
out3=imfilter(I,fil,'same');

2 个答案:

答案 0 :(得分:10)

如果您使用imfilter(I,fil,'same','conv'),那么它们是相同的。

不同之处在于,imfilter默认使用相关性来过滤图像,这有一些小差异 - 基本上,卷积从图像的一侧开始,而相关性从另一侧开始,因此滤波器输出中存在一些小的差异。如果先翻转图像,则会得到相同的输出:

out4=fliplr(flipud(imfilter(fliplr(flipud(I)),fil,'same')));

这与out2完全相同。

答案 1 :(得分:3)

你的答案在于对imfilter的第四个输入参数的解释。

  
      
  • 相关和卷积
  •   
    'corr'       imfilter performs multidimensional filtering using
                 correlation, which is the same way that FILTER2
                 performs filtering.  When no correlation or
                 convolution option is specified, imfilter uses
                 correlation.

    'conv'       imfilter performs multidimensional filtering using
                 convolution.

尝试out3=imfilter(I,fil,'same','conv');,您将获得与conv2相同的结果。