小波学习笔记——阈值去噪法

阈值去噪法是指首先对含噪信号进行小波分解,对小波系数进行阈值处理,即对于大于(或小于)某阈值的小波系数进行处理,再利用处理后的结构重构原信号。

其中最关键的是阈值函数的选取和阈值T的估计

有三种方法:

法一:小波变换后,在小尺度上具有较高的中心频率,因此小尺度的变换值集中反映了信号高频部分的能量,基于此来估计噪声方差。

法二:用前两个尺度的小波系数相乘得到修正的小波系数,进而估计噪声方差。

法三:图像中噪声方差的估计,平坦的地方进行统计噪声方差。噪声的模拟,可以采用高斯噪声,或者均匀噪声、椒盐噪声等其他噪声。

阈值函数的选取:

1.硬阈值函数

2.软阈值函数

缺点:硬阈值在T点时,函数不连续,用该函数重构信号时会产生震荡;软阈值函数虽然连续性好,但是存在恒定偏差,直接影响重构信号的性质。

3.由软、硬阈值折中法构造

阈值的估计:

1.通用阈值

2.分级阈值

3.Sure阈值

4.GCV阈值

5.Bayes Shrink阈值

MATLAB阈值去噪命令:

一维信号去噪函数[XD,CXD,LXD]=WDEN(X,TPTR,SORH,SCAL,N,'wname')
%输入参数:X为原始带噪信号。TPTR为阈值选择准则的字符串:‘rigrsure'用Stein's无偏估计的原理进行的自适应阈值;'heursure'是启发式方法;'sqtwolog'通用阈值方法,阈值为sqrt(2lnN);'minimaxi'最大最小阈值法
%SORH选择's'为软阈值函数,选择'h'为硬阈值函数
%SCAL定义多种方法的阈值重新调节:'one'表示没有重新调节;'sln'表示基于第一层系数进行噪声估计来重新调节;'mln'层层独立进行噪声估计来重新调节。
%N为小波分解层数
%‘wname’为小波函数

图像阈值去噪法的MATLAB命令:

默认的自适应阈值获取命令DDENCMP,该命令可用于默认的阈值去噪和压缩中

[THR,SORH,KEEPAPP,CRIT]=DDENCMP(IN1,IN2,X)

输入参数:IN1可以选择'den'(去噪)或者'cmp'(压缩);

                  IN2为'wv'(单小波)或者'wp'(小波包);

                  X为输入信号,可以是一维信号,也可以是二维的图像。

返回值:THR为阈值;SORH为软阈值或硬阈值;KEEPAPP为允许的逼近系数;CRIT为熵的名字

与默认的自适应选取的去噪阈值命令对应的去噪命令为WDENCMP,该命令也可以用于压缩中

[XC,CXC,LXC,PERF0,PERFL2]=WDENCMP(IN1,X,'wname',N,THR,SORH,KEEPAPP)

输入参数:IN1可以选择'gbl'(全局阈值)或者'lvd'(分层阈值);

                  X为输入信号,可以是一维信号,也可以是二维的图像;

                  N为分解层数;

                  THR为阈值;

                   SORH为软阈值或者硬阈值;

                    KEEPAPP为是否压缩低频逼近系数,等于1时不压缩,否则进行压缩

返回值:XC为去噪后的信号;[CXC,LXC]为XC去噪后的结构;PERFL2和PERF0为L2模下重构压缩的百分比

clc,clear all
close all;
load sumsin;
f=[sumsin zeros(1,24)];
lev=4;
n=5;
wf='db3';
%软硬阈值去噪
%一维信号去噪函数[XD,CXD,LXD]=WDEN(X,TPTR,SORH,SCAL,N,'wname')
%输入参数:X为原始带噪信号。TPTR为阈值选择准则的字符串:‘rigrsure'用Stein's无偏估计的原理进行的自适应阈值;'heursure'是启发式方法;'sqtwolog'通用阈值方法,阈值为sqrt(2lnN);'minimaxi'最大最小阈值法
%SORH选择's'为软阈值函数,选择'h'为硬阈值函数
%SCAL定义多种方法的阈值重新调节:'one'表示没有重新调节;'sln'表示基于第一层系数进行噪声估计来重新调节;'mln'层层独立进行噪声估计来重新调节。
%N为小波分解层数
%‘wname’为小波函数
s_s=wden(f,'heursure','s','one',lev,wf);
s_h=wden(f,'heursure','h','one',lev,wf);
figure,
plot(s_s);grid on;
xlabel('t'),ylabel('s_s(t)');
figure,
plot(s_h);grid on;
xlabel('t'),ylabel('s_h(t)');
P1=psnr(f,s_s);
P2=psnr(f,s_h);
m1=mse(f,s_s);
m2=mse(f,s_h);

与软阈值函数相比,硬阈值函数去噪信号更接近原始信号。

你可能感兴趣的:(MATLAB,图像处理,matlab,算法,信号处理)