子函数代码:
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)); %自己编写的中值去噪的峰值信噪比