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;