我使用这两个函数来寻找比例尺上的边缘。您有一个输入图像,将掩膜(例如prewitt)应用于输入图像,并获得结果图片。
mypic = imread('examplepic.jpg')
hy = fspecial('prewitt')
yimfilter = imfilter(mypic,hy) % Using imfilter
yconv2 = conv2(mypic,hy) % Using conv2
这两者之间的理论差异是什么?我知道它们的输出不同,但它们之间的区别是什么?
谢谢
我使用这两个函数来寻找比例尺上的边缘。您有一个输入图像,将掩膜(例如prewitt)应用于输入图像,并获得结果图片。
mypic = imread('examplepic.jpg')
hy = fspecial('prewitt')
yimfilter = imfilter(mypic,hy) % Using imfilter
yconv2 = conv2(mypic,hy) % Using conv2
conv2输出整个二维卷积,这意味着yconv2将比mypic大。另一方面,默认情况下,imfilter修剪卷积的边缘,因此yimfilter应该与mypic大小相同。您可以使imfilter像conv2一样保留整个卷积,但这不是其默认行为。
还有其他区别:imfilter的“replicate”选项,imfilter可以在任意维度(而不仅仅是2)上执行卷积等等,但我认为您没有询问这些内容。
默认情况下,imfilter
使用相关性而不是卷积。如果您调用
yimfilter = imfilter(mypic,hy,'conv')
那么yconv2
和yimfilter
将是相同的。至于相关和卷积之间的区别,如果您使用1D卷积/相关掩模,您可以很容易地看到它。输出将是相同的,只是移动了一行/列(取决于掩模的方向)。
顺便说一下,如果您调用
yimfilter = imfilter(mypic,hy)
yfilter2 = filter2(hy,mypic)
你会发现 yimfilter
和 yfilter2
是一样的,因为 filter2
也使用相关性。