基于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');
答案 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
相同的结果。