分享免费的编程资源和教程

网站首页 > 技术教程 正文

一维时间序列的非局部均值降噪方法(MATLAB R2018A)

goqiw 2024-11-06 18:23:37 技术教程 50 ℃ 0 评论

非局部均值降噪方法充分利用了图像的自相似信息,将与待恢复像素相似的像素加权平均用以估计真实值,取得了非常优秀的去燥效果。非局部均值思想的雏形为年等人提出的双边滤波。在在双边滤波算法中,给定像素点的灰度值由所有邻域像素值根据一定的权重累加求和得到,权值的大小依赖于邻域像素的空间邻近度和邻域像素与该点在灰度上的相似程度。双边滤波器能够较好的保持边缘信息,但由于权值的大小仅仅是由单个像素间的相似度确定,极易被噪声影响,导致去噪能力有限,不过其邻域选取的思想却是值得借鉴,该类方法不再仅局限于较小邻域内加权平均,为后续去噪算法的提供了思想借鉴。不同于双边滤波,非局部均值去噪的算法在全局搜索进行加权平均,同时用图像块之间的加权欧氏距离取代像素之间的距离,来度量像素之间的相似度。非局部均值去噪算法在能够较好的去除噪声,并且能够更好的保留图像的点、线等结构信息,许多学者在此基础上对其进行了深入研究。

将非局部均值降噪方法用于一维时间序列降噪效果也不错,运行环境为MATLAB R2018A。

for idx = Pvec  % loop over all possible differences: s-t
 
    % do summation over p  - Eq. 3 in Darbon
    k=1:N;
    kplus = k+idx;
    igood = find(kplus>0 & kplus<=N);  % ignore OOB data; we could also handle it
    SSD=zeros(size(k));
    SSD(igood) = (signal(k(igood))-signal(kplus(igood))).^2;
    Sdx = cumsum(SSD);
   


    for ii=iStart:iEnd  % loop over all points 's'
        distance = Sdx(ii+PatchHW) - Sdx(ii-PatchHW-1); % Eq 4; this is in place of point-by-point MSE
        % but note the -1; we want to icnlude the point ii-iPatchHW


        w = exp(-distance/h);  %Eq 2 in Darbon
        t = ii+idx;  % in the papers, this is not made explicit
        
        if t>1 && t<=N
            denoisedSig(ii) = denoisedSig(ii) + w*signal(t);
            Z(ii) = Z(ii) + w;
            cnt(ii) = cnt(ii)+1;
        end


    end
end % loop over shifts
完整代码:https://mbd.pub/o/bread/Y52Ump9q

擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表