m基于KSVD字典训练法的图像噪声滤波matlab仿真,对比图像中值滤波,ACWMF滤波,DWMR滤波以及rold滤波

简介: m基于KSVD字典训练法的图像噪声滤波matlab仿真,对比图像中值滤波,ACWMF滤波,DWMR滤波以及rold滤波

1.算法描述

   K-SVD算法是一种新型的字典训练法,其基本原理是基于K-SVD算法改进所得到的,其主要过程是字典的训练过程,其具有非常好的自适应性能。该算法的整体流程图如下图所示:

5767b41420b4ac8046daaf95accb7533_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

   基于KSVD字典学习的图像去噪方法,其可以克服冲击噪声中纹理细节丢失,图像突变干扰等影响因素。该算法的核心内容为设置字典D为DCT字典,然后采用KSVD算法对字典D的原子和相应系数矩阵进行更新,将更新后的D、相应系数矩阵和代入原始图像的估计公式,得到含噪图像的去噪结果。

 从线性组合的角度来看,K-SVD训练算法的稀疏模型可表示为:

5b33ab8b18fed1149a5b8be6982d0dec_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

   那么,K-SVD算法的基本原理为在一组基下,获得信号y的一个近似稀疏表示x,且x满足尽可能好的恢复信号x。其中公式的计算过程是一个迭代过程,当字典D固定的时候,通过OMP正交匹配追踪算法找到字典D上Y的稀疏表示的稀疏矩阵D,然后再根据系数矩阵X找到更好的字典D。    

0ddbce11df1852e100a64e76628f3647_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
f3662dfca14b5364b68864291bcee2e8_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
df0abf0b45a4f732d0fe2c879876db4b_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.仿真效果预览
matlab2022a仿真结果如下:

0b5f8c373700a33ce6c97a325370b3b5_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
c04b57e9758a4e7c7c934016fdb0ba2f_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

     对不同噪声密度的冲击噪声干扰的图像进行滤波测试,这里分别设置脉冲噪声密度nl大小为0.1,0.4,0.7,对测试后图像进行质量评价,评价函数分别采用峰值信噪比(Peak Signal to Noise Ratio,PSNR)和图像相似度(structural similarity,SSIM),其中PSNR计算公式如下:

36cd42389931f4a2b6fa8d23b01a77ab_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

其中Peak就是指8bits(n=8)表示法的最大值255。MSE指Mean Square Error。PSNR的单位为dB。所以PSNR值越大,就代表失真越少。

SSIM计算公式如下:

d88402b36effd85cab47ac16ac011090_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

当两张影像其中一张为无失真影像,另一张为失真后的影像,二者的结构相似性可以看成是失真影像的影像品质衡量指标。 

4ba06c32a04d2c6b5cdbbcf3830061e9_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
597fe0b573c0073450907a1fae7bf282_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

      从上述仿真结果可知,随着噪声密度的增加,测试图像的滤波图像质量逐渐降低,当噪声密度为0.1的时候,滤波后的图像,其PSNR值大概在35左右附近,SSIM值在0.96附近;当噪声密度为0.4的时候,滤波后的图像,其PSNR值大概在29左右附近,SSIM值在0.9附近;当噪声密度为0.7的时候,滤波后的图像,其PSNR值大概在25左右附近,SSIM值在0.78附近。即随着噪声的增加,滤波后的图像质量逐渐降低。

