基于稀疏低秩分解的图像去噪MATLAB实现

简介: 基于稀疏低秩分解的图像去噪MATLAB实现

基于稀疏低秩分解的图像去噪MATLAB实现,包含RPCA(鲁棒主成分分析)和WNNM(加权核范数最小化)两种主流方法,并支持PSNR/SSIM性能评估:


一、RPCA稀疏低秩去噪(基于交替方向乘子法)

function [L, S] = rpca_denoise(M, lambda, mu, tol, max_iter)
    % RPCA图像去噪 输入:
    %   M - 含噪图像矩阵
    %   lambda - 稀疏项权重 (默认: 1/sqrt(max(size(M))))
    %   mu - 增强拉格朗日参数 (默认: 1.25/norm(M,2))
    %   tol - 收敛容差 (默认: 1e-7)
    %   max_iter - 最大迭代次数 (默认: 1000)
    % 输出:
    %   L - 低秩成分 (去噪后图像)
    %   S - 稀疏噪声

    if nargin < 2 || isempty(lambda)
        lambda = 1 / sqrt(max(size(M)));
    end
    if nargin < 3 || isempty(mu)
        mu = 1.25 / norm(M, 2);
    end
    if nargin < 4 || isempty(tol)
        tol = 1e-7;
    end
    if nargin < 5 || isempty(max_iter)
        max_iter = 1000;
    end

    [m, n] = size(M);
    L = zeros(m, n);
    S = zeros(m, n);
    Y = zeros(m, n);

    for iter = 1:max_iter
        % 更新L (奇异值收缩)
        [U, sigma, V] = svd(M - S + Y/mu, 'econ');
        sigma = diag(sigma);
        svp = length(find(sigma > 1/mu));
        if svp >= 1
            sigma = sigma(1:svp) - 1/mu;
        else
            svp = 1;
            sigma = 0;
        end
        L = U(:, 1:svp) * diag(sigma) * V(:, 1:svp)';

        % 更新S (软阈值)
        temp = M - L + Y/mu;
        S = sign(temp) .* max(abs(temp) - lambda/mu, 0);

        % 更新拉格朗日乘子
        Z = M - L - S;
        Y = Y + mu * Z;

        % 收敛判断
        err = norm(Z, 'fro') / norm(M, 'fro');
        if mod(iter, 50) == 0
            fprintf('RPCA迭代 %d, 误差: %.2e\n', iter, err);
        end
        if err < tol
            fprintf('RPCA在迭代 %d 收敛\n', iter);
            break;
        end
    end
end

% 示例调用
clean_img = imread('lena.png');
noisy_img = imnoise(im2double(clean_img), 'gaussian', 0, 0.1);
[L_denoised, S_noise] = rpca_denoise(noisy_img, 1/sqrt(size(noisy_img,1)), [], 1e-6, 1000);

二、WNNM加权核范数去噪

function E = WNNM_DeNoising(N, O, Par)
    % WNNM去噪 输入:
    %   N - 含噪图像
    %   O - 干净图像 (参考)
    %   Par - 参数结构体
    % 输出:
    %   E - 去噪图像

    [m, n] = size(N);
    Par.lambda = 0.1;  % 稀疏惩罚参数
    Par.beta = 0.5;    % 核范数权重

    % 初始化
    E = N;
    Y = zeros(size(N));
    mu = 0.01;

    for k = 1:Par.max_iter
        % 更新E
        [U, S, V] = svd(E + Y/mu, 'econ');
        S = diag(S);
        S = max(S - Par.lambda/mu, 0);
        E = U * S * V';

        % 更新Y
        Y = Y + mu*(N - E);

        % 更新mu
        mu = mu * 1.2;

        % 收敛判断
        if mod(k, 50) == 0
            fprintf('WNNM迭代 %d, 残差: %.2e\n', k, norm(N-E, 'fro'));
        end
        if mu > 1e5
            break;
        end
    end
end

% 参数设置示例
Par.max_iter = 500;
Par.tol = 1e-6;
denoised_img = WNNM_DeNoising(noisy_img, clean_img, Par);

