用matlab编写一段代码,利用一个低通模板对一幅有噪图象(GAUSS白噪声)进行滤波(原图像可选lena.bmp、saturn.tif、pout.tif等),检验两种滤波模板(分别使用一个5×5的线性邻域平均模板和一个非线性模板:3×5中值滤波器)对噪声的滤波效果。
时间: 2024-02-17 19:05:05 浏览: 169
好的,以下是MATLAB代码,实现了您所要求的功能:
```matlab
% 载入图像
img = imread('lena.bmp'); % 也可以选择其他图片
imshow(img);
title('原图');
% 添加高斯白噪声
noise_img = imnoise(img, 'gaussian', 0, 0.01);
figure;
imshow(noise_img);
title('加噪图');
% 定义滤波器
avg_filter = fspecial('average', [5, 5]);
median_filter = fspecial('median', [3, 5]);
% 应用滤波器
avg_filtered_img = imfilter(noise_img, avg_filter);
median_filtered_img = imfilter(noise_img, median_filter);
% 显示滤波后的图像
figure;
imshow(avg_filtered_img);
title('线性邻域平均滤波');
figure;
imshow(median_filtered_img);
title('非线性中值滤波');
% 计算图像质量评估指标
psnr_avg = psnr(avg_filtered_img, img);
ssim_avg = ssim(avg_filtered_img, img);
psnr_median = psnr(median_filtered_img, img);
ssim_median = ssim(median_filtered_img, img);
% 输出结果
fprintf('线性邻域平均滤波的PSNR值为%.2f,SSIM值为%.4f\n', psnr_avg, ssim_avg);
fprintf('非线性中值滤波的PSNR值为%.2f,SSIM值为%.4f\n', psnr_median, ssim_median);
```
注意:这段代码假设源图像是灰度图像,而不是彩色图像。如果您选择的是彩色图像,则需要将其转换为灰度图像。
阅读全文