您的位置:

matlab添加高斯噪声

一、高斯噪声介绍

高斯噪声是指在傅里叶变换下呈现高斯性质的噪声,又被称为白噪声,是自然、社会科学和其他领域中最常见的一种随机噪声。在数字信号处理中,高斯噪声是模拟信号转为数字信号时产生的噪声信号,由于其特定的统计特性被广泛地应用于数字图像处理领域中。

在matlab中,我们可以使用内置函数“imnoise”来为图像添加高斯噪声。

二、imnoise添加高斯噪声

以下是示例代码,演示如何使用imnoise添加高斯噪声:


% 载入原始图像
I = imread('lena.tif');

% 添加高斯噪声
J = imnoise(I,'gaussian',0,0.025);

% 显示原始图像和添加噪声后的图像
subplot(1,2,1), imshow(I), title('Original image');
subplot(1,2,2), imshow(J), title('Image with Gaussian noise');

imnoise函数调用格式为:

J = imnoise(I,'gaussian',m,n)
其中I表示原始图像,在此例中为'lena.tif'。'gaussian'表示添加的噪声类型为高斯噪声。m和n分别表示噪声的均值和方差。在此例中,均值为0,方差为0.025。

三、自定义高斯噪声

如果要自定义高斯噪声,可以使用一些基本的数学和matlab函数。下面是一个示例代码,演示如何自定义高斯噪声:


% 载入原始图像
I = imread('lena.tif');

% 定义均值和方差
m = 0;
v = 0.025;

% 计算噪声
G = m + sqrt(v)*randn(size(I));

% 将噪声添加到图像中
J = im2double(I) + G;

% 显示原始图像和添加自定义高斯噪声后的图像
subplot(1,2,1), imshow(I), title('Original image');
subplot(1,2,2), imshow(J), title('Image with custom Gaussian noise');

在此示例中,我们使用randn函数生成一个与原始图像相同尺寸的高斯分布的噪声G。然后,我们将噪声添加到原始图像的亮度值中,通过im2double函数将原始图像转换为double类型,以便进行数学运算。

四、高斯噪声的去噪

在数字图像处理中,去噪是一个重要的步骤。matlab中提供了许多去噪函数,可以使用这些函数减少高斯噪声。以下是一些常用的去噪函数:

1) medfilt2:中值滤波器使用方形掩模计算每个像素的中值,以减少高斯噪声。以下是示例代码:


% 载入原始图像和添加噪声后的图像
I = imread('lena.tif');
J = imnoise(I,'gaussian',0,0.025);

% 使用中值滤波器进行去噪
K = medfilt2(J,[3 3]);

% 显示原始图像、添加噪声后图像、去噪后图像
subplot(1,3,1), imshow(I), title('Original image');
subplot(1,3,2), imshow(J), title('Image with Gaussian noise');
subplot(1,3,3), imshow(K), title('Denoised image with median filter');

medfilt2使用方式如下:

K = medfilt2(J,[m n])
其中J为需要去噪的图像,[m n]为掩模大小。

2) wiener2:维纳滤波器是一种线性滤波器,用于消除图像的噪声。以下是示例代码:


% 载入原始图像和添加噪声后的图像
I = imread('lena.tif');
J = imnoise(I,'gaussian',0,0.025);

% 使用维纳滤波器进行去噪
K = wiener2(J,[5 5]);

% 显示原始图像、添加噪声后图像、去噪后图像
subplot(1,3,1), imshow(I), title('Original image');
subplot(1,3,2), imshow(J), title('Image with Gaussian noise');
subplot(1,3,3), imshow(K), title('Denoised image with Wiener filter');

wiener2使用方式如下:

K = wiener2(J,[m n])
其中J为需要去噪的图像,[m n]为PSF大小(即点扩散函数)。

五、总结

在本文中,我们简单介绍了高斯噪声,并演示了如何在matlab中添加和去除图像中的高斯噪声。使用imnoise函数可以通过调整不同的参数来模拟各种强度和类型的高斯噪声。同时,我们也介绍了一些matlab内置的去噪函数,包括中值滤波器和维纳滤波器,以减少高斯噪声。