clc;
clear;
I=imread('lena256.bmp');
%imshow(I)
per=[0.1,0.3,0.4,0.5,0.6];
%per=[0.2];
for tr=1:length(per);
I1=imnoise(I,'salt & pepper',per(tr));
%imshow(I1)
%I1=imnoise(I,'gaussian',0,0.04) %添加均值为0,方差为0.02的高斯噪声。
%imshow(I1);
%figure,imshow(I1) %对滤波模板归一化。
J=medfilt2(I1); %用中值函数对图像滤波。
%figure,imshow(J,[]);
%ff(tr)=sum(sum(abs(J-I).^2))/(256*256);
J=double(J);
I2=double(I);
A=sum(sum((I2-J).^2))/(256*256);
psnr(tr)=10*log10((max(max(I2)).^2)/A);
end;
plot(per,psnr,'-x');
xlabel('噪声密度');
ylabel('峰值信噪比PSNR');
%legend('均值滤波','中值滤波');
hold on;
%title('平均绝对误差对比曲线');
J=double(J);
I=double(I);
A=sum(sum((I-J).^2))/(256*256);
psnr=10*log10((max(max(I)).^2)/A);