K近邻均值滤波

子函数代码:

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.0636
MES2=sum(sum((I-l).^2))/(e*f);     %自适应中值去噪的均方差
PSNR2=20*log10(MAX/sqrt(MES2));           %自适应中值算法去噪的峰值信噪比

% psnr3 = 34.3898
MES3=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.0636
MES2=sum(sum((I-l).^2))/(e*f);     %自适应中值去噪的均方差
PSNR2=20*log10(MAX/sqrt(MES2));           %自适应中值算法去噪的峰值信噪比

% psnr3 = 34.3898
MES3=sum(sum((I-m).^2))/(e*f);     %自己编写的中值去噪的均方差
PSNR3=20*log10(MAX/sqrt(MES3));           %自己编写的中值去噪的峰值信噪比




你可能感兴趣的:(图像处理的文献及代码)