MATLAB实现基于RPCA(鲁棒主成分分析)的图像稀疏低秩分解
一、核心算法实现
function [L,S] = RPCA_ADMM(img, lambda, mu, rho, max_iter, tol)
% 输入参数:
% img: 输入图像(灰度图像)
% lambda: 稀疏正则化参数(默认1/sqrt(max(size(img))))
% mu: 初始惩罚参数(默认1.0)
% rho: 增广拉格朗日参数(默认1.2)
% max_iter: 最大迭代次数(默认1000)
% tol: 收敛阈值(默认1e-7)
[m,n] = size(img);
L = zeros(m,n);
S = zeros(m,n);
Y = zeros(m,n);
mu_bar = 1e6; % 最大惩罚参数
% 初始化参数
if nargin < 2
lambda = 1 / sqrt(max(m,n));
end
if nargin < 3
mu = 1.0;
end
if nargin < 4
rho = 1.2;
end
if nargin < 5
max_iter = 1000;
end
if nargin < 6
tol = 1e-7;
end
% 主迭代循环
for iter = 1:max_iter
% 更新低秩矩阵L(奇异值阈值)
temp = img - S + Y/mu;
[U,Sigma,V] = svd(temp,'econ');
diagS = diag(Sigma);
svp = sum(diagS > 1/mu);
if svp < min(m,n)/2
L = U(:,1:svp) * diag(diagS(1:svp)-1/mu) * V(:,1:svp)';
else
L = U * diag(diagS - 1/mu) * V';
end
% 更新稀疏矩阵S(软阈值)
temp = img - L + Y/mu;
S = max(temp - lambda/mu, 0) + min(temp + lambda/mu, 0);
% 更新拉格朗日乘子Y
Y = Y + mu*(img - L - S);
% 自适应调整惩罚参数
mu = min(mu*rho, mu_bar);
% 收敛判断
primal_residual = norm(img - L - S, 'fro');
dual_residual = rho * norm(S - (S_prev), 'fro');
if primal_residual < tol && dual_residual < tol
break;
end
S_prev = S;
end
end
二、关键参数解析
| 参数 | 推荐值 | 作用说明 |
|---|---|---|
lambda | 1/√(max(m,n)) | 控制稀疏项强度 |
mu | 1.0(动态调整) | 增广拉格朗日惩罚参数 |
rho | 1.2-1.5 | 收敛加速因子 |
max_iter | 500-2000 | 最大迭代次数 |
tol | 1e-5-1e-7 | 相对误差容忍度 |
三、完整应用示例
% 读取并预处理图像
img = imread('lena.jpg');
img_gray = rgb2gray(img);
img_gray = im2double(img_gray);
% 参数设置
lambda = 1/sqrt(max(size(img_gray)));
mu = 1.0;
rho = 1.2;
max_iter = 1000;
tol = 1e-7;
% 执行RPCA分解
tic;
[L,S] = RPCA_ADMM(img_gray, lambda, mu, rho, max_iter, tol);
toc;
% 可视化结果
figure;
subplot(1,3,1); imshow(img_gray); title('原始图像');
subplot(1,3,2); imshow(L); title('低秩部分(背景)');
subplot(1,3,3); imshow(S); title('稀疏部分(细节/噪声)');
% 重构图像
reconstruction = L + S;
figure;
subplot(1,2,1); imshow(img_gray); title('原始图像');
subplot(1,2,2); imshow(reconstruction); title('RPCA重构图像');
四、应用场景与效果
1. 背景建模
- 实现流程: 对视频帧序列构建数据矩阵 分解得到静态背景(低秩部分) 动态前景(稀疏部分)用于目标检测
2. 医学影像增强
- 预处理:对MRI/PET图像进行RPCA分解
- 后处理:低秩部分用于病灶区域增强,稀疏部分抑制运动伪影
3. 遥感图像修复
-
流程:
五、结果评估指标
-
重构误差:
error = norm(img - (L+S),'fro') / norm(img,'fro');目标值:<5%
-
低秩保持率:
rank_ratio = rank(L) / rank(img);典型值:>90%
-
稀疏度:
sparsity = nnz(S) / numel(S);目标值:<5%
六、参考
-
代码 对图像进行稀疏低秩分解,使用RPCA算法 www.youwenfan.com/contentcsk77963.html
-
Wright J, Ganesh A, Rao S, et al. Robust principal component analysis: Exact recovery of corrupted low-rank matrices via convex optimization[C]//CVPR. 2009.
MATLAB实现RPCA图像分解
1373

被折叠的 条评论
为什么被折叠?



