Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 高斯滤波器的正确实现_Matlab_Image Processing - Fatal编程技术网

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

我试图在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('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查看编辑,看看这是否解决了您的问题。