精华内容
下载资源
问答
  • 【数字信号去噪】基于matlab小波软阈值+硬阈值+改进阈值数字信号去噪【含Matlab源码 1025期】
    千次阅读
    2021-06-18 21:28:18

    一、小波语音降噪简介

    对于噪声频谱遍布于语音信号频谱之中的宽带噪声,如果噪声振幅比大部分的语音信号振幅低,则削去低幅度成分也就削去了宽带噪声。基于这种思路,可以在频域中采取中心限幅的方法,即让带噪语音信号通过一限幅滤波器,高幅度频谱可以通过而低幅成分不允许通过,从而实现噪声抑制。需要注意的是中心削波不可避免地要损害语音质量,通常只在频域中进行,而一般不在时域中实施。
    小波降噪的原理类似于中心削波法。小波降噪最初是由Donoho和Johnstone提出的, 其主要理论依据是,小波变换具有很强的去数据相关性,它能够使信号的能量在小波域集中在一些大的小波系数中;而噪声的能量却分布于整个小波域内。因此,经小波分解后,信号的小波系数幅值要大于噪声的系数幅值。因此,幅值比较大的小波系数一般以信号为主,而幅值比较小的系数在很大程度上是噪声。于是,采用阈值的办法可以把信号系数保留,而使大部分噪声系数减小至0。小波降噪的具体处理过程为:将含噪信号在各尺度上进行小波分解,设定一个阈值,幅值低于该阈值的小波系数置为0,高于该阈值的小波系数或者完全保
    留, 或者做相应的“收缩”(shrinkage) 处理。最后; 将处理后获得的小波系数用逆小波变换进行重构,得到去噪后的信号。
    阈值去噪中,阈值函数体现了对超过和低于阈值的小波系数的不同处理策略,是阈值去噪中关键的一步。设w表示小波系数, T为给定阈值, sgn(*) 为符号函数, 常见的阈值函数主要有:
    在这里插入图片描述

    二、部分源代码

    clc
    clear all
    close all
    fs = 20e3;                  % 采样频率
    fn = 3e3;                   % 固有频率
    y0 = 5;                      % 位移常数
    g = 0.1;                     % 阻尼系数
    T = 0.01;                   % 重复周期
    N = 4096;                  % 采样点数
    NT = round(fs*T);      % 单周期采样点数
    t = 0:1/fs:(N-1)/fs;      % 采样时刻
    t0 = 0:1/fs:(NT-1)/fs;  % 单周期采样时刻
    K = ceil(N/NT)+1;       % 重复次数
    y = [];
    for i = 1:K
        y = [y,y0*exp(-g*2*pi*fn*t0).*sin(2*pi*fn*sqrt(1-g^2)*t0)];
    end
    y = y(1:N);
    Yf = fft(y);                % 频谱
    y5 = awgn(y,0.5,'measured'); % Add white Gaussian noise
    y10 = awgn(y,1,'measured'); % Add white Gaussian noise
    y15 = awgn(y,5,'measured'); % Add white Gaussian noise
    %%信噪比=0.5--------------------------------------------
    
    mse12=MSE(y5,xdy12);
    PSNR12=PSNR(y5,xdy12);
    st=sprintf('经软阈值函数去噪后的均方差=%.2f,信噪比=%.2f',mse12,PSNR12);disp(st)
    
    st=sprintf('经半软阈值函数去噪后的均方差=%.2f,信噪比=%.2f',mse13,PSNR13);disp(st)
    figure(1);
    subplot(511);plot(t,y);axis([0,inf,-4,5]);title('原始信号');xlabel('时间e(s)');ylabel('幅度')
    subplot(512);plot(t,y5);axis([0,inf,-4,5]);title('加入0.5db高斯白噪声的信号');xlabel('时间e(s)');ylabel('幅度')
    subplot(513);plot(t,xdy11);axis([0,inf,-4,5]);title('经硬阈值函数处理后的信号');xlabel('时间e(s)');ylabel('幅度')
    subplot(514);plot(t,xdy12);axis([0,inf,-4,5]);title('经软阈值函数处理后的信号');xlabel('时间e(s)');ylabel('幅度')
    subplot(515);plot(t,xdy13);axis([0,inf,-4,5]);title('经半软阈值函数处理后的信号');xlabel('时间e(s)');ylabel('幅度')
    function X = denh(x, wname, n, thr)
    %硬阈值
    
    [C, S] = wavedec2(x, n, wname);                     %进行小波分解
    dcoef = C( prod(S(1, :)) + 1 : end);                %高频部分系数
    
    ind = find( abs(dcoef) < thr) + prod(S(1, :));      %小于阈值thr的系数
    C(ind)=0;                                %   直接置零
    
    a=0.6;
    ind = find( abs(dcoef) >= thr) + prod(S(1, :));     %大于阈值thr的系数
    C(ind) = C(ind);
                                                        %按照公式处理
                                                        function X = denr(x, wname, n, thr)
    % 软阈值
    
    [C, S] = wavedec2(x, n, wname);                     %进行小波分解
    dcoef = C( prod(S(1, :)) + 1 : end);                %高频部分系数
    
    ind = find( abs(dcoef) < thr) + prod(S(1, :));      %小于阈值thr的系数
    C(ind) = 0;                                         %   直接置零
    

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
    [2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
    [3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

    更多相关内容
  • Donoho_donoho_小波去噪_

    2021-09-29 05:12:42
    Donoho经典阀值改进法进行小波去噪,matlab环境下编辑源代码程序
  • 通过分析研究发现 D.L.Donoho 提出的小波阈值去噪方法,以及文中提及的已构造出的小波阈值函数在图像去噪.方面仍存在问题。为了进一步改善这些问题,综合典型的小波阈值函数的优点与一些改进方法,提出一种改进的...
  • 3 构造新阈值函数 传统的阈值函数是由DONOHO提出的软阈值函数和硬阈值函数,软阈值函数定义如式(7)所示,硬阈值函数定义如式(8)所示。 硬阈值函数在小波域内存在间断点,在重构信号时会出现局部震荡现象;软阈值...

    0 引言

    实际的工程测量测试中,工程信号在采集和传输过程中,总会因外界的干扰引入噪声,为了准确地获得有用信号,降噪是信号分析前必须经过的预处理环节。传统降噪方法的不足在于使信号变换后的熵增高,无法刻画信号的非平稳特性并且无法得到信号的相关性[1]。而小波变换在时域和频域同时具有良好的局部化性质,并且小波变换具有众多优良的特性,如多分辨率特性、低熵性、去相关性和选基灵活性等。这些特性很好地克服了传统方法的不足,使得小波变换适用于信号的降噪处理。因此利用小波变换进行降噪,已经成为近几年研究的热点。

    运用小波变换处理噪声的方法主要分为3类:MATLAB提出的模极大值处理算法[2];XU提出的空域相关降噪算法[3];DONOHO提出的阈值降噪算法[4]。其中,以阈值降噪算法最为常用。阈值降噪算法中,通过对分解后的小波系数进行阈值处理以达到降噪的目的。最常用的阈值函数是由DONOHO在1995年提出的硬阈值函数和软阈值函数,但这两种函数也存在不足之处。采用硬阈值函数时,由于硬阈值函数的不连续,导致重构信号可能出现局部震荡;采用软阈值函数时,与真实小波系数之间存在恒定的偏差,导致重构后信号的精度下降[5]。针对软、硬阈值函数存在的缺点和不足,本文提出一种新的阈值函数。新阈值函数既保证了阈值函数的连续性,又能避免软阈值固定偏差的缺点。并通过MATLAB仿真分析验证了改进的小波阈值降噪算法优于传统阈值算法。

    1 小波阈值降噪原理

    假设一维离散含噪信号由式(1)表示:

    d29467164ea840a761048dba18411a14.png

    其中,X(k)是含噪信号;S(k)是原始标准信号;E(k)是叠加的高斯白噪声,其服从N(0,σ2)分布。

    小波变换后,有用信号的能量集中于幅值较大的小波系数,而噪声能量则分布在整个小波域中[6]。因此,较大的小波系数是由有用信号引起的,较小的小波系数则代表噪声。基于小波系数的特征,DONOHO和JOHNSTONE[7]提出了阈值降噪算法。首先确定一个阈值,即选择一个合适的数,当小波分解系数小于阈值时,认为这部分系数主要是由噪声引起的,予以舍弃;当系数大于阈值时,认为这是由信号引起的小波分解系数,就把这一部分进行阈值处理,然后用阈值处理后的量化系数进行重构,即为降噪后的信号。小波阈值降噪的基本步骤如图1所示。

    8ec3a2a39a283a866362123275ee2d3f.png

    2 改进阈值算法

    阈值的确定直接影响着小波阈值降噪的效果。如果阈值取得太小,噪声依然存在;如果阈值取得太大,那么有用信号的重要信息也可能被滤除。最常选用的通用阈值可用式(2)表示:

    5d2aaa9dd8d60d3822963cf8c4d1e24f.png

    其中,N为信号的长度,σ为噪声的均方差估计值,由式(3)给出:

    bfc28ccdf5e783c2c0ca2c395d55ad7c.png

    因为通用阈值有过扼杀有用信号的风险,文献[6]提出一种基于层间相关性的阈值选取方法。本文在此基础上结合分层阈值的思想对该阈值算法进行改进,如式(4)所示:

    e5631571e8db6f1e9e81284ef4a43580.png

    其中,r为常数,Tj,n为小波分解第j层位置n处的阈值,λj为第j层的阈值,其表达式如式(5)所示:

    99d3ae2845df7407074fff111ff1fdcf.png

    式中,Wj,k为第j层上的小波系数,j为分解层数。

    K(n)为定义的一个参数,用来表征小波系数的层间相关性,其定义如式(6)所示:

    3cb78ff7e20cb74496a3ef260b525f51.png

    式中,W(:,n)表示点n处的所有小波系数。

    当K(n)∈[0,r),点n处的小波系数相关性较强,点n处可能是一个信号点;当K(n)∈[r,+∞),点n处的相关性较差,该点可能是由噪声引起的。由式(4)可知,新阈值方法通过比较小波系数层间相关性,对不同点n的阈值进行修正。当K(n)∈[0,0.5r)时,小波系数间的相关性很大,该点非常有可能是纯信号点,对阈值进行收缩,取为0.7λj;当K(n)∈[0.5r,0.8r)时,小波系数的相关性比较大,该点有可能是信号点,该点的阈值取为0.8λj;当K(n)∈[0.8r,r)时,相关性较大,该点依旧可能是信号点,减小阈值收缩程度,取为0.9λj;当K(n)∈[r,+∞)时,认为小波系数的相关性较小,该点几乎不可能是纯信号点,将阈值取为λj。

    K(n)在计算时,要求不同层上的小波分解系数的数目一致,因此需要采用平稳小波变换(SWT)。r是测量小波系数相关性的一个重要参数,取值太小,可能会过扼杀有用信号,取值过大,可能会保留较多的噪声信息。通过相关实验,r取为0.5~1.5之间时,降噪效果比较好。本文中,r取为1。

    3 构造新阈值函数

    传统的阈值函数是由DONOHO提出的软阈值函数和硬阈值函数,软阈值函数定义如式(7)所示,硬阈值函数定义如式(8)所示。

    cee6c00c5c1a35bdb15432791ae0e99f.png

    1db300410f4b9d3fc1bbdee33897ae17.png

    硬阈值函数在小波域内存在间断点,在重构信号时会出现局部震荡现象;软阈值函数虽然在小波域内连续,但是阈值处理后的小波系数与真实小波系数存在恒定偏差,会造成信号高频有用信息的丢失。

    本文结合文献[8]与文献[9]中的方法,构造了一个新的阈值函数,如式(9)所示:

    ff58bbca61a2ca89d5eeedaecbc9925b.png

    其中,

    a7fdd70f742a9098e8399f777feb0036.png且α为正数,β为正数。

    由式(9)可知,当|Wj,k|→±λ时,

    6d9cfaca589d4926a64fcea504f4d8c4.png,即新阈值函数在Wj,k=±λ处是连续的,克服了硬阈值函数不连续的缺陷,重构信号不会有震荡产生;当Wj,k→±∞时,

    fe4025a3c0ae108508e59e026d2176e4.png

    3ce85f4b5dc98baaae245cd4c35675eb.png即当小波系数足够大时,新阈值函数等同于硬阈值函数,从而克服了软阈值函数

    594b4c56eb9f200b9e7eceac82260f65.png

    daf757ac36cbd89a6c1cbba3a6433cdf.png之间具有恒定偏的问题;同时新阈值函数具有高阶可导性。从表达式中可以看出,当α→0且β→0时,新阈值函数即为软阈值函数;当α→+∞时,u→1,新阈值函数即为硬阈值函数;适当选取α和β的值,新阈值函数可以在硬阈值函数与软阈值函数之间进行调整,灵活性更强。硬、软阈值函数的图形如图2(a)、图2(b)所示,选取不同的α和β的新阈值函数如图2(c)、图2(d)所示。

    bec61a9c1642d07f769720e041249abd.png

    4 仿真分析

    为了验证本文降噪算法的有效性,用MATLAB对其进行仿真试验。选用Matlab自带的Heavy sine 信号,对其加入一定的高斯白噪声,并用软阈值降噪算法、硬阈值降噪算法、本文新阈值降噪算法分别对其做降噪处理,其结果如图3所示。其中,选用sym4小波基,分解层数选为3层,新阈值函数中将α取为0.1,β取为7。

    从视觉上,降噪效果很难评价,为了量化地评价降噪性能,采用信噪比和均方根误差[10]作为评价指标。信噪比指原始信号能量与噪声能量的比值,记为SNR,其值越大,信号中噪声含量越少,降噪效果越好;均方根误差指重构信号与原始信号的均方误差,记为RMSE,均方根误差体现了原始信号和降噪之后的信号间的差异,均方根误差越小,表示重构信号与原始信号的差异越小,即降噪效果越好。其表达式分别如式(10)和式(11)所示。

    68ef426ad92100039176c97ea7e750dc.png

    fd14a6c329bd70407c7b083cd18bca12.png

    式中,x(i)为原始无噪声信号;

    ec6171f2036ff03bac5245c543f5d819.png为降噪后的信号。

    各种降噪方法的性能指标如表1所示。从表中可以看出,改进的阈值降噪算法相比于其他算法,降噪后信噪比最大,均方根误差最小,所以改进的阈值降噪算法优于其他算法。

    5 总结

    本文分析了小波阈值降噪的原理,针对软、硬阈值函数的缺点,结合相关文献,提出了一种新的阈值函数,该阈值函数可以通过调整α和β参数来调整阈值函数,进而获得最佳的降噪效果。本文基于改进的新阈值函数,并结合改进的阈值确定方法,提出了一种新的阈值降噪算法。利用MATLAB进行仿真分析,实验结果表明,本阈值降噪算法降噪性能优于其他常用算法。

    参考文献

    [1] 张德丰.Matlab小波分析[M].北京:机械工业出版社,2011.

    [2] MALLAT S,HWANG W L.Singularity detection and processing with wavelets[J].IEEE Trans Inform Theory,1992,38(2):617-643.

    [3] XU Y S,WEAVER J B,HEALY D M,et al.Wavelet transform domain filters:a spatially selective noise filtration technique[J].IEEE Trans Image Processing,1994,3(6):747-758.

    [4] DONOHO D L.De-noising by soft-thresholding[J].IEEETransactions on Information Theory,1995,41(3):613-627.

    [5] 王立东,张凯,王良润.改进小波阈值算法在电机振动信号降噪中的应用[J].电子技术应用,2015,41(5):77-80.

    [6] HE C,XING J C,LI J L,et al.A new wavelet threshold determination method considering interscale correlation in signal denoising[J].Mathematical Problems in Engineering,2015.

    [7] DONOHO D L,JOHNSTONE I M.Ideal spatial adaption by wavelet shrinkage[J].Biometrika,1994,81(3):425-455.

    [8] 胡俊文,周国荣.小波分析在振动信号降噪中的应用[J].机械工程与自动化,2010,158(1):128-130.

    [9] 王蓓,张根耀,李智,等.基于新阈值函数的小波阈值降噪算法[J].计算机应用,2014,34(5):1499-1502.

    [10] 陶珂,朱建军.小波去噪质量评价方法的对比研究[J].大地测量与地球动力学,2012,32(2):128-133.

    展开全文
  • 在D.L.Donoho和I.M.Johnstone提出的多分辨分析小波阈值去噪方法的基础上,提出了一种新的阈值函数。与传统的硬阈值、软阈值、半软阈值以及已有的改进阈值函数相比,该函数不仅易于计算,而且具有优越的数学特性。...
  • Donoho和I. M. Johnstone提出的小波阈值去噪方法的基础上完成的。与传统的软硬阈值函数相比,新阈值函数在整个定义域内统一定义,表达式简单易于计算,与软阈值函数一样具有连续性,而且是高阶可导的,便于进行各种...
  • Donoho的固定阈值进行改进,提出一种自适应的阈值。在Matlab环境中,分别进行了实验选取最优小波基,新阈值函数的最优参数以及新阈值函数与传统硬阈值函数,软阈值函数和折衷阈值函数的对比。实验结果表明,新的...
  • 基于Donoho经典小波阈值去除图像噪声基本思路,分析常用硬阈值法和软阈值法在图像去噪中的缺陷。针对这些缺陷,提出一种改进的阈值去噪法,该方法不仅可克服硬阈值不连续的缺点,还能够有效解决小波分解预估计...

    1 简介

    基于 Donoho经典小波阈值去除图像噪声基本思路,分析常用硬阈值法和软阈值法在图像去噪中的缺陷。针对这些缺陷,提出一种改进的阈值去噪法,该方法不仅可克服硬阈值不连续的缺点,还能够有效解决小波分解预估计系数与真实小波系数间存有的恒定误差。通过 Matlab仿真实验,使用改进的小波阈值法对图像去噪处理后,除 噪效果比较理想,在去噪性能指标上,PSNR(峰值信噪比)和 EPI(边缘保护指数)均好于传统阈值方法。

    采集、编码或者传输图像时,图像容易遭受噪声污染,因此图像去噪尤为重要。随着对小波理论研究的深入,其应用也日趋广泛,利用小波变换进行图像去噪成为研究热点。目前,小波图像去噪 基 本 方 法 有:①利用小波变换模极大值方法进行图像去噪;②利用小波变换尺度相关性方法进行图像去 噪;③利用小波阈值去噪法进行图像去噪。上述3种基 本 方 法 中,小波阈值去噪法相对于小波模极大值法与小波变换尺度相关性法,其 运 算 量 小,实现简单且使用广泛。小波阈值去噪法也有其不足:在小波硬阈值去噪处理过程中,获取的小波系 数 预 估 计 连 续 性 差,会 造 成 重 构 信号波动,而软阈值法算出的估计小波系数虽然连续性较好,但其与真实小波系数有恒定偏差,造成重构信号精度变低,导致图像模糊。本文结合经典硬阈值和软阈值法各自的优缺点,提出一种改进的小波阈值图像去噪算法。

    2 部分代码

    % 对彩色图像进行去噪
    clc
    clear all
    close all
    I = imread('lena_color.png', 'png');        % 读入图像
    X = im2double(I);                           % 转换成双精度类型
    
    x_noise = noise(X, 'gaussian', 0.01);       % 加入高斯噪声
    
    % 提取三个通道信息
    xr = x_noise(:, :, 1);                      % R通道
    xg = x_noise(:, :, 2);                      % G通道
    xb = x_noise(:, :, 3);                      % B通道
    
    % 估计三个通道的阈值
    [Cr, Sr] = wavedec2(xr, 2, 'sym4');
    [Cg, Sg] = wavedec2(xg, 2, 'sym4');
    [Cb, Sb] = wavedec2(xb, 2, 'sym4');
    thr_r = Donoho(xr);                        % R通道全局阈值
    thr_g = Donoho(xg);                        % G通道全局阈值
    thr_b = Donoho(xb);                        % B通道全局阈值
    thr_lvd_r = Birge_Massart(Cr, Sr);         % R通道局部阈值
    thr_lvd_g = Birge_Massart(Cg, Sg);         % G通道局部阈值
    thr_lvd_b = Birge_Massart(Cb, Sb);         % B通道局部阈值
    
    % 对三个通道分别进行去噪===================================================
    %   Donoho全局阈值 软阈值公式----------------------------------------------
    x_soft_r = wdenoise(xr, 'gbl', 's', thr_r, 'sym4', 2);
    x_soft_g = wdenoise(xg, 'gbl', 's', thr_g, 'sym4', 2);
    x_soft_b = wdenoise(xb, 'gbl', 's', thr_b, 'sym4', 2);
    %   -----------------------------------------------------------------------
    
    %   Donoho全局阈值 硬阈值公式----------------------------------------------
    x_hard_r = wdenoise(xr, 'gbl', 'h', thr_r, 'sym4', 2);
    x_hard_g = wdenoise(xg, 'gbl', 'h', thr_g, 'sym4', 2);
    x_hard_b = wdenoise(xb, 'gbl', 'h', thr_b, 'sym4', 2);
    %   -----------------------------------------------------------------------
    
    %   Bige-Massa策略 软阈值公式----------------------------------------------
    x_soft_lvd_r = wdenoise(xr, 'lvd', 's', thr_lvd_r, 'sym4', 2);
    x_soft_lvd_g = wdenoise(xg, 'lvd', 's', thr_lvd_g, 'sym4', 2);
    x_soft_lvd_b = wdenoise(xb, 'lvd', 's', thr_lvd_b, 'sym4', 2);
    %   -----------------------------------------------------------------------
    
    %   Bige-Massa策略 硬阈值公式----------------------------------------------
    x_hard_lvd_r = wdenoise(xr, 'lvd', 'h', thr_lvd_r, 'sym4', 2);
    x_hard_lvd_g = wdenoise(xg, 'lvd', 'h', thr_lvd_g, 'sym4', 2);
    x_hard_lvd_b = wdenoise(xb, 'lvd', 'h', thr_lvd_b, 'sym4', 2);
    %   -----------------------------------------------------------------------
    
    %   半软阈值---------------------------------------------------------------
    x1_r = den1(xr, 'sym4', 2, thr_r);
    x1_g = den1(xg, 'sym4', 2, thr_g);
    x1_b = den1(xb, 'sym4', 2, thr_b);
    %   -----------------------------------------------------------------------
    
    %   半软阈值 + 均值滤波----------------------------------------------------
    x1_5_r = den1_5_1(xr, 'sym4', 2, thr_r, 0.5*thr_r);
    x1_5_g = den1_5_1(xg, 'sym4', 2, thr_g, 0.5*thr_g);
    x1_5_b = den1_5_1(xb, 'sym4', 2, thr_b, 0.5*thr_b);
    %   -----------------------------------------------------------------------
    
    %   自适应阈值-------------------------------------------------------------
    x4_r = den4(xr, 'sym4', 2);
    x4_g = den4(xg, 'sym4', 2);
    x4_b = den4(xb, 'sym4', 2);
    %   -----------------------------------------------------------------------
    
    % =========================================================================
    
    % 恢复去噪后的图像=========================================================
    x_soft = cat(3, x_soft_r, x_soft_g, x_soft_b);                          % Donoho 软阈值
    x_hard = cat(3, x_hard_r, x_hard_g, x_hard_b);                          % Donoho 硬阈值
    x_soft_lvd = cat(3, x_soft_lvd_r, x_soft_lvd_g, x_soft_lvd_b);          %Birge-Massart 软阈值
    x_hard_lvd = cat(3, x_hard_lvd_r, x_hard_lvd_g, x_hard_lvd_b);          % Birge-Massart 硬阈值
    x1 = cat(3, x1_r, x1_g, x1_b);                                          % 半软阈值
    x1_5 = cat(3, x1_5_r, x1_5_g, x1_5_b);                                  % 半软阈值 + 均值滤波
    x4 = cat(3, x4_r, x4_g, x4_b);                                          % 自适应阈值
    % =========================================================================
    
    psnr_soft = PSNR_color(x_soft, X);
    psnr_hard = PSNR_color(x_hard, X);
    psnr_soft_lvd = PSNR_color(x_soft_lvd, X);
    psnr_hard_lvd = PSNR_color(x_hard_lvd, X);
    psnr1 = PSNR_color(x1, X);
    psnr1_5 = PSNR_color(x1_5, X);
    psnr4 = PSNR_color(x4, X);
    
    figure; subplot(341);
    imshow(X);          title('原图像');
    subplot(342); imshow(x_noise);    title('带噪声图像');
    subplot(343); imshow(x_soft);     title(['Donoho 软阈值,信噪比=',num2str(psnr_soft)]);
    subplot(344);imshow(x_hard);     title(['Donoho 硬阈值,信噪比=',num2str(psnr_hard)]);
    subplot(345); imshow(x_soft_lvd); title(['Birge-Massart 软阈值,信噪比=',num2str(psnr_soft_lvd)]);
    subplot(346); imshow(x_hard_lvd); title(['Birge-Massart 硬阈值,信噪比=',num2str(psnr_hard_lvd )]);
    subplot(347); imshow(x1);         title(['半软阈值,信噪比=',num2str(psnr1 )])';
    subplot(348); imshow(x1_5);       title(['半软阈值+均值滤波,信噪比=',num2str(psnr1_5)]);
    subplot(349); imshow(x4);         title(['自适应阈值,信噪比=',num2str(psnr4)]);
    
    % 中值滤波 均值滤波========================================================
    f = ones(3);
    
    % filter2函数用于图像均值滤波
    x_mean_r = meanfilter(xr,f);
    x_mean_g = meanfilter(xg,f);
    x_mean_b = meanfilter(xb,f);
    x_mean = cat(3, x_mean_r, x_mean_g, x_mean_b);
    
    % medfilt2函数用于图像中值滤波
    x_med_r = medfilter(xr, f);
    x_med_g = medfilter(xg, f);
    x_med_b = medfilter(xb, f);
    x_med = cat(3, x_med_r, x_med_g, x_med_b);
    
    psnr_mean = PSNR_color(x_mean, X);
    psnr_med = PSNR_color(x_med, X);
    
    subplot(3,4,10);imshow(x_mean); title(['均值滤波,信噪比=',num2str(psnr_mean)]);
    subplot(3,4,11); imshow(x_med);  title(['中值滤波,信噪比=',num2str(psnr_med)]);
    % =========================================================================

    3 仿真结果

    4 参考文献

    [1]林东升. 基于Matlab的小波阈值图像去噪方法研究[J]. 电脑知识与技术, 2013(4X):3.

    部分理论引用网络文献,若有侵权联系博主删除。

    5 MATLAB代码与数据下载地址

    见博客主页

    展开全文
  • Donoho提出的小波阈值去噪的基础上,提出了一种新的阈值函数,其功能与硬阈值函数相当,但是它具有二阶连续可导性。相对于软阈值函数,此函数“硬”特性可以很好保留图像边缘等局部特征;而其可导性为实现图像的...
  • 题目:软阈值(Soft Thresholding) 函数解读1、软阈值(Soft Thresholding)函数的符号软阈值(Soft Thresholding)目前非常常见,文献【1】【2】最早提出了这个概念。软阈值公式的表达方式归纳起来常见的有三种,以下是...

    题目:软阈值(Soft Thresholding) 函数解读

    1、软阈值(Soft Thresholding)函数的符号

    软阈值(Soft Thresholding)目前非常常见,文献【1】【2】最早提出了这个概念。软阈值公式的表达方式归纳起来常见的有三种,以下是各文献中的软阈值定义符号:

    文献【1】式(12):

    114623791_1_20171027052928429

    文献【2】:

    114623791_2_20171027052928585

    文献【3】:

    114623791_3_20171027052928648

    文献【4】式(8):

    114623791_4_20171027052928757

    文献【5】式(1.5):

    114623791_5_20171027052928835

    文献【6】式(12)注释:

    114623791_6_20171027052928960

    文献【7】:

    114623791_7_2017102705292969

    其中文献【1】【2】【3】【5】是第一种,也是最常见的一种;文献【4】【6】是第二种,个人认为可读性比第一种要好;文献【7】是第三种,个人认为可读性最好。当然,它们表达的意思是一样的(无论是sgn(x)还是sign(x)都是符号函数,即当x>0时为1,当x<0时为-1):

    以文献【1】符号为例解释第一种表示方式。这里w是变量,λ是阈值(非负值),符号(|w|-λ)+表示当(|w|-λ)>0时则等于|w|-λ,当(|w|-λ)<0时则等于0。那么分三种情况来讨论:第一种情况是w>λ>0,则sgn(w)=1,|w|=w,(|w|-λ)一定大于0,(|w|-λ)+=|w|-λ,所以ηS(w,λ)=w-λ;第二种情况是w

    w+λ;第三种情况是|w|

    114623791_8_20171027052929132

    以文献【6】符号为例解释第二种表示方式。这种表示方式中符号max{|u|-a,0}的作用与第一种表示方式中的符号(|w|-λ)+的作用一样,即当(|u|-a)>0时max{|u|-a,0}=(|u|-a),当(|u|-a)<0时max{|u|-a,0}=0,知道了这一点剩下的分析与第一种表示方式相同。

    综上,三种表示方式均是一致的。

    2、软阈值(Soft Thresholding)函数的作用

    弄清楚了软阈值(Soft Thresholding)的符号表示以后,接下来说一说它的作用。以下内容主要参考了文献【7】,这是一个非常棒的PPT!!!

    软阈值(SoftThresholding)可以求解如下优化问题:

    114623791_9_20171027052929257

    其中:

    114623791_10_20171027052929319

    根据范数的定义,可以将上面优化问题的目标函数拆开:

    114623791_11_20171027052929429

    也就是说,我们可以通过求解N个独立的形如函数

    114623791_12_20171027052929491

    的优化问题,来求解这个问题。由中学时代学过的求极值方法知道,可以求函数f(x)导数:

    114623791_13_20171027052929648

    这里要解释一下变量x绝对值的导数,当x>0时,|x|=x,因此其导数等于1;当x<0时,|x|=-x,因此其导数等于-1;综合起来,x绝对值的导数等于sgn(x)。令函数f(x)导数等于0,得:

    114623791_14_20171027052929757

    这个结果等号两端都有变量x,需要再化简一下。下面分三种情况讨论:

    (1)当b>λ/2时

    假设x<0,则sgn(x)=-1,所以x=b+λ/2>0,与假设x<0矛盾;

    假设x>0,则sgn(x)=1,所以x=b-λ/2>0,成立;

    所以此时在x=b-λ/2>0处取得极小值:

    114623791_15_20171027052929898

    即此时极小值小于f(0),而当x<0时

    114623791_16_20171027052929976

    即当x<0时函数f(x)为单调降函数(对任意△x<0,f(0)0处取得最小值。

    (2)当b

    假设x<0,则sgn(x)=-1,所以x=b+λ/2<0,成立;

    假设x>0,则sgn(x)=1,所以x=b-λ/2<0,与假设x<0矛盾;

    所以此时在x=b+λ/2<0处取得极小值:

    114623791_17_2017102705293069

    即此时极小值小于f(0),而当x>0时

    114623791_18_20171027052930163

    即当x>0时函数f(x)为单调升函数(对任意△x>0,f(△x)>f(0))。因此,函数在x=b+λ/2<0处取得最小值。

    (3)当-λ/2

    假设x<0,则sgn(x)=-1,所以x=b+λ/2>0,与假设x<0矛盾;

    假设x>0,则sgn(x)=1,所以x=b-λ/2<0,与假设x<0矛盾;

    即无论x为大于0还是小于0均没有极值点,那么x=0是否为函数f(x)的极值点呢?

    对于△x≠0,

    114623791_19_20171027052930257

    当△x >0时,利用条件b

    114623791_20_20171027052930319

    当△x <0时,利用条件b

    114623791_21_20171027052930460

    因此,函数在x=0处取得极小值,也是最小值。

    综合以上三种情况,f(x)的最小值在以下位置取得:

    114623791_22_20171027052930569

    与前面的软阈值(Soft Thresholding)对比一下,发现了么?若将上式中的b视为变量,λ/2视为阈值,上式即为软阈值(SoftThresholding)的公式。

    至此,我们可以得到优化问题

    114623791_9_20171027052929257

    的解为

    114623791_23_20171027052930663

    注:该式为软阈值(Soft Thresholding)的矩阵形式。

    3、软阈值(Soft Thresholding)的变形

    当优化问题变为

    114623791_24_20171027052930726

    因为对目标函数乘一个常系数不影响极值点的获得,所以可等价为优化问题

    114623791_25_20171027052930819

    此时的解为soft(B, λ)。

    4、软阈值(Soft Thresholding)的MATLAB代码

    软阈值(Soft Thresholding)的函数代码可以写成专门针对优化问题

    114623791_9_20171027052929257

    软阈值(Soft Thresholding)是如此简单以至于可以用一句代码去实现它[8]:

    114623791_26_20171027052930882

    当然,如果不习惯这种形式,也可以写成常见的函数形式:

    function [ soft_thresh ] = softthresholding( b,lambda )

    soft_thresh = sign(b).*max(abs(b) - lambda/2,0);

    end

    一定要注意:这种写法是针对最开始的优化问题:

    114623791_9_20171027052929257

    但我个人感觉更应该写成这种通用形式:

    function [ x ] = soft( b,T )

    x = sign(b).*max(abs(b) - T,0);

    end

    如此之后,若要解决优化问题

    114623791_9_20171027052929257

    只需调用soft(B, λ/2)即可;若要解决优化问题

    114623791_24_20171027052930726

    只需调用soft(B, λ)即可。

    5、软阈值(Soft Thresholding)测试代码

    用以下一小段代码测试一下软阈值,用来求解优化问题:

    114623791_27_20171027052930944

    这里用的对比函数是基追踪降噪(BPDN_quadprog.m),参见压缩感知重构算法之基追踪降噪(Basis

    PursuitDe-Noising, BPDN) (http://blog.csdn.net/jbb0523/article/details/52013669),使用BPDN时,实际上就是观测矩阵为单位阵时的一种特殊情况:

    clear all;close all;clc;

    b = [-0.8487   -0.3349    0.5528    1.0391   -1.1176]';

    lambda = 1;

    x1=soft(b,lambda)

    x2=BPDN_quadprog(b,eye(length(b)),lambda)

    fprintf('\nError between soft and BPDN = %f\n',norm(x1-x2))

    这里就不给出输出结果了。运行后,观察输出结果可知,soft函数与BPDN_quadprog函数的输结果相同。

    另外,可以在matlab里输入以下命令看一个软阈值的图像:

    x=-5:0.1:5;T=1;y=soft(x,T);plot(x,y);grid;

    114623791_28_2017102705293154

    6、总结

    可以发现,软阈值解决的优化问题和基追踪降噪问题很像,但并不一样,而且需要格外说明的是,软阈值并能不解决基追踪降噪问题,文献【8】在最后明确说明了这一点:

    114623791_29_20171027052931210

    近来学习研究各种算法,发现给自己挖的坑有点深,有点跳不出来了,各种问题接踵而来,各种新概念一个接着一个,而软阈值(Soft Thresholding)就是其中之一,根本没法子绕过去。在文献【6】中,作者描述软阈值(Soft Thresholding)时用的是“the well-known soft-threshold

    function”,好吧,还well-kown。在学习过程中文献【9】对我帮助也挺大的,但从作者的语气来看,也没有多么well-kown啊……

    最后,非常感谢文献【7】的PPT,看了之后让我有一种醍醐灌顶的感觉……

    7、参考文献

    【1】Donoho D L, JohnstoneJ M. Ideal spatial adaptation by wavelet shrinkage[J]. Biometrika, 1994, 81(3):425-455.

    【2】Donoho D L.De-noising by soft-thresholding[J]. IEEE transactions on information theory,1995, 41(3): 613-627.

    【3】Bredies K, Lorenz D.Iterative soft-thresholding converges linearly[R]. Zentrum fürTechnomathematik, 2007.

    【4】Bioucas-Dias J M,Figueiredo M A T. A new TwIST: two-step iterative shrinkage/thresholdingalgorithms for image restoration[J]. IEEE Transactions on Image processing,2007,

    16(12): 2992-3004.

    【5】Beck A, Teboulle M. Afast iterative shrinkage-thresholding algorithm for linear inverse problems[J].SIAM journal on imaging sciences, 2009, 2(1): 183-202.

    【6】Wright S J, Nowak RD, Figueiredo M A T. Sparse reconstruction by separable approximation[J]. IEEETransactions on Signal Processing, 2009, 57(7): 2479-2493.

    【7】谷鹄翔.IteratedSoft-Thresholding Algorithm[Report,slides]. http://www.sigvc.org/bbs/thread-41-1-2.html

    【8】http://www.simonlucey.com/soft-thresholding/

    【9】http://blog.sina.com.cn/s/blog_6d0e97bb01015vq3.html

    展开全文
  • 通过实验证明, 这种方法能很好地对图像去噪,与Donoho等人提出的Visu shrink去噪方法和Chang等人提出的Bayes shrink去噪方法相比,不仅提高了去噪后图像的信噪比和最小均方误差 , 而且也使图像更加清晰,并能更好地适合...
  • 新的阈值函数的构造是在研究D.L.Donoho和I.M.Johnstone提出的小波阈值去噪方法的基础上完成的。与传统的软硬阈值函数相比,新阈值函数在整个定义域内统一定义,表达式简单易于计算,与软阈值函数一样具有连续性,...
  • 1992年,Donoho等人首先提出了小波阈值收缩去噪。其提出的阈值公式如下: ...
  • Gavish 和 Donoho (2014) 提出的最优奇异值硬阈值技术(Optimal Singular Value Hard Threshold)自动确定 SVD 截断阶数
  • 小波阈值去噪算法中的核心问题是阈值的设定和阈值函数的选取.Donoho提出的通用阈值在实际的应用中效果并不十分理想.作者利用统计学中的自由分布式错误发现率假设检验方法来设定阈值,使得该阈值不依赖于信号的长度,并...
  • 然后, 针对这些问题给出了改善多脉冲激光目标定位精度的具体算法: 基于对称小波基实施回波信号小波分解, 利用改进Donoho阈值处理小波系数, 用以减小重构目标波形峰值点位置的偏移; 采用差分组合函数搜索目标回波的...
  • 对小波多分辨率理论进行研究后,在分析Donoho的软、硬阈值去噪法的基础上,提出一种改进阈值函数量化方法,改进阈值函数能克服软、硬阈值存在的缺陷,运用MIT-BIH心电数据库进行验证,并对ECG 信号用不同方法去噪后...
  • Donoho提出的通用阈值在实际的应用中效果并不十分理想。利用统计学中的自由分布式错误发现率(False Discovery Rate,FDR)假设检验方法,提出一种新的阈值算法。选取 sym4小波函数对带噪信号进行处理,仿真结果表明,该...
  • Donoho和I. M. Johnston提出的多分辨分析小波阈值去噪方法的基础上,提出了一种新的双变量阈值函数。采用新的阈值函数的去噪效果无论在视觉效果上,还是在信噪比增益上和最小均方意义上均优于传统的硬阈值和软阈值...
  • 有鉴于此,文中构造了可用于非线性滤波算法的一族分段n次小波阈值参数滤波器函数,证明了求解去噪问题必须使得泛函取最小值,而小波逼近是该泛函的近似最小值,可以用来替代Donoho的软阈值滤波器,而且次数,l越大,...
  • 针对图像在采集与传输中受到的噪声污染,为提高图像信噪比,提升图像准确性与实用性,基于小波分析应用在图像降噪领域的原理与优势,在Donoho阈值降噪方法基础上,提出了一种改进的图像降噪方法。应用改进公式,可以...
  • 针对小波阈值算法在钢丝绳损伤检测信号去噪中的应用,在Donoho的软、硬阈值去噪方法的基础上,提出一种改进的小波阈值算法,该算法解决了硬阈值去噪效果不佳与软阈值过度光滑导致信号失真的难题,完整地保留了钢丝绳检测...
  • 一种基于小波阈值选取的文档,根据Donoho在1994年提出的一种阈值选取规则
  • 小波降噪最初是由Donoho和Johnstone提出的, 其主要理论依据是,小波变换具有很强的去数据相关性,它能够使信号的能量在小波域集中在一些大的小波系数中;而噪声的能量却分布于整个小波域内。因此,经小波分解后,...
  • 描述1、小波阈值处理基本理论所谓阈值去噪简而言之就是对信号进行分解,然后对分解后的系数进行阈值处理,最后重构得到去噪信号。该算法其主要理论依据是:小波变换具有很强的去数据相关性,它能够使信号的能量在小...
  • 小波阈值图像降噪及MATLAB仿真图像信号在生成和传输过程中常常因受到各种噪声的干扰和影响而使图像降质,这对后续图像的处理(如分割、压缩和图像理解等)将产生不利影响。为了抑制噪声,改善图像质量,便于更高层次的...
  • 基于matlab小波软阈值+硬阈值+改进阈值轴承故障仿真信号去噪 二、源代码 clc clear all close all fs = 20e3; % 采样频率 fn = 3e3; % 固有频率 y0 = 5; % 位移常数 g = 0.1; % 阻尼系数 T = 0.01; % 重复周期 N = ...
  • 基于小波阈值的海上遥感溢油图像去噪理论研究,潘海澄,孙晓磊,海上遥感溢油图像中总是存在许许多多的噪声,直接影响图像特征的提取效果,导致很难确定溢油分布。本文运用Donoho提出的小波软阈值

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 415
精华内容 166
关键字:

donoho阈值