Matlab 高斯滤波器的正确实现
我试图在Matlab中实现高斯滤波器,我阅读了一些材料,其中有一些细微的差异: 一个是这样实现的:Matlab 高斯滤波器的正确实现,matlab,image-processing,Matlab,Image Processing,我试图在Matlab中实现高斯滤波器,我阅读了一些材料,其中有一些细微的差异: 一个是这样实现的: f = fspecial ('gaussian', 3); result = filter2(f,image); f = fspecial('gaussian',3); result = conv2(double(image),f); 其他实施方式如下: f = fspecial ('gaussian', 3); result = filter2(f,image); f = fspecial
f = fspecial ('gaussian', 3);
result = filter2(f,image);
f = fspecial('gaussian',3);
result = conv2(double(image),f);
其他实施方式如下:
f = fspecial ('gaussian', 3);
result = filter2(f,image);
f = fspecial('gaussian',3);
result = conv2(double(image),f);
这让我很困惑。谁能帮我找出哪个是正确的吗?谢谢他们都是。从以下算法的文档页面: 给定矩阵X和二维FIR滤波器h,filter2将滤波器矩阵旋转180度以创建卷积核。然后调用二维卷积函数conv2来实现滤波操作 因此,
filter2
将内核旋转180度。这不会产生不同的结果吗?让我们查看文档,了解它是如何生成高斯核的(我的重点):
h=f特殊('gaussian',hsize,sigma)返回大小为hsize且标准偏差为sigma(正)的旋转对称高斯低通滤波器。hsize可以是一个向量,指定h中的行数和列数,也可以是一个标量,在这种情况下,h是一个方阵。hsize的默认值为[3];西格玛的默认值为0.5。不推荐。改用imgaussfilt或imgaussfilt3
因此,fspecial
生成的内核是旋转对称的,将对称内核旋转180度没有效果,因此两者是相同的
如果您创建了自己的非对称内核,那么这两个操作将产生不同的结果。我还想指出,
filter2
和conv2
之间的主要区别是filter2
执行相关,而conv2
执行实际卷积conv2
本机将内核旋转180度,因此通过filter2
在conv2
之前执行额外的180度旋转,内核方向保持不变,因此filter2
执行相关。但如果情况是image=[0 3 5 6]和kernel=[2 3]。所以如果我想把高斯分布应用到这个例子中。哪种方法正确?我认为在这种情况下旋转内核会产生不同的结果。@computerluv查看编辑,看看这是否解决了您的问题。