基于this question和this 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');
最佳答案
如果使用imfilter(I,fil,'same','conv')
,则它们是相同的。
不同之处在于,默认情况下,imfilter使用相关性对图像进行过滤,这之间存在一些细微差异-基本上,卷积从图像的一侧开始,而相关性则从另一侧开始,因此过滤器输出中存在一些细微的差异。如果先翻转图像,则会得到相同的输出:
out4=fliplr(flipud(imfilter(fliplr(flipud(I)),fil,'same')));
这完全等于out2。
关于matlab - 使用imfilter和conv2会得到不同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17368857/