3.MATLAB核心程序

    iterNum
    % iterNum
    % find the coefficients one by one
    % ===remove the corrupted pixels and make some change on Dictionary==
    for kk = 1:1:size(Data,2)
        % kk
        tempon = Ionblocks(:,kk);
        location = find(tempon==1); %find locations of the good points
        tempblock = Data(location,kk);
        tempD = Dictionary(location,:);
        tempD = tempD./repmat(sqrt(sum(tempD.^2)), size(tempD, 1), 1);        
        if (Reduce_DC)
            vecOfMeans = mean(tempblock);
            tempblock = tempblock - vecOfMeans;
        end
        %OMP压缩感知
            if WS == 1
               [sols, iters, activationHist] = WOMP(tempD, tempblock, size(Dictionary,2),64/2, 0, 0, 0, 1e-5,errT);
               CoefMatrix(:,kk) = sols;  
            else
               CoefMatrix(:,kk) = OMP(tempD,tempblock,L);
            end
    end
   %===================================================================  
    replacedVectorCounter = 0;
    rPerm = randperm(size(Dictionary,2));
    for j = rPerm
        %优化最佳的字典元素
        [betterDictionaryElement,CoefMatrix,addedNewVector] = Modified_I_findBetterDictionaryElement(Data,Ionblocks,[FixedDictionaryElement,Dictionary],j+size(FixedDictionaryElement,2),CoefMatrix ,param.L);
        Dictionary(:,j) = betterDictionaryElement;
        if (param.preserveDCAtom)
            tmpCoef = FixedDictionaryElement\betterDictionaryElement;
            Dictionary(:,j) = betterDictionaryElement - FixedDictionaryElement*tmpCoef;
            Dictionary(:,j) = Dictionary(:,j)./sqrt(Dictionary(:,j)'*Dictionary(:,j));
        end
        replacedVectorCounter = replacedVectorCounter+addedNewVector;
    end
    if (iterNum>=1 & param.displayProgress)
        if (param.errorFlag==0)
            output.totalerr(iterNum) = sqrt(sum(sum((Data-[FixedDictionaryElement,Dictionary]*CoefMatrix).^2))/prod(size(Data)));
            disp(['Iteration   ',num2str(iterNum),'   Total error is: ',num2str(output.totalerr(iterNum))]);
        else
            output.numCoef(iterNum) = length(find(CoefMatrix))/size(Data,2);
            disp(['Iteration   ',num2str(iterNum),'   Average number of coefficients: ',num2str(output.numCoef(iterNum))]);
        end
    end
    %清除原来的旧的字典
    Dictionary = Modified_I_clearDictionary(Dictionary,CoefMatrix(size(FixedDictionaryElement,2)+1:end,:),Data,Ionblocks);
    if (isfield(param,'waitBarHandle'))
        waitbar(iterNum/param.counterForWaitBar);
    end
end
output.CoefMatrix = CoefMatrix;
Dictionary = [FixedDictionaryElement,Dictionary];
SEL         = 0;
 
%冲击密度
nl          = 0.5;
 
%************************************************************************
%读取图像
Is          = double(imread('Pic\1.png'));
%由于仿真速度较慢,将图像大小统一变为256*256大小的图像
Is          = imresize(Is,[256,256]);
%下面判断图像是否是灰度图
[R,C,K]     = size(Is);
if K == 1
   I0 = Is; 
else
   I0 = Is(:,:,1);  
end
 
%加入冲击噪声
[I1,Ion]    = impulsenoise(I0,nl,'random-value');
 
%进行滤波
%字典搜索参数
sigma       = 5;  
Th          = 5; 
flagInitialD= 1;  
flagOMP     = 1; 
 
 
%去噪声滤波
I2          = medfilt2(I1,[3,3]);
%计算PSNR指标
psnrIdenoise                = PSNRs(I2,I0);
%计算SSIM指标
[mssim,ssim_map]            = ssim_index(I2,I0);
psnrIdenoise
mssim
相关文章
|
2月前
|
算法 数据安全/隐私保护
织物图像的配准和拼接算法的MATLAB仿真,对比SIFT,SURF以及KAZE
本项目展示了织物瑕疵检测中的图像拼接技术,使用SIFT、SURF和KAZE三种算法。通过MATLAB2022a实现图像匹配、配准和拼接,最终检测并分类织物瑕疵。SIFT算法在不同尺度和旋转下保持不变性;SURF算法提高速度并保持鲁棒性;KAZE算法使用非线性扩散滤波器构建尺度空间,提供更先进的特征描述。展示视频无水印,代码含注释及操作步骤。
|
4月前
|
Windows
基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道
本文通过MATLAB仿真实现了OFDM系统中BPSK、QPSK、4QAM、16QAM和32QAM调制解调过程,并在加性高斯白噪声信道及TDL瑞利衰落信道下计算了不同信噪比条件下的误比特率。
275 4
基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道
|
3月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
5月前
|
算法
基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
本文介绍了一种使用卡尔曼滤波(Kalman Filter)对无人飞行器(UAV)在三维空间中的运动轨迹进行预测和估计的方法。该方法通过状态预测和观测更新两个关键步骤,实时估计UAV的位置和速度,进而生成三维轨迹。在MATLAB 2022a环境下验证了算法的有效性(参见附图)。核心程序实现了状态估计和误差协方差矩阵的更新,并通过调整参数优化滤波效果。该算法有助于提高轨迹跟踪精度和稳定性,适用于多种应用场景,例如航拍和物流运输等领域。
362 12
|
5月前
|
算法
基于粒子群优化的图像融合算法matlab仿真
这是一个基于粒子群优化(PSO)的图像融合算法,旨在将彩色模糊图像与清晰灰度图像融合成彩色清晰图像。在MATLAB2022a中测试,算法通过PSO求解最优融合权值参数,经过多次迭代更新粒子速度和位置,以优化融合效果。核心代码展示了PSO的迭代过程及融合策略。最终,使用加权平均法融合图像,其中权重由PSO计算得出。该算法体现了PSO在图像融合领域的高效性和融合质量。
|
6月前
|
算法
m基于GA遗传优化的高斯白噪声信道SNR估计算法matlab仿真
**MATLAB2022a模拟展示了遗传算法在AWGN信道中估计SNR的效能。该算法利用生物进化原理全局寻优,解决通信系统中复杂环境下的SNR估计问题。核心代码执行多代选择、重组和突变操作,逐步优化SNR估计。结果以图形形式对比了真实SNR与估计值,并显示了均方根误差(RMSE),体现了算法的准确性。**
71 0
基于高通滤波器的ECG信号滤波及心率统计matlab仿真
**摘要:** 使用MATLAB2022a,实施高通滤波对ECG信号预处理,消除基线漂移,随后分析心率。系统仿真展示效果,核心代码涉及IIR HPF设计,如二阶滤波器的差分方程。通过滤波后的信号,检测R波计算RR间期,从而得到心率。滤波与R波检测是心电生理研究的关键步骤,平衡滤波性能与计算资源是设计挑战。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
226 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
142 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
111 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

热门文章

最新文章