matlab创建一个函数,可以向PGM图像添加(i)盐和胡椒的噪声和(ii)高斯噪声,并计算PSNR和MSE。将结果显示在方框内,并在方框内写下比较原始图像和被破坏图像的MSE和PSNR值。
时间: 2024-03-03 19:51:42 浏览: 62
MATLAB.rar_图像增强 matlab_图片增强_椒盐_高斯 椒盐_高斯噪声
以下是一个可以实现题目要求的matlab函数:
```matlab
function [noisy_img, MSE, PSNR] = add_noise_and_compute_PSNR_MSE(img_path, noise_type, noise_params)
% 读取PGM图像
img = imread(img_path);
% 将灰度图像转换为双精度型
img = im2double(img);
% 加噪声
switch noise_type
case 'salt & pepper'
noisy_img = imnoise(img, 'salt & pepper', noise_params);
case 'gaussian'
noisy_img = imnoise(img, 'gaussian', 0, noise_params);
end
% 计算MSE
MSE = mean(mean((img - noisy_img).^2));
% 计算PSNR
max_pixel_value = 1;
PSNR = 10 * log10(max_pixel_value^2 / MSE);
% 显示图像和评价指标
subplot(1,2,1);
imshow(img);
title('Original Image');
text(10,20, ['MSE: ' num2str(0) ' PSNR: ' num2str(Inf)], 'Color', 'y');
subplot(1,2,2);
imshow(noisy_img);
title(['Noisy Image (' noise_type ' noise)']);
text(10,20, ['MSE: ' num2str(MSE) ' PSNR: ' num2str(PSNR)], 'Color', 'y');
end
```
这个函数接受三个参数:图像文件路径img_path、噪声类型noise_type和噪声参数noise_params。噪声类型可以是'salt & pepper'(盐和胡椒噪声)或'gaussian'(高斯噪声),噪声参数取决于噪声类型。例如,对于盐和胡椒噪声,noise_params是一个介于0和1之间的数,表示噪声比例(即在图像中添加多少盐和胡椒噪声)。对于高斯噪声,noise_params是一个介于0和1之间的数,表示噪声的标准差。
该函数首先读取指定的PGM图像,将其转换为双精度型,并使用imnoise函数向图像添加指定类型和参数的噪声。然后计算添加噪声后的图像和原始图像之间的MSE和PSNR,并使用subplot函数将两个图像和评价指标显示在同一张图中。
在函数中,如果噪声类型为盐和胡椒噪声,那么添加噪声的代码行为:
noisy_img = imnoise(img, 'salt & pepper', noise_params);
如果噪声类型为高斯噪声,那么添加噪声的代码行为:
noisy_img = imnoise(img, 'gaussian', 0, noise_params);
例如,要向名为'lena.pgm'的图像添加0.05的盐和胡椒噪声并计算PSNR和MSE,可以执行以下命令:
```matlab
[noisy_img, MSE, PSNR] = add_noise_and_compute_PSNR_MSE('lena.pgm', 'salt & pepper', 0.05);
```
要向同一张图像添加标准差为0.1的高斯噪声并计算PSNR和MSE,可以执行以下命令:
```matlab
[noisy_img, MSE, PSNR] = add_noise_and_compute_PSNR_MSE('lena.pgm', 'gaussian', 0.1);
```
阅读全文