使用matlab对一幅图像加上高斯噪声后,分别采用中值滤波、自适应滤波和平滑滤波三 种方法对其进行滤波,并比较滤波后结果。
时间: 2023-11-08 16:05:32 浏览: 84
首先,我们可以使用以下代码在 MATLAB 中为一张图像添加高斯噪声:
```matlab
img = imread('image.png'); % 读取图像
noise = randn(size(img)) .* 25; % 生成高斯噪声
noisy_img = img + uint8(noise); % 添加噪声并将图像转换为整数类型
```
这里我们假设噪声的标准差为25。然后,我们可以使用以下代码分别对噪声图像进行中值滤波、自适应滤波和平滑滤波:
```matlab
% 中值滤波
med_img = medfilt2(noisy_img);
% 自适应滤波
adap_img = wiener2(noisy_img, [5 5]);
% 平滑滤波
h = fspecial('average', [5 5]);
smooth_img = imfilter(noisy_img, h);
```
这里我们使用了 MATLAB 自带的中值滤波函数 `medfilt2`、自适应滤波函数 `wiener2` 和平滑滤波函数 `imfilter`。其中,自适应滤波函数 `wiener2` 的第二个参数是一个大小为 `[M N]` 的数组,用于指定滤波器的大小。平滑滤波函数 `imfilter` 使用了一个大小为 `[5 5]` 的均值滤波器。
最后,我们可以使用以下代码将原图像、噪声图像和三种滤波后的图像显示在同一张图上,以便比较它们的效果:
```matlab
subplot(2, 3, 1); imshow(img); title('原图像');
subplot(2, 3, 2); imshow(noisy_img); title('噪声图像');
subplot(2, 3, 3); imshow(med_img); title('中值滤波');
subplot(2, 3, 4); imshow(adap_img); title('自适应滤波');
subplot(2, 3, 5); imshow(smooth_img); title('平滑滤波');
```
这里我们使用了 MATLAB 自带的 `subplot` 函数,可以将多个图像显示在同一张图上。
最终的代码如下:
```matlab
% 读取图像并添加高斯噪声
img = imread('image.png');
noise = randn(size(img)) .* 25;
noisy_img = img + uint8(noise);
% 中值滤波
med_img = medfilt2(noisy_img);
% 自适应滤波
adap_img = wiener2(noisy_img, [5 5]);
% 平滑滤波
h = fspecial('average', [5 5]);
smooth_img = imfilter(noisy_img, h);
% 显示原图像、噪声图像和三种滤波后的图像
subplot(2, 3, 1); imshow(img); title('原图像');
subplot(2, 3, 2); imshow(noisy_img); title('噪声图像');
subplot(2, 3, 3); imshow(med_img); title('中值滤波');
subplot(2, 3, 4); imshow(adap_img); title('自适应滤波');
subplot(2, 3, 5); imshow(smooth_img); title('平滑滤波');
```