snifer

【技术分享】【原创】小波图像去噪分析中各种阈值的确定

0
阅读(4822)

最近发了一篇比较高质量的文章,算是今年的一大收获吧!

今天腾出手写一下我在写论文中验证的一些算法,给大家分享,小波分析已经应用在了生产生活中的各个领域,总管IEEE上发表的论文,第三代小波占了很多篇,从而可见未来小波的发展方向。

小波阈值选择在图像去噪中的左右非常巨大,从最早的软硬阈值,到现在的一些基于统计的阈值,非常多,为了完成我的论文,我搜集调试了很长时间,在matlab上进行的调试,希望大家能喜欢。

function y=thrfunc(x,sorh,t)
%阈值函数:选择不同的阈值函数对信号进行处理
switch sorh
    case 'soft'%软阈值函数
        tmp=(abs(x)-t);
        tmp=(tmp+abs(tmp))/2;
        y=sign(x).*tmp;
    case 'hard'%硬阈值函数
        y=x.*(abs(x)>t);
    case 'semisoft'%折中阈值函数
        a=0.1;
        tmp=(abs(x)-a*t);
        tmp=(tmp+abs(tmp))/2;
        y=sign(x).*tmp.*(abs(x)>=t);     
    case 'halfsoft'%半软阈值函数
        sigma=2;t0=sigma*t;
        tmp=(abs(x)-t);
        tmp=t0*(tmp+abs(tmp))/2/(t0-t);
        ytmp=sign(x).*tmp;
        y=x.*(abs(x)>=t0)+ytmp.*(abs(x)<t0);
    case 'upsoft'%软阈值函数改进
        k=1;
        tmp1=abs(x)-t+t/(2*k+1);
        tmp2=x.^(2*k+1)/((2*k+1)*t^(2*k));
        y=sign(x).*tmp1.*(abs(x)>=t)+tmp2.*(abs(x)<t);
    case 'newthr1'%半软阈值和折中阈值函数的综合改进
        a=0.1;sigma=0.40;t0=sigma*t;
        tmp1=(abs(x)-a*t);tmp=(abs(x)-t0);
        tmp1=(tmp1+abs(tmp1))/2;tmp=(t-a*t)*(tmp+abs(tmp))/2/(t-t0);
        ytmp=sign(x).*tmp;
        y=sign(x).*tmp1.*(abs(x)>=t)+ytmp.*(abs(x)<t&abs(x)>=t0);
    case 'new'%新阈值函数
       alpha=1+exp(abs(x));
        tmp=abs(x)-abs(x)*t./alpha;
        y=sign(x).*tmp.*(abs(x)>=t);
    case 'newthr2'%upsoft和newthr1的综合改进
        k=2;alpha=1+exp(abs(x)/2-t/2);
        tmp1=abs(x)-2*k*t/(k+1/2)./alpha;
        tmp2=k*x.^(2*k+1)/((2*k+1)*t^(2*k));
        y=sign(x).*tmp1.*(abs(x)>=t)+tmp2.*(abs(x)<t);
    case 'new'%自己
        a=1;b=0.5;
        tmp=abs(x)-t;
        y=sign(x).*(abs(x)-a*t./(a+tmp)).*(abs(x)>=t)+sign(x).*abs(x).^(a+1)./t^a*(1-b).*(abs(x)<t);
    case 'new1'%折中
        a=0.2;
        tmp=abs(x)-a*t;
        y=sign(x).*(abs(x)-a*t).*(abs(x)>=t);
    case 'new2'%幂次
       n=4;
       tmp=abs(x).^n-t^n;
       tmp1=tmp.^(1/n) ;
       y=sign(x).*tmp1.*(abs(x)>t);
   case 'new3'%加权
       n=0.6;
       tmp=abs(x)-t;
       y=x.*(1-n)+n.*sign(x).*tmp.*(abs(x)>t);
   case 'new4'%别人
        a=2;
        tmp=abs(x)-t;
        y=sign(x).*(abs(x)-a*t./(a+tmp)).*(abs(x)>=t);
   case 'new5'%最新
       a=0.9;
       alpha=1+exp(abs(x)-t);
        tmp=abs(x)-abs(x)*t./alpha;
        y=x.*(1-a)+a.*sign(x).*tmp.*(abs(x)>=t);
   case 'new6'%最新
       a=0.9;
       alpha=1+exp(abs(x)-t);
        tmp=abs(x)-t./alpha;
        y=x.*(1-a)+a.*sign(x).*tmp.*(abs(x)>=t);
  case 'new7'%参考
       tmp=abs(x).^2-t^2;
       tmp1=tmp.^(1/2) ;
       y=sign(x).*tmp1.*(abs(x)>t);
   case 'new8'%再来
       a=0.5;
       tmp=abs(x).^2-a.*(t^2);
       tmp1=tmp.^(1/2) ;
       y=sign(x).*tmp1.*(abs(x)>t);
   case 'new9'%
       a=0.8;
       tmp
       alpha=1+exp(abs(x)-t);
       y=x.*tmp+(1-tmp).*sign(x).*(abs(x)-t).*(abs(x)>t);
       
  otherwise
    error('Invalid argument value.')
end

这个函数中用到了种阈值,有发表的和未发表的,一起分享给大家,如下所示阈值函数的图像的去噪结果:

有想在这方面作进一步深入研究的童鞋可以和我交流,随着小波技术的发展,现在小波的应用更加丰富,但是这些基础的技术还是不可或缺额!