MATLAB中的高斯滤波器

时间:2010-05-05 13:30:57

标签: matlab image-processing filtering gaussian

MATLAB中的'高斯'滤波器是否用高斯内核卷积图像?另外,你如何选择参数hsize(过滤器的大小)和sigma?你的基础是什么?

3 个答案:

答案 0 :(得分:55)

首先使用fspecial创建过滤器,然后使用imfilter将图像与过滤器进行卷积(对于多维图像,如示例所示)。

您在sigma中指定了hsizefspecial

代码:

%%# Read an image
I = imread('peppers.png');
%# Create the gaussian filter with hsize = [5 5] and sigma = 2
G = fspecial('gaussian',[5 5],2);
%# Filter it
Ig = imfilter(I,G,'same');
%# Display
imshow(Ig)

答案 1 :(得分:21)

@Jacob已经向您展示了如何在Matlab中使用高斯滤波器,所以我不再重复了。

我会选择滤波器大小在每个方向上约为3 * sigma(舍入到奇数)。因此,滤波器在边缘衰减到接近零,并且您不会在滤波后的图像中出现不连续性。

西格玛的选择很大程度上取决于你想做什么。高斯平滑是低通滤波,这意味着它抑制了高频细节(噪声,但也抑制了边缘),同时保留了图像的低频部分(即那些变化不大的部分)。换句话说,滤镜会模糊小于滤镜的所有内容。

如果您希望抑制图像中的噪声以增强对小特征的检测,例如,我建议选择使高斯仅略小于特征的sigma。

答案 2 :(得分:14)

在MATLAB R2015a或更新版本中,不再需要(或从性能角度来看)使用fspecial后跟imfilter,因为有一个名为imgaussfilt的新函数执行这个操作一步到位,效率更高。

基本语法:

  

B = imgaussfilt(A,sigma)使用由A指定的标准偏差的二维高斯平滑内核过滤图像sigma

自动选择给定高斯标准差(sigam)的滤波器大小,但也可以手动指定:

B = imgaussfilt(A,sigma,'FilterSize',[3 3]);

默认值为2*ceil(2*sigma)+1

imgaussfilter的其他功能是能够在gpuArray上操作,在频域或空间域中进行过滤,以及高级图像填充选项。它看起来很像IPP ......嗯。另外,还有一个名为imgaussfilt3的3D版本。