快速全变差反褶积 (Fast Total Variation Deconvolution)
本项目实现了一种基于交替方向法(ADM)和增广拉格朗日框架的高性能全变差(TV)图像反褶积算法。通过将复杂的非平滑优化问题拆解为多个易于求解的子问题,并利用快速傅里叶变换(FFT)加速线性算子运算,该算法能够高效地从模糊且含有噪声的观测数据中恢复出高质量的清晰图像。
项目功能特性
- 高效性:利用傅里叶域的闭式解处理二次子问题,避免了大规模矩阵求逆,极大地提升了处理速度。
- 鲁棒性:采用增广拉格朗日框架,通过引入惩罚参数和拉格朗日乘子,解决了传统方法在处理高保真度需求时的数值不稳定性问题。
- 边缘保持:利用各向异性全变差(Anisotropic TV)正则项,在去噪和去模糊的同时,能够有效提取并保留图像的边缘边缘特征。
- 综合评价:内置收敛性监测与图像质量标准评价体系(PSNR、SSIM),支持实时可视化算法的迭代收敛过程。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 所需工具箱:Image Processing Toolbox(用于图像读取、模糊核生成及基本处理)。
算法实现逻辑
核心方案将全变差反褶积问题转化为最小化目标函数:min_u { 0.5 * mu * ||A*u - g||^2 + TV(u) }。
- 数据预处理:
系统加载合成图像并归一化。随后生成指定尺寸和标准差的高斯模糊核(PSF),并在频域通过循环移位和 FFT 将其转换为光学传递函数(OTF)。同时,对图像添加高斯白噪声以模拟真实的观测过程。
- 频域算子准备:
利用 FFT 预计算有限差分算子(Dx, Dy)和模糊核算子的频率响应。提前构建线性子问题的分母部分(由模糊算子的功率谱和差分算子的功率谱加权组成),这使得每次迭代中的图像更新步骤仅需常数时间的逐元素除法。
- 交替迭代过程(ADM 核心):
算法在每一步迭代中交替执行以下三个更新步骤:
- u 子问题更新:在傅里叶空间中求解线性系统。结合当前时刻的辅助变量和乘子,通过 FFT 和 IFFT 快速获得图像的最小二乘解。
- w 子问题更新:针对全变差正则项,应用软阈值收缩(Shrinkage)算子。该步骤是非线性的,用于在梯度域实现去噪和边缘增强。
- 乘子 b 更新:根据图像梯度与辅助变量之间的残差更新拉格朗日乘子,强制执行两者的一致性约束。
- 收敛判定与终止:
算法通过计算相邻两次迭代解之间的相对变化率(Frobenius 范数比)来判定收敛。当变化率低于设定阈值或达到最大迭代次数时,程序停止。
关键实现细节分析
主执行程序:
负责全流程控制,包括图像退化模拟(高斯模糊与噪声注入)、超参数设置(mu 和 beta)、主循环优化逻辑以及最终的结果可视化。它实现了各向异性的 TV 模型,即分别对水平和垂直梯度的绝对值之和进行惩罚。
图像质量评估函数:
通过手动实现结构相似性(SSIM)算法,从亮度、对比度和结构三个维度客观衡量评价修复图像与原始清晰图像的相似度。
算子转换函数:
实现了 PSF 到 OTF 的准确转换。通过对卷积核进行零填充扩展至图像尺寸,并执行循环平移(circshift),确保频域中的相位信息与周期性卷积一致,这是 FFT 加速的基础。
使用方法
- 确保 MATLAB 工作路径包含该脚本文件。
- 运行主函数。程序将自动加载内置图像,执行去模糊过程。
- 运行过程中,MATLAB 命令行窗口会实时显示当前的迭代次数、相对误差以及 PSNR 指标。
- 运行结束后,系统会自动弹出可视化窗口,展示原始图像、退化图像、修复结果以及目标函数和 PSNR 的收敛曲线。