MATLAB中有哪些不同类型的去噪滤波器?


在MATLAB中,去噪滤波器是一种可以减少或去除数字图像或数字信号中噪声的工具。众所周知,噪声是数字信号中不需要的信号或干扰,它会影响信号质量或导致信号处理中的错误。因此,需要去除或减少信号或图像中的噪声。这可以通过去噪滤波器来实现。

在本教程中,我们将探讨MATLAB中几种不同类型的去噪滤波器,并使用MATLAB编程实现它们。

MATLAB中去噪滤波器的类型

MATLAB 提供各种类型的去噪滤波器,以减少或去除数字信号或图像中的不同类型的噪声和干扰。一些常用的去噪滤波器如下:

  • 中值滤波器 - 中值滤波器通过用图像中附近像素的中值替换每个像素来减少噪声。中值滤波器在减少或去除图像中的椒盐噪声方面非常有效。

  • 高斯滤波器 - 此滤波器使用卷积运算去除图像中的噪声。它可以去除图像中的高斯噪声以使其平滑。

  • 维纳滤波器 - 这是一种自适应滤波器,用于减少真实信号和估计信号之间的均方误差。当已知噪声统计信息时,使用此滤波器。

在MATLAB中应用去噪滤波器的过程

在MATLAB中,我们可以按照以下步骤将去噪滤波器应用于图像以减少或去除噪声:

  • 步骤(1) - 读取噪声图像或信号。

  • 步骤(2) - 将输入图像转换为灰度以应用滤波器。

  • 步骤(3) - 根据噪声特性选择合适的去噪滤波器。

  • 步骤(4) - 将噪声滤波器应用于输入图像。

  • 步骤(5) - 显示结果。

现在,让我们讨论在MATLAB中上述三种去噪滤波器的实现。

(1). MATLAB中的中值滤波器

中值滤波器通过用其相邻像素的中值替换每个像素值来对数字信号或图像进行去噪。这种类型的滤波器在减少或去除信号或图像中的椒盐噪声方面非常有效。

语法

可以使用MATLAB的内置函数“medfilt2”应用此滤波器。“medilt2”的语法如下:

filtered_img = medfilt2(noisy_image, window_size);

下面的MATLAB程序演示了中值滤波器去除图像噪声的实现。

Matlab示例(1)

% MATLAB code for implementing median filter
% Read the noisy input image
img = imread('https://tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');

% Convert the image to grayscale
gray_img = rgb2gray(img);

% Apply the median filter to the noisy image 
filtered_img = medfilt2(gray_img, [3, 3]);

% Display the noisy image and filtered image
subplot(1, 2, 1), imshow(gray_img), title('Noisy Image');
subplot(1, 2, 2), imshow(filtered_img), title('Filtered Image');

输出

解释

在这个MATLAB代码中,我们首先使用“imread”函数读取噪声图像并将其存储在变量“img”中。然后,我们使用“rgb2gray”函数将输入的RGB图像转换为灰度图像,以便对其应用滤波器。接下来,我们将中值滤波器应用于灰度图像以去除噪声,并将结果存储在变量“filtered_img”中。最后,我们使用“imshow”函数显示输入的噪声图像和滤波后的图像。

(2). MATLAB中的高斯滤波器

高斯滤波器是另一种用于去除高斯噪声同时平滑数字图像的去噪滤波器。此滤波器使用高斯核来应用卷积运算以去除图像中的噪声。

语法

在MATLAB中,我们可以使用“imgaussfilt”函数将高斯滤波器应用于图像。此函数具有以下语法:

filtered_img = imgaussfilt(noisy_img, std_deviation);

Matlab示例(2)

下面的MATLAB程序演示了如何实现高斯滤波器以去除图像中的噪声。

% MATLAB code for implementing Gaussian filter
% Read the noisy input image
img = imread('https://tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');

% Convert the image to grayscale
gray_img = rgb2gray(img);

% Apply the Gaussian filter to the noisy image 
filtered_img = imgaussfilt(gray_img, 1);

% Display the noisy image and filtered image
subplot(1, 2, 1), imshow(gray_img), title('Noisy Image');
subplot(1, 2, 2), imshow(filtered_img), title('Filtered Image');

输出

解释

在这个MATLAB代码中,我们首先使用“imread”函数读取噪声图像并将其存储在变量“img”中。然后,我们使用“rgb2gray”函数将输入的RGB图像转换为灰度图像,以便对其应用滤波器。之后,我们将高斯滤波器应用于灰度图像以去除高斯噪声,并将结果存储在变量“filtered_img”中。最后,我们使用“imshow”函数显示噪声图像和滤波后的图像。

(3). MATLAB中的维纳滤波器

在MATLAB中,维纳滤波器是一种用于减少数字信号或图像中噪声的自适应滤波器。此滤波器通过最小化真实信号和估计信号之间的均方误差来执行图像或信号的去噪。

语法

要应用维纳滤波器,我们在图像中使用“wiener2”函数。此函数具有以下语法:

filtered_img = wiener2(noisy_img, window_size, noise_power);

此处,噪声功率使用以下表达式估算:

noise_power = abs(fft2(noisy_img)).^2 / numel(noisy_img);

Matlab示例(3)

现在,让我们看看MATLAB中维纳滤波器的实现。

% MATLAB code for implementing wiener filter
% Read the noisy input image
img = imread('https://tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');

% Convert the image to grayscale
gray_img = rgb2gray(img);

% Estimate the noise power for the given image
noise_power = abs(fft2(gray_img)).^2 / numel(gray_img);

% Apply the wiener filter to the noisy image 
filtered_img = wiener2(gray_img, [3, 3], noise_power);

% Display the noisy image and filtered image
subplot(1, 2, 1), imshow(gray_img), title('Noisy Image');
subplot(1, 2, 2), imshow(filtered_img), title('Filtered Image');

输出

解释

在这个MATLAB程序中,我们首先使用“imread”函数读取噪声图像。然后,我们使用“rgb2gray”函数将输入的RGB图像转换为灰度图像,以便应用滤波器。接下来,我们将维纳滤波器应用于灰度图像以去除噪声。最后,我们使用“imshow”函数显示噪声图像和滤波后的图像。

结论

这就是MATLAB中用于减少或去除数字信号和图像中噪声的不同类型的去噪滤波器。在本教程中,我们介绍了三种最常用的去噪滤波器,即“中值滤波器”、“高斯滤波器”和“维纳滤波器”,并解释了它们在MATLAB编程中的实现。您可以使用上述MATLAB代码尝试处理您自己的噪声图像,以查看其功能。

更新于:2023年9月6日

195 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.