与x27之间的差异;imfilter&x27;和';conv2&x27;[MATLAB]

与x27之间的差异;imfilter&x27;和';conv2&x27;[MATLAB],matlab,edge-detection,Matlab,Edge Detection,我使用这两个函数来查找比例上的边。您有一个输入图像,您将一个掩码(例如prewitt)应用于输入图像,并获得结果图片 mypic = imread('examplepic.jpg') hy = fspecial('prewitt') yimfilter = imfilter(mypic,hy) % Using imfilter yconv2 = conv2(mypic,hy) % Using conv2 这两者在理论上的区别是什么?我知道我得到了不同的输出,但区别是什么 多亏了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的“复制”选项,imfilter可以对任意数量的维度进行卷积(不仅仅是2个维度),等等,但我认为你没有问过这个问题。

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

yimfilter = imfilter(mypic,hy,'conv')
yimfilter = imfilter(mypic,hy)
yfilter2 = filter2(hy,mypic)
然后,
yconv2
yimfilter
将是相同的。至于相关和卷积之间的区别,如果你使用一维卷积/相关掩模,你可以很容易地看到。输出将是相同的,只是移动了行/列(取决于掩码的方向)

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

yimfilter = imfilter(mypic,hy,'conv')
yimfilter = imfilter(mypic,hy)
yfilter2 = filter2(hy,mypic)
您会发现
yimfilter
yfilter2
是相同的,因为
filter2
也使用相关性