基于稀疏表示的图像超分辨率算法
题目描述
图像超分辨率是指从一张或多张低分辨率图像中重建出高分辨率图像的技术。基于稀疏表示的图像超分辨率算法是其中的一种经典方法,其核心思想是:任何图像块都可以在一个过完备字典中通过少量原子的线性组合(即稀疏表示)来近似。该算法假设低分辨率图像块和高分辨率图像块共享相同的稀疏编码系数。通过学习一对耦合的字典(一个对应低分辨率图像块,一个对应高分辨率图像块),我们可以先为输入的低分辨率图像块找到其稀疏编码,然后利用这个编码和训练好的高分辨率字典,直接重建出对应的高分辨率图像块。
解题过程
-
问题建模与基本假设
- 目标:给定一张低分辨率图像 \(I_l\),我们希望重建出其对应的高分辨率图像 \(I_h\)。
- 核心假设(稀疏先验):自然图像中的小块(patch)在某个合适的基(字典)下存在稀疏表示。这意味着,一个图像块可以用字典中少数几个原子的线性组合来很好地表达。
- 关键关联假设:低分辨率图像块 \(y\) 和其对应的高分辨率图像块 \(x\) 在各自的字典 \(D_l\) 和 \(D_h\) 下,具有相同的稀疏编码向量 \(\alpha\)。即:
- 低分辨率块: \(y ≈ D_l \alpha\)
- 高分辨率块: \(x ≈ D_h \alpha\)
- 其中,\(\alpha\) 是一个稀疏向量(大部分元素为0)。
-
算法流程概述
整个算法分为两个主要阶段:字典训练阶段 和 重建阶段。 -
第一阶段:耦合字典的训练
我们需要一对字典 \(D_h\)(高分辨率字典)和 \(D_l\)(低分辨率字典),使得它们能共享稀疏编码。- 准备训练数据:
- 收集一组高分辨率自然图像作为训练集。
- 通过模糊和下采样这些高分辨率图像,生成对应的低分辨率图像。
- 从高分辨率图像中抽取大量小块(例如 5x5 或 7x7 像素),这些小块构成高分辨率样本集 \(X = [x_1, x_2, ..., x_n]\)。
- 从对应的低分辨率图像中,在相同位置抽取小块(尺寸通常与高分辨率块经过下采样因子缩放后一致,例如,如果高分辨率块是7x7,下采样因子为3,则低分辨率块可能是3x3)。然后,对这些低分辨率块进行特征提取(例如,提取其一阶、二阶梯度特征,以增强纹理信息),构成低分辨率特征样本集 \(Y = [y_1, y_2, ..., y_n]\)。
- 联合字典学习:
目标是最小化以下代价函数,同时学习出 \(D_h\)、\(D_l\) 和所有样本对应的稀疏编码 \(A = [\alpha_1, \alpha_2, ..., \alpha_n]\):
- 准备训练数据:
\[ \min_{D_h, D_l, A} \frac{1}{N} \sum_{i=1}^{N} ( \frac{1}{2} \| x_i - D_h \alpha_i \|_2^2 + \frac{1}{2} \| y_i - D_l \alpha_i \|_2^2 + \lambda \| \alpha_i \|_1 ) \]
* 公式解释:
* $ \| x_i - D_h \alpha_i \|_2^2 $: 确保高分辨率块能被 $ D_h $ 和稀疏编码 $ \alpha_i $ 很好地重建。
* $ \| y_i - D_l \alpha_i \|_2^2 $: 确保低分辨率特征块能被 $ D_l $ 和**同一个**稀疏编码 $ \alpha_i $ 很好地重建。这是耦合的关键。
* $ \| \alpha_i \|_1 $: L1正则化项,用于强制稀疏性,即让 $ \alpha_i $ 中非零元素尽可能少。$ \lambda $ 是控制稀疏性强度的参数。
* **求解方法**: 这个问题通常使用类似K-SVD的算法或其变种进行迭代求解,交替地更新稀疏编码 $ A $ 和字典 $ D_h, D_l $。
- 第二阶段:基于稀疏编码的图像重建
当训练好耦合字典 \((D_l, D_h)\) 后,就可以对新的低分辨率图像进行超分辨率重建了。- 输入: 待处理的高分辨率图像 \(I_l\)。
- 预处理:
- 对 \(I_l\) 进行双三次插值,将其放大到目标高分辨率图像的尺寸。我们称这个插值后的图像为 \(I_i\)(初始估计)。这一步是为了让后续处理的图像块尺寸对齐。
- 从 \(I_i\) 中按光栅扫描顺序(通常有重叠)提取图像块。
- 对每个低分辨率图像块进行稀疏编码:
对于每个提取出的低分辨率块 \(y\)(同样需要提取其梯度等特征),我们求解以下稀疏编码问题:
\[ \min_{\alpha} \| y - D_l \alpha \|_2^2 + \lambda \| \alpha \|_1 \]
这个问题的目标是找到能使低分辨率块 $ y $ 在字典 $ D_l $ 上表示误差最小,同时又最稀疏的系数向量 $ \alpha $。可以使用正交匹配追踪(OMP)或LASSO等算法来求解。
* **高分辨率块重建**:
一旦得到了最优的稀疏编码 $ \hat{\alpha} $,我们就可以利用耦合关系,直接使用高分辨率字典 $ D_h $ 来重建对应的高分辨率图像块:
\[ x = D_h \hat{\alpha} \]
* **图像融合**:
1. 将所有重建出的高分辨率图像块 $ x $ 放置回它们在初始估计图像 $ I_i $ 中的对应位置。
2. 由于图像块之间通常有重叠,同一像素位置可能会被多个重建块覆盖。对这些重叠区域的像素值进行平均(或使用加权平均),从而得到最终的重建高分辨率图像 $ I_h $。
* **后处理(可选)**: 为了进一步提升视觉效果,有时会对融合后的图像进行一次全局约束优化,例如使其与插值后的低分辨率图像保持一致,并增强边缘。
总结
基于稀疏表示的超分辨率算法通过利用自然图像的稀疏先验和低/高分辨率块间的耦合关系,实现了从低分辨率图像中恢复出细节信息。它的优势在于有较强的理论支撑,并且不依赖于庞大的深度学习模型。然而,其计算复杂度较高(特别是编码阶段),且重建效果受限于字典的表达能力,后来逐渐被基于深度学习的端到端方法(如SRCNN、EDSR等)所超越,但它仍是超分辨率领域一个非常重要和经典的思想。