MATLAB中'imfilter'和'conv2'的区别

4

我使用这两个函数来寻找比例尺上的边缘。您有一个输入图像,将掩膜(例如prewitt)应用于输入图像,并获得结果图片。

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

这两者之间的理论差异是什么?我知道它们的输出不同,但它们之间的区别是什么?
谢谢
2个回答

9

conv2输出整个二维卷积,这意味着yconv2将比mypic大。另一方面,默认情况下,imfilter修剪卷积的边缘,因此yimfilter应该与mypic大小相同。您可以使imfilter像conv2一样保留整个卷积,但这不是其默认行为。

还有其他区别:imfilter的“replicate”选项,imfilter可以在任意维度(而不仅仅是2)上执行卷积等等,但我认为您没有询问这些内容。


0

默认情况下,imfilter使用相关性而不是卷积。如果您调用

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

那么yconv2yimfilter将是相同的。至于相关和卷积之间的区别,如果您使用1D卷积/相关掩模,您可以很容易地看到它。输出将是相同的,只是移动了一行/列(取决于掩模的方向)。

顺便说一下,如果您调用

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

你会发现 yimfilteryfilter2 是一样的,因为 filter2 也使用相关性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接