31

MATLAB 中的“高斯”滤波器是否将图像与高斯核卷积?另外,如何选择参数 hsize(滤波器大小)和 sigma?你的依据是什么?

4

3 回答 3

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)
于 2010-05-05T13:37:16.653 回答
21

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

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

sigma 的选择很大程度上取决于您想要做什么。高斯平滑是低通滤波,这意味着它抑制了高频细节(噪声,还有边缘),同时保留了图像的低频部分(即变化不大的部分)。换句话说,过滤器会模糊所有小于过滤器的东西。

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

于 2010-05-05T16:55:55.457 回答
16

在 MATLAB R2015a 或更高版本中,不再需要(或从性能的角度来看建议)使用fspecial后跟,imfilter因为有一个新的函数调用imgaussfilt,它可以一步执行此操作并且更有效。

基本语法:

B = imgaussfilt(A,sigma)A使用 2-D 高斯平滑内核过滤图像,其标准偏差由sigma.

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

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

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

的附加功能imgaussfilter是对gpuArrays 进行操作、在频率或空间域中进行过滤以及高级图像填充选项的能力。它看起来很像 IPP……嗯。另外,还有一个 3D 版本,名为imgaussfilt3.

于 2015-03-06T22:01:27.000 回答