自编了一个5*5模板的中值滤波处理图像的程序。算出来的信噪比SNR为什么是1? %**********************************% %*****传统中值滤波算法的一种实现*****% %**********************************% clc,clear; I0=imread('camera.jpg'); I0=rgb2gray(I0); I=imnoise(I0,'salt & pepper',0.02); figure(1),imshow(I0);title('原始图像'); figure(2),imshow(I);title('加了椒盐噪声的图像'); f1=I; [m,n]=size(I); Muban=zeros(1,25);%采用了5*5模板进行中值滤波 for i =3:m-2 for j =3:n-2 k=1;Muban(1,k)=I(i,j); k=2;Muban(1,k)=I(i,j-1); k=3;Muban(1,k)=I(i,j-2); k=4;Muban(1,k)=I(i,j+1); k=5;Muban(1,k)=I(i,j+2); k=6;Muban(1,k)=I(i-1,j); k=7;Muban(1,k)=I(i-1,j-1); k=8;Muban(1,k)=I(i-1,j-2); k=9;Muban(1,k)=I(i-1,j+1); k=10;Muban(1,k)=I(i-1,j+2); k=11;Muban(1,k)=I(i-2,j); k=12;Muban(1,k)=I(i-2,j-1); k=13;Muban(1,k)=I(i-2,j-2); k=14;Muban(1,k)=I(i-2,j+1); k=15;Muban(1,k)=I(i-2,1+2); k=16;Muban(1,k)=I(i+1,j); k=17;Muban(1,k)=I(i+1,j-1); k=18;Muban(1,k)=I(i+1,j-2); k=19;Muban(1,k)=I(i+1,j+1); k=20;Muban(1,k)=I(i+1,j+2); k=21;Muban(1,k)=I(i+2,j); k=22;Muban(1,k)=I(i+2,j-1); k=23;Muban(1,k)=I(i+2,j-2); k=24;Muban(1,k)=I(i+2,j+1); k=25;Muban(1,k)=I(i+2,j+2); I(i,j)=median(Muban); end end for i = 3:m-2 %处理第3到底m-2行的每一行开头和结尾的两个元素。把模板中心的像素灰度值分别赋给它们 I(i,1)=I(i,3); I(i,2)=I(i,3); I(i,n)=I(i,n-2); I(i,n-1)=I(n-2); end I(1,:)=I(3,:);%处理头两行和末尾两行 I(2,:)=I(3,:); I(m,:)=I(m-2,:); I(m-1,:)=I(m-2,:); figure(3),imshow(I);title('处理图像'); %***************计算处理后与处理前图像的信噪比************************** sum1=0;sum2=0;clear I0; for i=1:m for j=1:n sum1=sum1+I(i,j)^2; sum2=sum2+(I(i,j)-f1(i,j))^2; end end SNR=sum1/sum2; |
4 条回复