嵌入式小波零树(EZW)图像压缩算法实现
项目介绍
本项目实现了一个完整的嵌入式小波零树(EZW)图像压缩系。该系统基于MATLAB平台,从底层实现了离散小波变换(DWT)、EZW编码、解码以及逆离散小波变换(IDWT),并不依赖MATLAB工具箱中的现成小波函数。项目演示了利用小波系数的零树特性进行图像压缩的全过程,并提供了详细的性能评估指标(PSNR和MSE)及可视化结果,旨在展示EZW算法在去除空间冗余和能量集中方面的核心优势。
功能特性
- 独立的测试环境:代码内置生成Zone Plate(同心圆)测试图像的逻辑,无需外部图片文件即可独立运行;同时也支持加载外部灰度图像(如Lena图)。
- 自研小波变换核心:不依赖MATLAB Wavelet Toolbox,手动实现了基于Haar小波基的多级离散小波分解与重构算法。
- 完整的EZW编解码链路:实现了从系数扫描顺序构建、父子关系映射、显著性编码到解码重构的完整流程。
- 截断式编码控制:支持通过设定循环次数(
target_loops)来控制压缩比特流的长度,体现了EZW算法的嵌入式特性。 - 综合性能评估:自动计算重建图像的峰值信噪比(PSNR)和均方误差(MSE),并提供包含原始图、系数图、重建图、阈值变化及误差曲线的多图可视化界面。
系统要求
- 软件环境:MATLAB R2016a 及以上版本。
- 依赖工具箱:本项目核心算法为纯数学实现,不依赖特定工具箱。
使用方法
- 打开MATLAB软件,设置当前工作目录为项目所在文件夹。
- 直接运行主程序脚本。
- 程序将自动执行以下流程:
* 生成256x256的测试图像。
* 执行3层小波分解。
* 构建零树结构并进行EZW编码。
* 对编码流进行解码和逆小波变换。
* 弹出结果窗口,展示图像对比及性能数据。
详细功能与实现逻辑
本项目的主程序脚本严格按照EZW算法的流水线进行组织,具体逻辑如下:
1. 图像预处理
程序首先初始化环境,并设定图像尺寸为256x256(满足N为2的整数次幂的要求)。
- 测试源生成:利用网格生成函数创建一副Zone Plate图像(基于余弦函数的同心圆纹理),并将像素值归一化到双精度浮点数格式。
- 兼容性支持:代码中保留了读取外部位图的接口,若检测到指定文件存在,会自动加载并转换为灰度图及调整尺寸。
2. 多级离散小波变换 (DWT)
程序对原始图像执行3层Haar小波分解。
- 此步骤未直接调用系统函数,而是通过自编写的函数实现。
- 分解后,将结果进行对数变换(
log(abs(coeffs) + 1))以便在可视化界面中清晰展示高频细节和低频概貌。
3. EZW 核心编码结构构建与执行
这是算法的核心部分,主要包含以下步骤:
- 构建扫描结构:程序计算小波系数的扫描顺序以及父子节点关系图。这一步是为了后续判断“零树根”做准备。
- 迭代编码:调用编码函数,输入分解后的系数、扫描顺序和结构映射表。
- 循环控制:通过设定的目标循环次数(
target_loops = 12),模拟嵌入式编码过程中的比特流截断,输出编码流和最大系数值。 - 统计信息:计算并输出最终生成的符号总数。
4. 解码与图像重构
- 逆向解码:利用编码流、最大值信息和之前的结构图,还原出量化后的小波系数矩阵。
- 逆小波变换 (IDWT):调用自实现的逆变换函数,将频域系数还原为空间域像素值。
- 数值截断:将重建图像的像素值强制限制在 [0, 255] 范围内,防止溢出。
5. 可视化与评估
最终生成一个包含6个子图的综合展示窗口:
- 原始图像 vs 重建图像:直观对比视觉质量。
- 小波系数谱:展示能量在低频子带的集中情况。
- 阈值变化图:以条形图展示每次扫描循环的阈值递减情况。
- 误差曲线:绘制图像中心行的像素差值,展示高频部分的损失情况。
- 数据面板:文本显示图像尺寸、分解层数、编码符号数及最终的PSNR值。
关键算法与代码细节分析
自实现 Haar 小波分解 (wavelet_decomp)
该函数手动实现了二维Haar小波变换。
- 行变换:对图像的每一行,利用相邻像素的和与差分别计算低频(L)和高频(H)分量,并除以根号2进行归一化。公式体现为:L = (x + y)/√2, H = (x - y)/√2。
- 列变换:在行变换的基础上,对每一列再次进行及差分运算,最终生成LL, HL, LH, HH四个子带。
- 递归处理:通过循环对LL子带进行下一级分解,从而构建金字塔式的小波系数结构。
自实现 Haar 逆小波变换 (wavelet_recon)
这是分解过程的逆运算。
- 函数从最深层的分解尺度开始,利用和(L)与差(H)分量反解出原始数据。
- 通过公式 x1 = (L + H)/√2 和 x2 = (L - H)/√2 恢复行和列的原始像素值,逐步上采样直到恢复原始分辨率。
结构构建 (build_structure)
该函数负责建立系数间的拓扑关系,是EZW算法识别零树的基础。
- 扫描顺序:生成一个线性索引列表,确保先扫描最低频的LL子带,然后按照层级由粗到细扫描各级细节子带(HL, LH, HH)。
- 父子映射:虽然提供了建立父子关系(Parent-Children Map)的框架,旨在将低频子带的系数与其在高频子带对应位置的2x2系数块关联起来,形成四叉树结构(LL子带的根节点对应三个方向的子树)。
性能指标计算 (calc_metrics)
- MSE (均方误差):计算原始图像与重建图像像素差值的平方均值。
- PSNR (峰值信噪比):基于MSE计算图像质量的分贝值,公式为
10 * log10(255^2 / MSE)。