clear;
I=imread('standard_lena.bmp');
I=imnoise(I,'salt & pepper', 0.7);
imshow(I)
figure;
M=I;
num=1;
I=double(I);
M=double(M);
flag11=1;
H=512;
L=512;
for i=1:H
for j=1:L
flag(i,j)=1;
end
end
%i横坐标
%j综坐标
for i=1:H%大循环
for j=1:L%大循环
omiga=2;
%%%%%%%%确定窗口
while flag(i,j)==1
zuo=i-omiga;
xia=j-omiga;
you=i+omiga;
shang=j+omiga;
if zuo<1
zuo=1;
end
if xia<1
xia=1;
end
if you>L
you=L;
end
if shang>H
shang=H;
end
%%%%%%%窗口确定结束
%%%%%%%%%%%确定最大最小值
smin=I(i,j);
smax=I(i,j);
total=(you-zuo+1)*(shang-xia+1);
vect1=zeros(1,total-1);
kn=1;
for in=zuo:you
for jn=xia:shang
if ((in==i&jn==j)==0)
vect1(1,kn)=I(in,jn);
kn=kn+1;
end
end
end
smin=nanmin(vect1);
smax=nanmax(vect1);
smed=nanmedian(vect1);
%%%%%%%%%%%确定最大最小值结束
if (smed-smin)>0&(smax-smed)>0
if smin<M(i,j)&M(i,j)<smax
flag(i,j)=0;
else
M(i,j)=smed;
I(i,j)=smed;
flag(i,j)=0;
end
else
omiga=omiga+2;
if omiga>=5
flag11=0;
end
if omiga>=17
flag11=0;
M(i,j)=smed;
flag(i,j)=0;
end
end
end%while
end%大循环
end%大循环
I=uint8(M);
imshow(I);