K近邻均值滤波

来源:互联网 发布:结构健康监测算法 编辑:程序博客网 时间:2024/05/17 02:51

子函数代码:

function[y]=K_neardealnoise(x,a,b)[m,n]=size(x);x=double(x);y=x;k0=floor(a*b/2)+1;for i=2:m-1   for j=2:n-1   %y(i,j)=0;    z1=abs(x(i,j)-x(i-1,j+1));    z2=abs(x(i,j)-x(i,j+1));    z3=abs(x(i,j)-x(i+1,j+1));    z4=abs(x(i,j)-x(i-1,j));    z5=abs(x(i,j)-x(i+1,j));    z6=abs(x(i,j)-x(i-1,j-1));    z7=abs(x(i,j)-x(i,j-1));    z8=abs(x(i,j)-x(i+1,j-1));    z=[z1,z2,z3,z4,z5,z6,z7,z8];    h=[x(i-1,j+1),x(i,j+1),x(i+1,j+1),x(i-1,j),x(i+1,j),x(i-1,j-1),x(i,j-1),x(i+1,j-1)];    %对8个差进行冒泡排序法      for i1=1:1:7           for j1=1:1:8-i1                if z(1,j1) > z(1,j1+1)
%%该算法找出与核心像素灰度值接近的K个像素。若为信号点,非噪声点,则不受太大影响;若为噪声点,此种方法起到抑制噪声的作用I=imread('1.jpg');I=rgb2gray(I);[e f]=size(I);%J=imnoise(I,'salt & pepper',0.030);J=imnoise(I,'gaussian',0,0.002);%%第一种算法在保持边缘和细节较第二种算法要好很多,当然第一种算法在去噪方面不彻底,不如第二种l=K_neardealnoise(J,3,3);%灰度最小方差的均值滤波器m=commonfilt2(J,3,3);%自己编写的均或中值滤波方法subplot(1,2,1),imshow( uint8(l) ),title('K近邻平滑滤波');subplot(1,2,2),imshow( uint8(m)),title('普通均值滤波');%2 计算三种算法的峰值信噪比B=8;                %编码一个像素用多少二进制位MAX=2^B-1;          %图像有多少灰度级I=double(I);l=double(l);m=double(m);% psnr2 = 32.0636MES2=sum(sum((I-l).^2))/(e*f);     %自适应中值去噪的均方差PSNR2=20*log10(MAX/sqrt(MES2));           %自适应中值算法去噪的峰值信噪比% psnr3 = 34.3898MES3=sum(sum((I-m).^2))/(e*f);     %自己编写的中值去噪的均方差PSNR3=20*log10(MAX/sqrt(MES3));           %自己编写的中值去噪的峰值信噪比

z0=h(1,j1);%z0为临时变量 h(1,j1)=h(1,j1+1); h(1,j1+1)=z0; end end end %for i1=1:k0 %y(i,j)=y(i,j)+h(1,i1); %end %y(i,j)=y(i,j)/k0; y(i,j)=mean( h(1:k0) ); %y(i,j)=median( h(1:k0) );%中心像素获得最小方差模板对应的中值 endend


主函数:

%%该算法找出与核心像素灰度值接近的K个像素。若为信号点,非噪声点,则不受太大影响;若为噪声点,此种方法起到抑制噪声的作用I=imread('1.jpg');I=rgb2gray(I);[e f]=size(I);%J=imnoise(I,'salt & pepper',0.030);J=imnoise(I,'gaussian',0,0.002);%%第一种算法在保持边缘和细节较第二种算法要好很多,当然第一种算法在去噪方面不彻底,不如第二种l=K_neardealnoise(J,3,3);%灰度最小方差的均值滤波器m=commonfilt2(J,3,3);%自己编写的均或中值滤波方法subplot(1,2,1),imshow( uint8(l) ),title('K近邻平滑滤波');subplot(1,2,2),imshow( uint8(m)),title('普通均值滤波');%2 计算三种算法的峰值信噪比B=8;                %编码一个像素用多少二进制位MAX=2^B-1;          %图像有多少灰度级I=double(I);l=double(l);m=double(m);% psnr2 = 32.0636MES2=sum(sum((I-l).^2))/(e*f);     %自适应中值去噪的均方差PSNR2=20*log10(MAX/sqrt(MES2));           %自适应中值算法去噪的峰值信噪比% psnr3 = 34.3898MES3=sum(sum((I-m).^2))/(e*f);     %自己编写的中值去噪的均方差PSNR3=20*log10(MAX/sqrt(MES3));           %自己编写的中值去噪的峰值信噪比