www.pudn.com > BubianjuWork.rar > clnoise.m
%针对我的毕设所编写的椒盐噪声的去噪程序
function out=clnoise(I)
[m n]=size(I);
for i=2:m-1
for j=2:n-1
if ((abs(double(I(i,j))-double(I((i-1),(j-1))))>10)&(abs(double(I(i,j))-double(I((i-1),j)))>10)&...
(abs(double(I(i,j))-double(I((i-1),(j+1))))>10)&(abs(double(I(i,j))-double(I(i,(j-1))))>10)&...
(abs(double(I(i,j))-double(I(i,(j+1))))>10)&(abs(double(I(i,j))-double(I((i+1),(j-1))))>10)&...
(abs(double(I(i,j))-double(I((i+1),j)))>10)&(abs(double(I(i,j))-double(I((i+1),(j+1))))>10)&...
(abs(double(I((i-1),(j-1)))-double(I((i+1),(j+1))))<20)&(abs(double(I((i-1),(j+1)))-double(I((i+1),(j-1))))<20))
I(i,j)=(sum(sum(double(I((i-1):(i+1),(j-1):(j+1)))))-double(I(i,j)))/8;
%I(i,j)=0;
end
end
end
for j=2:n-1
i=1;
if ((abs(double(I(i,j))-double(I(i,(j-1))))>10)&...
(abs(double(I(i,j))-double(I(i,(j+1))))>10)&(abs(double(I(i,j))-double(I((i+1),(j-1))))>10)&...
(abs(double(I(i,j))-double(I((i+1),j)))>10)&(abs(double(I(i,j))-double(I((i+1),(j+1))))>10)&...
(abs(double(I(i,(j-1)))-double(I((i+1),(j+1))))<20)&(abs(double(I(i,(j+1)))-double(I((i+1),(j-1))))<20))
I(i,j)=(sum(sum(double(I(i:(i+1),(j-1):(j+1)))))-double(I(i,j)))/5;
end
% I(i,j)=0;
i=m;
if ((abs(double(I(i,j))-double(I(i,(j-1))))>10)&...
(abs(double(I(i,j))-double(I(i,(j+1))))>10)&(abs(double(I(i,j))-double(I((i-1),(j-1))))>10)&...
(abs(double(I(i,j))-double(I((i-1),j)))>10)&(abs(double(I(i,j))-double(I((i-1),(j+1))))>10)&...
(abs(double(I((i-1),(j-1)))-double(I(i,(j+1))))<20)&(abs(double(I((i-1),(j+1)))-double(I(i,(j-1))))<20))
I(i,j)=(sum(sum(double(I((i-1):i,(j-1):(j+1)))))-double(I(i,j)))/5;
end
%I(i,j)=0;
end
for i=2:m-1
j=1;
if ((abs(double(I(i,j))-double(I((i-1),j)))>10)&(abs(double(I(i,j))-double(I((i-1),(j+1))))>10)&...
(abs(double(I(i,j))-double(I(i,(j+1))))>10)&(abs(double(I(i,j))-double(I((i+1),j)))>10)&...
(abs(double(I(i,j))-double(I((i+1),(j+1))))>10)&...
(abs(double(I((i-1),j))-double(I((i+1),(j+1))))<20)&(abs(double(I((i-1),(j+1)))-double(I((i+1),j)))<20))
I(i,j)=(sum(sum(double(I((i-1):(i+1),j:(j+1)))))-double(I(i,j)))/5;
end
j=n;
if ((abs(double(I(i,j))-double(I((i-1),(j-1))))>10)&(abs(double(I(i,j))-double(I((i-1),j)))>10)&...
(abs(double(I(i,j))-double(I(i,(j-1))))>10)&...
(abs(double(I(i,j))-double(I((i+1),(j-1))))>10)&...
(abs(double(I(i,j))-double(I((i+1),j)))>10)&...
(abs(double(I((i-1),(j-1)))-double(I((i+1),j)))<20)&(abs(double(I((i-1),j))-double(I((i+1),(j-1))))<20))
I(i,j)=(sum(sum(double(I((i-1):(i+1),(j-1):j))))-double(I(i,j)))/5;
end
end
%figure,imshow(I);
out=I;