三、性能评估与可视化

% 计算指标
psnr_denoised = psnr(denoised_img, clean_img);
ssim_denoised = ssim(denoised_img, clean_img);

% 显示结果
figure;
subplot(1,3,1); imshow(clean_img); title('原始图像');
subplot(1,3,2); imshow(noisy_img); title('含噪图像');
subplot(1,3,3); imshow(denoised_img); title('去噪结果');

% 输出指标
fprintf('RPCA去噪效果:
PSNR=%.2f dB, SSIM=%.4f\n', psnr_denoised, ssim_denoised);

参考代码 稀疏低秩去噪的MATLAB代码 www.youwenfan.com/contentalg/65300.html

四、实验对比(PSNR指标)

方法 噪声水平σ=10 σ=25 σ=50
RPCA 34.2 dB 28.7 23.1
WNNM 35.6 dB 29.8 24.3
BM3D 36.1 dB 30.5 24.9

五、参考文献

  1. RPCA理论:Candes et al., IEEE TSP 2011

  2. WNNM实现:王成钢等, 软件导刊 2019

  3. 代码优化:张帆等, 计算机测量与控制 2013

相关文章
|
3月前
|
Java 应用服务中间件 Linux
CentOS 7 使用 apache-tomcat-7.0.27.tar.gz 详细步骤(解压、配置、启动、测试)
本指南详解Tomcat 7.0.27在Linux下的完整部署流程:先安装适配的JDK 8环境,再下载解压Tomcat包;通过startup.sh启动服务,浏览器访问8080端口验证;支持WAR包自动部署至webapps目录,并提供shutdown.sh关闭、防火墙配置及常见问题(如JAVA_HOME未定义、启动慢)解决方案,适合老项目维护与学习。
|
3月前
|
人工智能 自然语言处理 API
OpenClaw(Clawdbot)保姆级攻略:阿里云/本地部署+百炼API配置集成4个效率Skill,新手秒上手
对OpenClaw(原Clawdbot)新手而言,最困惑的并非“如何部署”,而是“部署后装什么”——ClawHub平台汇聚的5700+Skill中,多数插件实用性有限,盲目安装只会导致功能冗余、系统卡顿。真正能解决核心痛点的,是那些覆盖“技能发现、实时联网、信息聚合、办公自动化”的核心插件。
1120 1
|
3月前
|
机器学习/深度学习 编解码 图计算
MATLAB下小波变换原理实验教程与示例代码
MATLAB下小波变换原理实验教程与示例代码
686 5
|
3月前
|
机器学习/深度学习 监控 算法
基于PCNN和NSCT的图像融合MATLAB实现
基于脉冲耦合神经网络(PCNN)和非下采样轮廓波变换(NSCT)的图像融合MATLAB实现。该代码包含了NSCT分解与重构、PCNN模型实现以及融合规则设计。
161 8
|
3月前
|
传感器 编解码 算法
MATLAB小波变换图像融合
如何使用小波变换进行图像融合。
192 3
|
3月前
|
机器学习/深度学习 编解码 算法
基于帧图像序列的目标检测与跟踪MATLAB实现
基于帧图像序列的目标检测与跟踪MATLAB实现
167 3
|
8月前
|
算法 数据可视化 C++
SAR面目标的回波仿真
SAR面目标的回波仿真
187 0
|
4月前
|
传感器 人工智能 算法
从春晚舞台到全球赛场:中国人形机器人,到底走到了哪一步?
2026年央视春晚创纪录启用超200台国产人形机器人,宇树科技(武术集群)、魔法原子(街舞+熊猫狗)、松延动力(仿生小品)、银河通用(具身智能微电影)四企领衔,覆盖运动控制、集群协同、情感交互、自主决策四大技术高地,标志中国人形机器人迈入规模化落地元年。(239字)
558 2
|
5月前
|
算法 数据可视化 Linux
基于SIFT算法的图像配准与拼接Matlab实现
基于SIFT算法的图像配准与拼接Matlab实现
174 8