2013-06-28 164 views
5

基于this questionthis one我认为“imfilter”和“conv2”应该具有相同的结果。但试试这个代码,你会看到不同之处。问题是什么?使用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'); 

回答

10

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

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

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

这完全等于out2。

+0

Thanks @Hugh Nolan。我认为你应该用'相同'替换'保存'。有一个问题出现了。你在[这个问题]中看到(http://stackoverflow.com/questions/10672184/implementing-imfilter-in-matlab)[petrichor](http://stackoverflow.com/users/198428/petrichor)尚未使用'conv',但他的回答已被提问者接受了! – sepideh

+0

如果你对图像处理很熟悉,事实上你会知道空间线性滤波器是卷积蒙版。但是matlab对应用线性空间滤波器的函数的默认值是相关性。我现在在文档中研究它!!!!!!!!!!!!! – sepideh

+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