使用matlab代码 设计的自适应中值滤波器对输入图像进行去噪, 观察不同类型噪声的去噪效果。并只用一个程序实现
时间: 2024-03-26 19:34:04 浏览: 58
好的,以下是使用 MATLAB 代码实现自适应中值滤波器对不同类型噪声的图像进行去噪的示例代码:
```matlab
% 读取输入图片
img = imread('noisy_image.jpg');
% 添加高斯、盐和胡椒噪声
noisy_img_gaussian = imnoise(img, 'gaussian', 0, 0.05); % 标准差为 0.05 的高斯噪声
noisy_img_salt_pepper = imnoise(img, 'salt & pepper', 0.05); % 极性概率为 0.05 的盐和胡椒噪声
% 自适应中值滤波器去除噪声
filtered_img_gaussian = medfilt2(noisy_img_gaussian, [5 5]); % 对高斯噪声进行中值滤波
filtered_img_salt_pepper = adpmedian(noisy_img_salt_pepper, 5); % 对盐和胡椒噪声进行自适应中值滤波
% 显示原始图像和去噪后的图像
subplot(2,3,1),imshow(img),title('原始图像');
subplot(2,3,2),imshow(noisy_img_gaussian),title('高斯噪声图像');
subplot(2,3,3),imshow(filtered_img_gaussian),title('去噪后的高斯噪声图像');
subplot(2,3,5),imshow(noisy_img_salt_pepper),title('盐和胡椒噪声图像');
subplot(2,3,6),imshow(filtered_img_salt_pepper),title('去噪后的盐和胡椒噪声图像');
```
在上面的示例代码中,我们首先读取输入图像,然后使用 `imnoise` 函数添加高斯和盐和胡椒噪声。接着,我们使用 `medfilt2` 函数对高斯噪声进行中值滤波,使用 `adpmedian` 函数对盐和胡椒噪声进行自适应中值滤波。
在自适应中值滤波器中,我们需要指定一个局部窗口大小,来判断像素是否是噪声。如果一个像素值在该窗口内的像素值中最大值和最小值之间,那么就认为该像素不是噪声,否则就将其替换为该窗口内所有像素的中值。在上面的示例代码中,我们将窗口大小设置为 5。
最后,我们使用 `subplot` 函数将原始图像、噪声图像和去噪后的图像显示在同一张图中,方便对比和观察。
阅读全文