MATLAB中的高斯滤波器

Posted

技术标签:

【中文标题】MATLAB中的高斯滤波器【英文标题】:Gaussian filter in MATLAB 【发布时间】:2011-02-15 22:43:18 【问题描述】:

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

【问题讨论】:

另见:***.com/questions/2771114 【参考方案1】:

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

您在fspecial 中指定sigmahsize

代码:

%%# 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)

【讨论】:

您能否详细说明 Ig = imfilter(I,G,'same'); 中的“相同”是什么意思?【参考方案2】:

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

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

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

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

【讨论】:

不确定这方面的礼仪是什么,但我对您的回答有疑问 - 您如何根据 sigma 判断过滤器的“大小”?你能以某种方式根据 sigma 值获得过滤器的维度吗?我认为过滤器大小实际上是函数的第一个参数(上面帖子中的 5x5)? @hatorade:“大小”不是指维度,而是面具的大小。 IE。是选择[5 5]还是[7 7]。【参考方案3】:

在 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 的其他功能包括在gpuArrays 上运行、在频域或空间域中进行过滤以及高级图像填充选项的能力。它看起来很像 IPP……嗯。此外,还有一个名为imgaussfilt3 的 3D 版本。

【讨论】:

我对非常​​幼稚的事情感到困惑。您能否澄清一下:我们在 Matlab 中使用的高斯滤波器在技术上是为低通滤波设计的实际高斯滤波器的逆傅立叶吗? 这是截至 2018 年 9 月的最新答案 您不必使用数组[3 3] 来指定方形过滤器。您可以简单地使用3。当过滤器没有平方时使用数组表示法。

以上是关于MATLAB中的高斯滤波器的主要内容,如果未能解决你的问题,请参考以下文章

信号图像Matlab如何得到高斯滤波器的整数模板

信号处理高斯滤波器matlab源码

图像滤波图像二维双边高斯滤波matlab源码

MATLAB教程案例22基于MATLAB图像去噪算法仿真——中值滤波高斯滤波以及频域滤波等

在matlab中使用高斯滤波器进行图像去模糊,没有加性噪声

信号图像Matlab如何得到高斯滤波器的整数模板