基于DCT与小波变换的压缩感知图像重构仿真系统
项目介绍
本项目是一个基于MATLAB实现的压缩感知(Compressive Sensing, CS)图像重构仿真系统。该系统旨在验证和对比在低于奈奎斯特采样率的条件下,利用不同稀疏基(离散余弦变换DCT与离散小波变换DWT)对自然图像进行重构的性能。
系统采用分块压缩感知(Block CS)架构,模拟了从高斯随机观测到正交匹配追踪(OMP)算法重构的完整流程,并提供详细的性能指标(PSNR、SSIM、运行时间)以及直观的稀疏性分析图表。
核心功能特性
- 多重稀疏基对比:实现了基于离散余弦变换(DCT)和Haar小波变换(DWT)的两种稀疏表示方法,支持在同一测试条件下对比两者的重构效果。
- 分块压缩感知架构:为了降低计算复杂度并便于处理,系统将图像分割为16x16的局部块进行独立观测与重构。
- 高斯随机投影:使用高斯随机矩阵作为测量矩阵,模拟非相干采样过程。
- OMP重构算法:内置手写的正交匹配追踪(OMP)算法,包含相关性匹配、索引集更新及最小二乘拟合步骤。
- 多采样率仿真:支持自动遍历多个采样率(0.3, 0.4, 0.5, 0.6),评估压缩比对图像质量的影响。
- 性能量化评估:自动计算峰值信噪比(PSNR)、均方误差(MSE)以及结构相似性(SSIM)。
- 可视化分析:
*
稀疏性分析:直观展示图像块在DCT和DWT域下的系数衰减情况。
*
结果对比:展示重构后的图像效果及各项指标。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(用于图像读取与缩放)
使用方法
- 确保MATLAB当前工作目录包含主脚本文件。
- 在MATLAB命令窗口输入
main 并回车即可运行。 - 程序将自动处理名为
cameraman.tif 的内置图像(若不存在则自动生成体模图像)。 - 运行过程中,控制台将实时输出不同采样率下的PSNR、SSIM及运行时间对比。
- 程序运行结束后,将弹出稀疏性分析窗口和最终的重构结果对比图。
代码实现逻辑详解
系统的主流程在 main 函数中严格按照以下步骤执行:
1. 图像预处理
- 读取与转换:读取
cameraman.tif,若为彩色图像则转为灰度图。 - 尺寸归一化:为了确保能够被16x16的分块整除,图像被强制缩放为256x256像素。
- 数据类型:图像数据转换为
double 类型以便通过矩阵运算进行处理。 - 稀疏性分析可视化:在重构开始前,提取图像中心块,计算并绘制其DCT系数和Haar小波系数的幅度衰减曲线,直观展示自然图像的稀疏特性。
2. 稀疏基构建
代码中未直接调用MATLAB内置变换函数进行重构,而是显式构造了变换矩阵:
- DCT基:生成一维N点反离散余弦变换矩阵。
- DWT基:通过多级分解逻辑,迭代构造了N点的Haar小波反变换正交矩阵。
3. 重构仿真循环
程序遍历预设的采样率列表
[0.3, 0.4, 0.5, 0.6],对每个采样率执行以下操作:
- 测量矩阵生成:根据观测维数 $M$ 构建高斯随机矩阵 $Phi$,并对列进行归一化。为保证DCT与DWT测试条件的公平性,使用了固定的随机数种子。
- 分块重构(Block CS):
* 分别传入DCT和DWT基矩阵调用重构子函数。
*
计时:独立记录两种变换方式的重构耗时。
- 指标计算:计算原始图像与重构图像之间的PSNR和SSIM。
- 结果存储:保存特定采样率(默认为0.5)下的重构图像用于最终展示。
4. 结果可视化
循环结束后,调用绘图函数展示原始图像以及特定采样率下DCT和DWT的重构图像。
关键算法与函数分析
block_cs_reconstruction (分块重构核心)
该函数实现了分块压缩感知的核心逻辑:
- 输入:全图数据、测量矩阵 $Phi$、稀疏基反变换矩阵 $Psi$、块大小。
- 传感矩阵:预计算 $Theta = Phi Psi$。
- 遍历处理:以16像素为步长,无重叠地提取图像块。
- 观测:将图像块向量化为 $x$,计算观测值 $y = Phi x$。
- 求解:调用
omp_algo 求解稀疏系数 $hat{s}$。 - 恢复:计算 $hat{x} = Psi hat{s}$,并将恢复后的向量重塑回图像矩阵。
- 后处理:对像素值进行[0, 255]截断,防止数值溢出。
omp_algo (正交匹配追踪算法)
这是一个手写的OMP算法实现,用于求解优化问题 $y = Theta s$:
- 初始化:设置残差 $r=y$,索引集为空。
- 迭代过程:
1.
匹配:计算传感矩阵各列与当前残差的相关性(点积)。
2.
选列:找到相关性最大的列索引,更新所以集。
3.
投影:通过最小二乘法(Least Squares, `
运算符)求出当前索引集下的最优系数。
4. 更新残差:计算新的残差向量。
5. 收敛判断:当残差范数小于 $10^{-6}$ 或达到最大迭代次数时停止。
- 参数设定:稀疏度 $K$(迭代次数)动态设定为观测维数的 $1/2.5$。
create_dwt_basis
(小波基生成)
该函数展示了如何通过算法生成矩阵形式的小波变换:
- 不依赖工具箱的高级封装,而是利用Haar小波滤波器的系数特性 $(1/sqrt{2}, 1/sqrt{2})$ 和 $(1/sqrt{2}, -1/sqrt{2})$。
- 通过循环和
blkdiag
函数构建多层分解矩阵,最终生成的 $Psi$ 是正交小波变换矩阵的转置(即反变换矩阵)。
calculate_metrics` (指标计算)
- PSNR:基于均方误差(MSE)的标准计算公式,最大像素值取255。
- SSIM:实现了一个简化的结构相似性计算,利用全局的均值、方差和协方差进行估算,而非标准的滑动窗口SSIM。