基于小波变换与EZW编码的图像数字压缩系统
项目介绍
本项目实现了一个基于离散小波变换(DWT)与嵌入式零树小波(EZW)算法的图像压缩系统。该系统利用小波变换在时频局部的优良特性,将图像能量集中于低频子带,并通过EZW算法对小波系数进行分层、渐进式的量化与编码。该方案支持精确的比特率控制,能够通过设置停止阈值来平衡压缩比与图像重构质量,适用于对传输效率和恢复精度均有要求的应用场景。
功能特性
- 多级小波分解:采用Mallat算法实现多层Haar小波变换,有效分离图像的基础特征与细节。
- 嵌入式零树编码:实现EZW核心逻辑,包括初始阈值计算、主扫描(子带间相关性编码)及从扫描(精细量化)。
- 渐进式比特流:编码结果支持逐位细化,允许在码流的任意位置截断并重构当前最优质量图像。
- 质量评定系统:自动计算峰值信噪比(PSNR)、平均绝对误差(MAE)及估算压缩比(CR)。
- 全流程可视化:实时展示原始图像、小波系数热力图、重构图像以及重构误差图。
使用方法
- 环境配置:确保计算机已安装MATLAB R2016b或更高版本。
- 图像准备:将待压缩的图像文件置于工作目录下,或在代码开头修改变量指定图像路径。
- 参数调整:
- 修改分解级数变量(n_level)以改变多尺度分析的深度。
- 修改目标停止阈值(target_stop_threshold)以调节最终压缩质量与压缩率。
- 执行系统:在MATLAB命令行窗口输入函数名运行,系统将自动弹出可视化分析窗口并打印报告。
系统要求
- 软件支持:MATLAB (包含Image Processing Toolbox)。
- 内存建议:至少4GB RAM,用于处理大尺寸图像的矩阵运算。
- 输入限制:支持灰度及彩色图(彩色图会自动转换为灰度进行处理),系统会自动将图像缩放为2的幂次大小。
系统实现逻辑说明
1. 图像预处理与变换
系统首先读取图像,若图像不是2的幂次尺寸,则通过双线性插值进行缩放。随后利用Haar小波基进行多级分解。核心变换函数通过对行和列依次进行低通与高通滤波,将图像划分为LL(低频)、LH(水平)、HL(垂直)和HH(对角线)四个子带。该过程循环执行,直至达到设定的分解层数,最终构建出多尺度的小波系数矩阵。
2. EZW 编码过程
编码环节分为初始化、主扫描和从扫描三个循环步骤:
- 初始化:计算所有系数的最大绝对值,将其对应的2的幂次作为初始阈值。
- 主扫描(Dominant Pass):系统按顺序遍历尚未标记为显著的系数。根据当前阈值生成四种符号:正显著(P)、负显著(N)、零树根(ZTR)和孤立零点(IZ)。其中零树根利用了跨尺度的自相似性,用单个符号代表一片全零区域,极大地提高了压缩效率。
- 从扫描(Subordinate Pass):对所有已判定为显著的系数进行精细比特提取。通过判断系数值在当前量化区间内的位置,生成细化比特。
- 逻辑迭代:每轮扫描结束后,阈值折半,直至达到用户设定的停止阈值。
3. EZW 解码与重构
解码过程是编码的逆向操作:
- 主扫描解码:根据收到的符号流,在对应位置恢复系数的初步幅值(通常取当前阈值的1.5倍),并重建显著图。
- 从扫描解码:根据精细比特流,逐步调整显著系数的值,使其逼近原始系数。
4. 逆变换与性能分析
解码后的系数矩阵通过多级逆离散小波变换(IDWT)回到空间域。系统通过对比原始图像与重构图像的像素差异,计算PSNR和MAE指标。压缩比则基于生成的符号流位数(假设符号占2比特,精细比特占1比特)与原始8位深度图像的大小进行估算。
关键函数与算法细节
- 二维离散小波变换实现:系统未调用内置工具箱函数,而是手动实现了基于Haar小波的行变换与列变换,保证了变换过程的透明度与可控性。
- 递归扫描逻辑:在主扫描中,虽然采用了简化的遍历方式,但保留了零树结构的判定逻辑,能够有效识别低能级区域。
- 动态阈值量化:采用二进制递减阈值策略,这使得编码过程具有天然的渐进性,即码流的前部包含了图像的主要能量,后部包含了细节。
- 误差计算模型:重构误差图展示了具体像素点的偏移,PSNR值则量化了系统在指定压缩率下的保真度。