基于张量低秩分解(Tensor Low-Rank Decomposition)的图像复原算法
题目描述
在计算机视觉的图像复原任务(如去噪、去雨、去雾等)中,图像数据通常可以被组织成一个三维张量(例如,空间高度×宽度×颜色通道,或视频中高度×宽度×帧序列)。这些数据在多个维度上往往存在高度的相关性和冗余性。张量低秩分解算法通过假设干净的图像/视频数据具有低秩特性,而噪声、雨纹、雾等退化成分是稀疏的或具有特定的结构,从而将退化图像张量分解为“低秩(干净部分)+ 稀疏(退化部分)”两个分量,以此实现复原。本题目将详细讲解如何利用张量低秩分解模型进行图像复原,特别是通过鲁棒主成分分析(Robust Principal Component Analysis, RPCA)的张量扩展方法。
解题过程循序渐进讲解
第一步:理解问题的数学形式——从矩阵到张量
- 经典矩阵低秩分解回顾(RPCA):
- 对于一个矩阵 \(M \in \mathbb{R}^{m \times n}\),经典的RPCA模型假设它可以被分解为:\(M = L + S\)。
- 其中,\(L\) 是一个低秩矩阵,代表数据中的主成分或干净部分(例如,视频中的静态背景)。
- \(S\) 是一个稀疏矩阵,代表噪声、异常值或前景运动物体(例如,视频中的运动目标或图像中的噪声点)。
- 优化目标为:最小化 \(L\) 的秩(rank)和 \(S\) 的稀疏性(通常用L1范数 \(\|S\|_1\) 度量)。这是一个NP难问题,通常使用其凸松弛形式求解:
\[ \min_{L, S} \|L\|_*} + \lambda \|S\|_1 \quad \text{s.t.} \quad M = L + S \]
其中 $\|L\|_*$ 是 $ L $ 的核范数(奇异值之和,是秩的凸代理),$ \lambda $ 是平衡参数。
- 推广到张量:
- 图像或视频数据是自然的张量(三维或更高维)。直接将上述矩阵模型应用于向量化后的数据会破坏空间结构信息。
- 目标:将低秩假设从矩阵推广到张量。但张量的“秩”定义比矩阵复杂(有多种定义,如CP秩、Tucker秩等)。
- 常用方法是基于 Tucker分解 或更具体的 张量核范数(Tensor Nuclear Norm, TNN)。核心思想是:沿着张量的每个模式(mode)展开,得到的展开矩阵应该是低秩的。
第二步:构建张量低秩复原模型
- 数据准备与建模:
- 假设观测到的退化图像(或视频片段)是一个三维张量 \(\mathcal{T} \in \mathbb{R}^{H \times W \times C}\)(对于彩色图像,C=3;对于视频,第三维可以是帧数)。
- 我们假设 \(\mathcal{T}\) 由两部分组成:低秩的干净图像张量 \(\mathcal{L}\) 和稀疏的退化/噪声张量 \(\mathcal{S}\)。
\[ \mathcal{T} = \mathcal{L} + \mathcal{S} \]
-
定义张量的低秩性:
- 这里我们采用基于张量奇异值分解(t-SVD) 的框架,它定义了一个合适的张量核范数。
- 关键操作:
- 块循环矩阵(Block Circulant Matrix):将一个张量 \(\mathcal{X} \in \mathbb{R}^{n_1 \times n_2 \times n_3}\) 通过一个特定的操作(沿着第三维进行快速傅里叶变换)映射到一个块对角矩阵。
- 在这个变换域中,可以对每个“切片”分别定义矩阵的SVD和核范数。
- 张量核范数 \(\|\mathcal{L}\|_*\) 定义为变换域中所有矩阵切片核范数的平均。它有效地度量了张量在各维度上的低秩性。
-
优化问题 formulation:
- 将矩阵RPCA模型推广,我们得到张量鲁棒主成分分析(Tensor RPCA, TRPCA) 模型:
\[ \min_{\mathcal{L}, \mathcal{S}} \|\mathcal{L}\|_*} + \lambda \|\mathcal{S}\|_1 \quad \text{s.t.} \quad \mathcal{T} = \mathcal{L} + \mathcal{S} \]
* $\|\mathcal{S}\|_1$ 是张量 $ \mathcal{S} $ 所有元素绝对值的和,用于促进稀疏性。
* $ \lambda $ 是一个正的正则化参数,控制低秩项和稀疏项的权衡。对于高斯噪声,$ \lambda $ 通常与 $ 1/\sqrt{\max(n_1, n_2)n_3} $ 成正比。
第三步:模型求解算法——交替方向乘子法(ADMM)
该优化问题通常使用ADMM求解,因为它能有效处理带约束的非光滑问题。
- 引入辅助变量与增广拉格朗日函数:
- 引入辅助变量 \(\mathcal{J}\) 将目标函数中的变量解耦,将原问题等价为:
\[ \min_{\mathcal{L}, \mathcal{S}, \mathcal{J}} \|\mathcal{J}\|_*} + \lambda \|\mathcal{S}\|_1 \quad \text{s.t.} \quad \mathcal{T} = \mathcal{L} + \mathcal{S}, \quad \mathcal{L} = \mathcal{J} \]
* 构造增广拉格朗日函数:
\[ \begin{aligned} \mathcal{L}_{\rho}(\mathcal{L}, \mathcal{S}, \mathcal{J}, \mathcal{Y}_1, \mathcal{Y}_2) = & \|\mathcal{J}\|_*} + \lambda \|\mathcal{S}\|_1 + \langle \mathcal{Y}_1, \mathcal{T} - \mathcal{L} - \mathcal{S} \rangle \\ & + \langle \mathcal{Y}_2, \mathcal{L} - \mathcal{J} \rangle + \frac{\rho}{2} (\|\mathcal{T} - \mathcal{L} - \mathcal{S}\|_F^2 + \|\mathcal{L} - \mathcal{J}\|_F^2) \end{aligned} \]
其中 $ \mathcal{Y}_1, \mathcal{Y}_2 $ 是拉格朗日乘子张量,$ \rho > 0 $ 是惩罚参数,$ \|\cdot\|_F $ 是张量的Frobenius范数(所有元素平方和开根),$ \langle \cdot, \cdot \rangle $ 表示内积。
- ADMM迭代求解步骤:
算法迭代更新变量 \(\mathcal{J}, \mathcal{S}, \mathcal{L}\) 以及乘子 \(\mathcal{Y}_1, \mathcal{Y}_2\)。在第 \(k+1\) 次迭代中:- 更新 \(\mathcal{J}\):固定其他变量,最小化关于 \(\mathcal{J}\) 的子问题。
\[ \mathcal{J}^{k+1} = \arg\min_{\mathcal{J}} \|\mathcal{J}\|_*} + \frac{\rho}{2} \|\mathcal{L}^k - \mathcal{J} + \mathcal{Y}_2^k / \rho \|_F^2 \]
* 这个问题的解是 **张量奇异值阈值算子(Tensor Singular Value Thresholding, t-SVT)**。
* **具体操作**:
1. 计算 $ \mathcal{A} = \mathcal{L}^k + \mathcal{Y}_2^k / \rho $。
2. 对 $ \mathcal{A} $ 进行**张量奇异值分解(t-SVD)**。这涉及到对 $ \mathcal{A} $ 沿第三维做FFT,然后在傅里叶域对每个前向切片做矩阵SVD。
3. 对每个SVD得到的奇异值矩阵进行软阈值收缩:$ \Sigma_i' = \text{soft-threshold}(\Sigma_i, 1/\rho) $,其中软阈值函数为 $ \text{soft-threshold}(x, \tau) = \text{sign}(x)\max(|x|-\tau, 0) $。
4. 用收缩后的奇异值矩阵重构每个傅里叶域切片,再进行逆FFT,得到 $ \mathcal{J}^{k+1} $。
* **更新 $ \mathcal{S} $**:固定其他变量,最小化关于 $ \mathcal{S} $ 的子问题。
\[ \mathcal{S}^{k+1} = \arg\min_{\mathcal{S}} \lambda \|\mathcal{S}\|_1 + \frac{\rho}{2} \|\mathcal{T} - \mathcal{L}^k - \mathcal{S} + \mathcal{Y}_1^k / \rho \|_F^2 \]
* 这个问题的解是逐元素的 **软阈值算子**:
\[ \mathcal{S}^{k+1} = \text{soft-threshold}\left( \mathcal{T} - \mathcal{L}^k + \mathcal{Y}_1^k / \rho, \lambda / \rho \right) \]
* **更新 $ \mathcal{L} $**:固定其他变量,最小化关于 $ \mathcal{L} $ 的子问题。这是一个二次最小二乘问题,有闭式解:
\[ \mathcal{L}^{k+1} = \frac{1}{2} \left[ (\mathcal{T} - \mathcal{S}^{k+1} + \mathcal{J}^{k+1}) + (\mathcal{Y}_1^k - \mathcal{Y}_2^k) / \rho \right] \]
* **更新拉格朗日乘子**:
\[ \begin{aligned} \mathcal{Y}_1^{k+1} &= \mathcal{Y}_1^k + \rho (\mathcal{T} - \mathcal{L}^{k+1} - \mathcal{S}^{k+1}) \\ \mathcal{Y}_2^{k+1} &= \mathcal{Y}_2^k + \rho (\mathcal{L}^{k+1} - \mathcal{J}^{k+1}) \end{aligned} \]
* **判断收敛**:检查原始残差 $ \|\mathcal{T} - \mathcal{L}^{k+1} - \mathcal{S}^{k+1}\|_F $ 和对偶残差 $ \rho \|\mathcal{J}^{k+1} - \mathcal{J}^k\|_F $ 是否小于预设阈值。
第四步:应用于具体图像复原任务
- 图像去噪:
- 直接将噪声图像作为 \(\mathcal{T}\) 输入。对于加性高斯噪声或椒盐噪声,算法能较好地分离出低秩的干净图像 \(\mathcal{L}\) 和稀疏的噪声 \(\mathcal{S}\)。
- 图像去雨/去雪:
- 雨线或雪线在图像中通常是稀疏的、有一定方向性的结构。
- 有时需要引入额外的先验。例如,可以将图像块相似性(非局部自相似性)结合进来,构造一个由相似图像块组成的四维张量,再进行TRPCA分解,这被称为低秩张量补全(LRTC) 或 非局部张量RPCA。
- 图像去雾/去模糊(需谨慎):
- 雾或全局模糊通常不是稀疏的,而是对整个图像有平滑的影响。标准的TRPCA模型可能不直接适用。
- 需要修改模型,例如,将 \(\mathcal{S}\) 的稀疏约束改为其他形式的先验(如雾线先验、梯度稀疏性等),或者将模糊核估计问题与低秩分解联合建模。
第五步:总结与延伸
- 核心优势:张量低秩分解算法能够同时利用图像的空间结构信息(通过张量建模)和全局低秩先验,对于处理具有相关性和冗余性的视觉数据非常有效,尤其在退化成分可被视为稀疏异常时。
- 局限性:
- 计算量较大,尤其是t-SVD操作涉及多次FFT和矩阵SVD。
- 对于复杂的、非稀疏的退化(如运动模糊、非均匀光照),需要更复杂的模型扩展。
- 参数 \(\lambda\) 的选择对结果影响较大,通常需要根据经验或通过交叉验证调整。
- 现代发展:为了提升性能,研究者们将深度网络与张量低秩模型结合。例如,用网络学习更强大的低秩或稀疏表示,或者用网络参数化ADMM的求解步骤(即展开优化算法为深度网络),形成基于模型的深度学习,兼顾了模型的可解释性与深度学习的强大表示能力。
通过以上五个步骤,我们完成了从问题建模(张量RPCA)、定义核心概念(张量核范数)、设计求解算法(ADMM与t-SVT),到具体应用和延伸讨论的完整讲解。