'imfilter'和'conv2'之间的差异[MATLAB]

时间:2011-10-26 22:01:11

标签: matlab edge-detection

我使用这两个函数来找到刻度上的边。你有一个输入图像,你将一个掩码(例如prewitt)应用到输入图像,并得到结果图片。

mypic = imread('examplepic.jpg')
hy = fspecial('prewitt')
yimfilter = imfilter(mypic,hy) % Using imfilter
yconv2 = conv2(mypic,hy) % Using conv2

这两者之间的理论差异是什么?我知道我有不同的输出,但这有什么区别?

由于

2 个答案:

答案 0 :(得分:9)

conv2输出整个二维卷积,这意味着yconv2将大于mypic。另一方面,imfilter默认修剪卷积的边缘,使yimfilter的大小与mypic相同。你可以让imfilter离开像conv2一样的整个卷积,但这不是它的默认行为。

还有其他不同之处:imfilter的“复制”选项,imfilter可以对任意数量的维度(不仅仅是2)进行卷积,依此类推,但我不认为你是在问这个问题。

答案 1 :(得分:0)

嗯,imfilter默认使用相关,而不是卷积。如果你打电话

yimfilter = imfilter(mypic,hy,'conv')

然后yconv2yimfilter将是相同的。至于相关和卷积之间的区别,如果你使用1D卷积/相关掩码,你很容易看到它。输出将是相同的,只是移动一行/列(取决于掩码的方向)。

顺便说一下,如果你打电话

yimfilter = imfilter(mypic,hy)
yfilter2 = filter2(hy,mypic)

您会发现yimfilteryfilter2相同,因为filter2也使用相关性。