基于K-SVD算法的图像去噪与稀疏重建系统
项目介绍
本项目是一个基于Matlab实现的图像稀疏表示及去噪处理框架。核心算法基于 K-SVD(K-奇异值分解)字典学习技术,旨在从图像数据中训练出具有强适应性的过完备字典,并通过正交匹配追踪(OMP)算法实现图像的高质量稀疏重构。
系统通过模拟高斯白噪声环境,演示了从带噪图像中提取样本、训练字典、利用稀疏约束去除噪声并保留图像纹理细节的完整流程。该项目不仅实现了经典的稀疏表示去噪逻辑,还包含了完整的性能评估与可视化模块。
功能特性
本项目代码实现了以下核心功能:
- 图像预处理与噪声模拟:支持读取外部图像或生成测试体模,自动转为灰度并归一化,叠加指定标准差的高斯白噪声。
- 自适应字典学习:实现标准的 K-SVD 迭代算法,能够从含噪图像块中训练出过完备字典。
- 双模式稀疏编码:
*
训练阶段:使用固定稀疏度约束(Fixed-Sparsity)的 OMP 算法。
*
重构阶段:使用误差约束(Error-Bound)的 OMP 算法,以优化去噪效果。
- 图像重构与聚合:基于学习到的字典重建图像块,并采用滑动窗口重叠平均策略(Col2Im)合成全图。
- 实时性能监控:在训练过程中实时绘制重构误差(RMSE)收敛曲线,并动态展示字典原子的变化。
- 客观评价指标:计算并对比处理前后图像的峰值信噪比(PSNR)和结构相似性(SSIM)。
系统与运行要求
- 编程语言:Matlab
- 依赖工具箱:Image Processing Toolbox (用于图像读取和显示)
- 图像资源:默认尝试读取
cameraman.tif,若不存在则使用 Matlab 内置函数生成 Shepp-Logan 体模。
使用方法
直接运行主脚本即可启动完整流程。系统将自动执行以下步骤:
- 初始化参数并加载图像。
- 添加噪声并显示初始指标。
- 提取训练样本块并进行 K-SVD 字典学习(伴随迭代可视化窗口)。
- 利用训练好的字典对全图进行去噪重构。
- 输出最终的 PSNR/SSIM 指标,并弹出结果对比窗口。
代码实现逻辑与细节
主程序严格遵循稀疏表示去噪的经典流程,具体实现逻辑如下:
1. 参数初始化与数据准备
系统设定图像块大小为 8x8,字典原子数为 256(过完备),噪声标准差为 25。为了加速训练,程序不会使用所有图像块,而是随机采样 4000 个图像块作为训练集,并对样本进行了去均值(DC分量移除)处理。
2. 字典初始化
代码中定义了字典初始化函数,虽然函数名暗示使用 DCT 基,但实际代码实现采用了
随机高斯分布初始化,随后对每一列进行了归一化处理。这为 K-SVD 提供了一个随机的初始起点。
3. K-SVD 字典学习循环
这是系统的核心部分,共迭代 10 次,包含两个关键步骤:
- 稀疏编码步骤:利用 OMP 算法,在固定稀疏度(最大非零元素个数)的约束下,计算当前字典下训练样本的稀疏系数。
- 字典更新步骤:逐个更新字典原子。计算除去当前原子贡献后的误差矩阵,利用
svds(奇异值分解)寻找该误差矩阵的最佳秩-1近似,从而同时更新字典原子和对应的非零系数。
4. 图像去噪与重构
在从训练集中学到字典后,系统对
整幅图像的所有滑动块进行处理:
- 采用误差约束的 OMP 算法,即在满足重构误差小于特定阈值(基于噪声方差计算)的前提下,寻找最稀疏的表示。这种策略比固定稀疏度更适合去噪任务。
- 通过
D * coeffs 重构去噪后的图像块,并加回此前移除的直流分量(均值)。 - 主要利用重叠分块技术,对重叠区域的像素值进行平均,以消除块效应。
5. 结果评估
系统最后会截断像素值至 [0, 255] 范围,并计算最终的 PSNR 和 SSIM 指标,与初始含噪图像进行对比。
关键算法函数分析
- init_dct_dictionary: 初始化字典矩阵。实际代码生成了一个 $N times K$ 的随机矩阵,并对列向量进行了单位范数归一化。
- omp_sparse_coding: 实现固定稀疏度约束的 OMP 算法。通过贪婪策略,每一步选择与残差相关性最大的原子,利用最小二乘法更新系数,直到非零元素达到预设数量。
- omp_error_bound: 实现误差约束的 OMP 算法。与前者不同,其停止条件是重构误差小于预设阈值或达到最大原子数。这是图像去噪阶段的关键函数。
- ksvd_dictionary_update: 实现 K-SVD 的原子更新逻辑。通过仅选取使用当前原子的样本子集,构建误差矩阵 $E_k$,通过 SVD 分解提取主成分来更新原子形状和对应的系数权重。
- aggregation_image: 执行图像块的聚合操作。维护一个累加图像和一个权重矩阵,将重构块累加到对应位置,最后相除实现重叠区域的平均。
- compute_ssim: 无需依赖工具箱版本,手动实现了简化的 SSIM 计算逻辑,包含高斯滤波计算均值和方差,以评估图像的结构相似性。