使用 MATLAB 进行数字图像处理中的去噪技术

matlabdata analysisprogramming

在数字图像处理中,去噪是减少或去除数字图像中不需要的噪声的过程。此过程的主要目的是提高图像的视觉质量。

在讨论数字图像处理中的不同去噪技术之前,让我们首先概述一下去噪的基础知识。

数字图像处理中的去噪是什么?

在数字图像中,任何不需要的变化都称为噪声。数字图像中的噪声可能由于各种原因而产生,例如环境条件、硬件故障、传输错误等。从图像中去除这种不需要的噪声的过程称为去噪

  • 去噪主要用于提高数字图像的视觉质量。去噪使数字图像可以进行分析和显示。

  • 一种有效的去噪技术是保留图像所有重要特征同时减少不需要的噪声的技术。

  • 在数字图像中,可能存在不同类型的噪声,例如高斯噪声、椒 salt 噪声、斑点噪声等。要去除特定类型的噪声,需要使用特定的去噪技术。

现在让我们讨论使用 MATLAB 进行数字图像处理时不同类型的去噪技术。

使用 MATLAB 进行数字图像处理时去噪技术

MATLAB 提供了各种类型的去噪技术来去除或减少数字图像中不需要的噪声。下面借助 MATLAB 中的示例,解释数字图像处理中一些常用的去噪技术。

使用中值滤波器去噪

中值滤波器被认为是数字图像处理中最简单的去噪技术。该技术用于减少或消除数字图像中的椒 salt 噪声。

在 MATLAB 中,"medfilt2()"函数用于将中值滤波器应用于图像。

语法

denoised_img = medfilt2(noisy_img, filter_size);

下面将逐步解释使用中值滤波器对图像进行去噪的过程。

  • 步骤 (1) - 使用"imread"函数读取噪声图像。

  • 步骤 (2) - 使用"rgb2gray"函数将输入的噪声图像转换为灰度图像。

  • 步骤 (3) - 使用"medfilt2()"函数通过中值滤波器进行去噪。

  • 步骤 (4) - 使用"imshow"函数显示去噪图像。

示例

让我们看一个例子来了解这些步骤在 MATLAB 中的实现 -

% 使用中值滤波器执行去噪的 MATLAB 代码
% 读取噪声图像
noisy_img = imread('noisy_image.jpg'); % 将 URL 替换为噪声图像

% 必要时将输入图像转换为灰度
gray_img = rgb2gray(noisy_img);

% 使用中值滤波器执行去噪
denoised_img = medfilt2(gray_img, [3, 3]);

% 显示噪声图像和去噪图像
figure;
subplot(1, 2, 1);
imshow(gray_img);
title('Noisy Image');

subplot(1, 2, 2);
imshow(denoised_img);
title('Denoised Image');

输出

运行此代码时,它将产生以下输出

使用高斯滤波器去噪

在数字图像处理中,高斯滤波是另一种常用的去噪技术。此去噪技术用于去除数字图像中的高斯噪声。

要将高斯滤波器应用于数字图像,我们使用 MATLAB 中的"imgaussfilt"函数。

语法

denoised_img = imgaussfilt(noisy_img, standard_deviation);

在 MATLAB 中使用高斯滤波器对图像进行去噪涉及以下步骤。

  • 步骤 (1) - 使用"imread"函数读取噪声图像。

  • 步骤 (2) - 如果需要,将输入图像转换为灰度。

  • 步骤 (3) - 使用高斯滤波器执行去噪。

  • 步骤 (4) - 使用"imshow"函数显示去噪图像。

示例

让我们在 MATLAB 中举一个例子来了解使用高斯滤波器进行去噪 -

% MATLAB 代码使用高斯滤波器进行去噪
% 读取噪声图像
noisy_img = imread('noisy_image.jpg'); % 用噪声图像替换 URL

% 必要时将输入图像转换为灰度
gray_img = rgb2gray(noisy_img);

% 使用中值滤波器进行去噪
sigma = 2; % 根据噪声特征调整标准偏差
denoised_img = imgaussfilt(gray_img, sigma);

% 显示噪声图像和去噪图像
figure;
subplot(1, 2, 1);
imshow(gray_img);
title('噪声图像');

subplot(1, 2, 2);
imshow(denoised_img);
title('去噪图像');

输出

运行此代码时,它将生成以下输出

使用维纳滤波器去噪

在数字图像处理中,还有另一种名为"维纳滤波器"的去噪技术,用于去除图像中的噪声。它是一种基于反卷积的去噪技术。

在 MATLAB 中,有一个内置函数"wiener2",用于通过维纳滤波执行去噪。

语法

denoised_img = wiener2(noisy_img, filterSize);

通过维纳滤波器去噪所涉及的步骤与上述技术相同。

示例

以下是使用 MATLAB 中的维纳滤波器进行去噪的示例 -

% 使用维纳滤波器执行去噪的 MATLAB 代码
% 读取噪声图像
noisy_img = imread('noisy_image.jpg');

% 将输入图像转换为灰度
gray_img = rgb2gray(noisy_img);

% 使用维纳滤波器执行去噪
denoised_img = wiener2(gray_img, [5, 5]);

% 显示噪声和去噪图像
figure;
subplot(1, 2, 1);
imshow(gray_img);
title('噪声图像');

subplot(1, 2, 2);
imshow(denoised_img);
title('去噪图像');

输出

运行此代码时,将产生以下输出

非局部均值 (NLM) 去噪技术

在数字图像处理中,有一种名为非局部均值 (NLM) 的去噪技术,可用于去除图像中不需要的噪声。这种去噪技术可以有效地保留图像细节,同时减少图像中不必要的噪声。

在 MATLAB 中,我们可以使用"imnlmfilt"函数通过 NLM 技术进行去噪。

语法

denoised_img = imnlmfilt(noisy_img, 'DegreeOfSmoothing', value, 'SearchWindowSize', WindowSize);

此处,参数"DegreeOfSmoothing"控制降噪期间的平滑度,参数"SearchWindowSize"指定过滤窗口的大小。

示例

以下示例展示了通过非局部均值去噪技术进行去噪所涉及的步骤。

% 使用 NLM 技术执行去噪的 MATLAB 代码
% 读取噪声图像
noisy_img = imread('Noisy_Image.jpg');

% 将输入图像转换为灰度
gray_img = rgb2gray(noisy_img);

% 使用非局部均值 (NLM) 执行去噪
denoised_img = imnlmfilt(gray_img, 'DegreeOfSmoothing', 30, 'SearchWindowSize', 11);

% 显示噪声和去噪图像
subplot(1, 2, 1);
imshow(gray_img);
title('噪声图像');

subplot(1, 2, 2);
imshow(denoised_img);
title('去噪图像');

输出

运行此代码时,它将生成以下输出

结论

总之,去噪意味着从数字图像中去除不需要的部分。在 MATLAB 中,我们有不同类型的去噪技术。在本教程中,我借助示例解释了使用 MATLAB 在数字图像处理中所有常用的去噪技术。


相关文章