5

基于这个问题这个问题,我认为“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');
4

2 回答 2

10

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

不同之处在于,imfilter默认使用correlation来过滤图像,这有一些小的差异——基本上,卷积从图像的一侧开始,而correlation从另一侧开始,所以过滤器输出有一些小的差异。如果你先翻转图像,你会得到相同的输出:

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

这正好等于out2。

于 2013-06-28T16:14:15.917 回答
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.

于 2013-06-28T16:14:08.370 回答