MATLAB 中的“高斯”滤波器是否将图像与高斯核卷积?另外,如何选择参数 hsize(滤波器大小)和 sigma?你的依据是什么?
3 回答
您首先使用 fspecial 创建过滤器,然后使用imfilter将图像与过滤器进行卷积(如示例中所示,它适用于多维图像)。
您在 中指定sigma
和。hsize
fspecial
代码:
%%# 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)
@Jacob已经向您展示了如何在 Matlab 中使用高斯滤波器,所以我不会重复。
我会选择每个方向上的过滤器大小约为 3*sigma(四舍五入到奇数)。因此,过滤器在边缘处衰减到几乎为零,并且您不会在过滤后的图像中出现不连续性。
sigma 的选择很大程度上取决于您想要做什么。高斯平滑是低通滤波,这意味着它抑制了高频细节(噪声,还有边缘),同时保留了图像的低频部分(即变化不大的部分)。换句话说,过滤器会模糊所有小于过滤器的东西。
例如,如果您希望抑制图像中的噪声以增强对小特征的检测,我建议选择一个使高斯略小于特征的 sigma。
在 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
是对gpuArray
s 进行操作、在频率或空间域中进行过滤以及高级图像填充选项的能力。它看起来很像 IPP……嗯。另外,还有一个 3D 版本,名为imgaussfilt3
.