严重椒盐噪声去除算法

注:本文程序参考董继扬等人的论文《严重椒盐噪声污染图像的非线性滤波算法》2003.12

思想是根据局部统计信息,将像素点分为信息点和正负噪声点,然后对这3种不同的情况进行分别处理,达到保留图像细节的目的。经过几次迭代实验效果很好。

废话少说,上代码:

clc
clear all;
Image=imread('lena512.bmp');
[hei,len]=size(Image);

Image=imnoise(Image,'salt & pepper',0.5);
Image1=Image;

N=zeros(hei,len);
d1=2;
d2=1;
T=5;
TT=30;

% for ik=1:3
    for i=1:hei
        for j=1:len
            
            [ii,jj]=getinds(i,j,d1,hei,len);
            le=length(ii);
            for k=1:le
                ik=ii(k);
                jk=jj(k);
                tmp(k)=Image(ik,jk);
            end
			
            max=0;        min=255;
            for iii=1:length(tmp)
                if tmp(iii)>max
                    max=tmp(iii);
                end
                if tmp(iii)<min
                    min=tmp(iii);
                end
            end
			
            if Image(i,j)<=min+T
                N(i,j)=-1;
            end
            if Image(i,j)>=max-T
                N(i,j)=1;
            end        
        end
    end
	
    for i=1:hei
        for j=1:len
            
            if N(i,j)~=0	
			
                [ii,jj]=getinds(i,j,d2,hei,len);
                le=length(ii);
                kk=1;
                for k=1:le
                    ik=ii(k);
                    jk=jj(k);
                    W(k)=Image(ik,jk);
                    WW(k)=N(ik,jk);
                    if N(ik,jk)==0
                        X(kk)=Image(ik,jk);
                        kk=kk+1;
                    end
                end
                
                Mij=median(W);
                sum1=0;
                XX=X; 
                XX=double(XX);
                if length(XX)~=0                    
                    for iii=1:length(XX)
                        sum1=sum1+XX(iii);
                    end                    
                end
                Aij=sum1/length(X);
                if length(X)~=0
                   if abs(Image1(i,j)-Aij)>TT
                       Image1(i,j)=Aij;
                   end
                else
                    Z=0;F=0
                    for i1=1:length(W)
                        if(WW(i1)==1)
                            Z=Z+1;
                        elseif (WW(i1)==-1)
                            F=F+1;
                        end                    
                    end
                    Pij=Z-F;
                    if abs(Pij)>floor((length(W)-length(X))/3)&&Pij*N(i,j)>0%
                        Image1(i,j)=Image(i,j);
                    else
                        Image1(i,j)=Mij;
                    end
                end
                
            end
        end
    end
% end
实验效果图如下:

图1:滤波前的加噪图

图2:滤波后的图像


转载于:https://my.oschina.net/zerrys/blog/135190

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值