用matlab对一幅图像加上高斯噪声后,分别采用中值滤波、自适应滤波和平滑滤波三 种方法对其进行滤波,并比较滤波后结果。
时间: 2023-11-09 17:07:55 浏览: 95
这是一个比较常见的图像处理问题。下面我将给出一种MATLAB代码实现方法,供您参考。
首先,我们需要读入一幅图像并加上高斯噪声。假设我们要处理的图像为“lena.png”,可以使用以下代码进行读取和添加高斯噪声:
```matlab
% 读入图像
im = imread('lena.png');
% 加入高斯噪声
im_noise = imnoise(im, 'gaussian', 0, 0.01);
```
接下来,我们分别采用中值滤波、自适应滤波和平滑滤波三种方法对图像进行滤波。具体实现如下:
```matlab
% 中值滤波
im_med = medfilt2(im_noise, [3 3]);
% 自适应滤波
im_adp = adapthisteq(im_noise);
% 平滑滤波
h = fspecial('average', [3 3]);
im_smooth = imfilter(im_noise, h);
```
其中,中值滤波使用`medfilt2`函数实现,自适应滤波使用`adapthisteq`函数实现,平滑滤波使用`fspecial`和`imfilter`函数实现。
最后,我们将滤波前后的图像进行可视化比较。具体实现如下:
```matlab
% 可视化比较
subplot(2, 2, 1), imshow(im), title('原图');
subplot(2, 2, 2), imshow(im_noise), title('加噪图');
subplot(2, 2, 3), imshow(im_med), title('中值滤波');
subplot(2, 2, 4), imshow(im_adp), title('自适应滤波');
```
这里我们将四个图像排成2x2的矩阵,依次显示原图、加噪图、中值滤波后的图像和自适应滤波后的图像。你可以根据自己的需求进行修改。
最终的完整代码如下:
```matlab
% 读入图像
im = imread('lena.png');
% 加入高斯噪声
im_noise = imnoise(im, 'gaussian', 0, 0.01);
% 中值滤波
im_med = medfilt2(im_noise, [3 3]);
% 自适应滤波
im_adp = adapthisteq(im_noise);
% 平滑滤波
h = fspecial('average', [3 3]);
im_smooth = imfilter(im_noise, h);
% 可视化比较
subplot(2, 2, 1), imshow(im), title('原图');
subplot(2, 2, 2), imshow(im_noise), title('加噪图');
subplot(2, 2, 3), imshow(im_med), title('中值滤波');
subplot(2, 2, 4), imshow(im_adp), title('自适应滤波');
```
希望这个例子对您有所帮助!
阅读全文