【技术分享】【原创】小波图像去噪分析中各种阈值的确定
0赞最近发了一篇比较高质量的文章,算是今年的一大收获吧!
今天腾出手写一下我在写论文中验证的一些算法,给大家分享,小波分析已经应用在了生产生活中的各个领域,总管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)
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)
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)
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)
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)
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
这个函数中用到了种阈值,有发表的和未发表的,一起分享给大家,如下所示阈值函数的图像的去噪结果:
有想在这方面作进一步深入研究的童鞋可以和我交流,随着小波技术的发展,现在小波的应用更加丰富,但是这些基础的技术还是不可或缺额!