陆吾生教授最优化与压缩感知应用工具箱
项目简介
本项目基于加拿大维多利亚大学陆吾生教授(Prof. Wu-Sheng Lu)的短期精品课程课件理念开发,旨在深度解析并实现最优化理论在压缩感知(Compressed Sensing, CS)及图像处理领域的实际应用。项目代码提供了一套完整的数值实验流程,从最基础的一维稀疏信号重构,进阶到二维图像的压缩采样修复(Inpainting),最后延伸至基于变分方法的图像去噪。
代码完全基于MATLAB原生语言编写,不依赖复杂的第三方库,通过自包含的函数实现了多种经典的最优化算法和稀疏求解器。
功能特性
本项目在单一脚本中集成了以下三大核心功能模块:
- 一维信号压缩感知重构
* 实现了低采样率下($M < N$)对稀疏信号的精确感知与重建。
* 对比了贪婪算法(OMP)与凸优化松弛算法(BP/Lasso)的重构性能。
* 可视化展示了原始信号、观测过程及重构误差。
- 图像缺失补全 (Image Inpainting)
* 通过压缩感知理论解决图像修复问题,模拟50%随机像素丢失的场景。
* 利用全图离散余弦变换(DCT)作为稀疏基。
* 使用算子形式的快速迭代收缩阈值算法(FISTA)进行图像复原。
* 包含PSNR(峰值信噪比)和SSIM(结构相似性)客观评价指标。
- 全变分 (Total Variation) 图像去噪
* 针对高斯噪声污染的图像,构建ROF(Rudin-Osher-Fatemi)变分模型。
* 实现Chambolle投影对偶算法求解TV最小化问题,有效去除噪声并保持图像边缘。
系统要求与使用方法
系统要求
- MATLAB R2016b 或更高版本。
- Image Processing Toolbox(用于基础图像变换与显示)。
使用方法
- 下载本项目代码。
- 在MATLAB环境中打开脚本文件。
- 直接运行主函数
main。 - 程序将自动执行以下操作:
* 生成合成数据(避免外部文件依赖)。
* 依次运行一维CS、图像Inpainting、TV去噪实验。
* 弹出三个图形窗口展示实验曲线、对比图像及评价指标。
* 并在命令行窗口输出各阶段的处理状态和量化误差结果。
详细实现逻辑与算法解析
本项目的核心逻辑严密遵循最优化理论,以下是对代码具体实现流程的详细剖析:
1. 一维信号压缩感知与稀疏重构
此模块展示了压缩感知的基本原理:$y = Ax + n$。
- 信号生成:构造长度为256的信号,随机选取12个位置赋予高斯随机值,其余为零,形成严格稀疏信号。
- 测量过程:构建64x256的高斯随机测量矩阵 $A$,并对列向量进行归一化处理。叠加高斯白噪声模拟真实观测环境。
- 求解策略:
*
正交匹配追踪 (OMP):通过计算观测残差与测量矩阵列向量的相关性,贪婪地迭代选择支撑集,并利用最小二乘法更新系数。
*
基追踪/Lasso (FISTA):构建L1正则化最小二乘模型 $min 0.5|Ax-y|_2^2 + lambda|x|_1$,利用加速近端梯度法(FISTA)求解,实现了Nesterov动量加速,确保收敛速度为 $O(1/k^2)$。
2. 图像压缩感知与Inpainting
此模块模拟受损图像的修复过程。
- 数据合成:内置合成图像生成函数,通过正弦波、圆形和矩形叠加构造具有纹理和平滑区域的测试图,无需读取外部图片。
- 退化模型:生成随机掩模(Mask),丢失约50%的像素点。
- 重构模型:建立基于DCT域稀疏性的优化模型。问题被建模为寻找DCT系数 $theta$,使得 $0.5|M cdot text{IDCT}(theta) - y|_2^2 + lambda|theta|_1$ 最小化。
- 算子优化实现:为了处理二维图像数据并节省内存,算法实现未显式构造巨大的测量矩阵,而是通过函数句柄(Function Handle)传递线性算子 $A(cdot)$ 和其伴随算子 $A^T(cdot)$。其中 $A$ 操作包含IDCT变换和掩模采样,$A^T$ 包含掩模操作和DCT变换。
3. 全变分 (TV) 图像去噪
此模块专注于消除图像中的加性噪声同时保留边缘特征。
- 噪声模型:向原始合成图像添加高斯白噪声,并截断至 $[0, 1]$ 范围。
- 数学模型:求解各向同性全变分模型 $min |u-g|_2^2 + lambda text{TV}(u)$。
- 对偶算法 (Chambolle Projections):代码没有直接求解非平滑的原问题,而是采用Chambolle提出的半隐式梯度下降法的对偶形式。
* 通过迭代更新对偶变量 $p = (p_x, p_y)$。
* 利用离散梯度算子和离散散度算子。
* 每步迭代包含梯度上升及投影到单位球的操作,最终通过 $u = g - lambda text{div}(p)$ 恢复去噪后的图像。
关键代码与函数说明
为了保证逻辑清晰,主程序调用了以下专门封装的子函数:
实现标准的正交匹配追踪算法。核心步骤包括:计算相关性向量、更新索引集(Support Set)、求解子集上的最小二乘解(使用左除运算)以及更新残差。
针对矩阵形式的 Lasso 问题设计的标准求解器。自动计算 Lipschitz 常数(通过矩阵范数),包含软阈值算子(Soft Thresholding)用于处理 L1 范数,并引入 Nesterov 动量项 $t_{new} = (1 + sqrt{1 + 4t^2}) / 2$ 加速收敛。
solve_fista 的变体,专为大规模图像问题设计。它接受函数句柄作为输入,避免了显式存储 $MN times MN$ 大小的矩阵,直接对图像矩阵进行变换域操作。
实现 Chambolle 的对偶投影算法。函数内部实现了图像的二维差分(离散梯度)和伴随的离散散度计算,通过迭代更新对偶场来逼近全变分最小解。
*
soft_threshold: 实现软阈值收缩算子。
*
create_synthetic_image: 生成包含周期纹理、平滑区域和边缘的测试图像。
*
calculate_psnr: 标准峰值信噪比计算。
*
calculate_ssim: 一个简化的结构相似性计算实现,基于图像的全局均值和方差统计量(注:此为教学演示用的简化版本,非MATLAB内置函数)。