基于提升算法的第二代小波变换源码项目说明
项目简介
本项目完整实现了第二代小波变换(Second Generation Wavelet Transform),采用高效的提升算法(Lifting Scheme)架构替代了传统的第一代卷积滤波方法。该实现不仅包含核心的变换算法,还通过一维信号去噪和二维图像压缩的实际案例,展示了其在信号处理领域的应用潜力。
代码逻辑清晰,实现了从分裂(Split)、预测(Predict)到更新(Update)的完整提升步骤,并特别针对MATLAB环境模拟了原位计算(In-place Calculation)的数据结构,以展示提升算法在内存优化方面的优势。
功能特性
- 提升算法架构:完整构建了提升小波变换的核心流程,相比传统Mallat算法计算效率更高。
- 多维信号处理:
* 支持一维非平稳信号的多层分解与重构。
* 支持二维图像数据的多层分解与重构(采用Mallat行列处理架构)。
*
CDF 9/7:双正交小波,适用于浮点数计算,常用于有损压缩和去噪。
*
CDF 5/3 (Integer-to-Integer):整数变换,适用于无损压缩和硬件实现。
*
信号去噪:基于软阈值(Soft Thresholding)的去噪算法。
*
图像压缩:基于能量保留策略的数据压缩模拟(稀疏化处理)。
- 原位计算机制:在数据存储上模拟了原位更新,即分解后的系数直接覆盖原始信号内存位置。
系统要求
- MATLAB R2016a 及以上版本
- Image Processing Toolbox(仅用于演示部分的图像显示)
- Signal Processing Toolbox(可选,用于部分信号生成,本代码已内置基本信号生成无需工具箱)
使用方法
直接运行主演示脚本即可启动程序。程序将自动执行以下流程:
- 生成一维合成信号并添加高斯白噪声。
* 执行多层提升小波分解。
* 计算噪声阈值并去噪。
* 执行逆变换重构信号。
* 绘制原始、含噪及去噪信号对比图,并输出信噪比(SNR)。
- 生成二维测试图像(Zone Plate)。
* 执行二维整数提升小波分解。
* 保留5%的大系数,将其余95%系数置零以模拟高压缩比。
* 执行逆变换重构图像。
* 绘制原始图、系数谱及重构图,并输出峰值信噪比(PSNR)。
核心代码实现逻辑分析
本项目包含主控制逻辑与底层的提升算法引擎,具体实现细节如下:
1. 主程序逻辑
主程序分为两个独立的部分,分别演示一维和二维的处理能力。
第一部分:一维信号分析与去噪
- 信号生成:通过数学公式合成由HeaviSine和Doppler特征组成的非平稳信号,并叠加随机高斯白噪声。
- 分解配置:选用
cdf97(Cohen-Daubechies-Feauveau 9/7)小波进行4层分解。 - 去噪算法:
* 利用第一层分解的高频细节系数(Detail Coefficients)估算噪声标准差(Sigma)。
* 采用通用阈值公式(3 * Sigma)确定阈值。
* 应用
软阈值函数对高频系数进行收缩处理,保留信号特征同时抑制噪声。
第二部分:二维图像压缩重构
- 图像生成:代码内置生成 Zone Plate(波带片)测试图案,无需外部图片文件,图像数据被转换为近似整数以演示整数变换。
- 分解配置:选用
cdf53_int(LeGall 5/3)进行3层分解,这是一种将浮点运算映射为整数运算的模式,可实现完全可逆。 - 压缩模拟:
* 对分解后的所有系数按绝对值能量排序。
*
稀疏化处理:仅保留能量最大的5%系数,强制将其余95%的系数值置为0。
- 评估:计算重构图像与原始图像的均方误差(MSE),并输出PSNR值。
2. 一维提升算法引擎
- 分解函数 (
lifted_wavelet_decomp_1d):
* 采用迭代方式处理,每一层仅对上一层的近似信号(Approximation Signal)进行处理。
* 调用底层的
lifting_step_fwd(正向提升步)将信号分裂并更新为近似部分和细节部分。
* 数据存储采用拼接方式,将新生成的系数覆盖原信号的前端,模拟原位计算的内存布局。
* 使用数组
L 记录每一层分解后的系数长度,以便于重构时索引。
- 重构函数 (
lifted_wavelet_recon_1d):
* 根据记录的长度数组
L,从最底层开始逆向操作。
* 提取当前的近似系数和对应的细节系数,调用
lifting_step_inv(逆向提升步)恢复上一层信号。
3. 二维提升算法引擎
- 分解函数 (
lifted_wavelet_decomp_2d):
* 实现了标准的
Mallat 分解架构。
*
行变换:首先对图像的每一行进行一维提升分解,将低频和高频数据分开存放。
*
列变换:随后对经过行变换的图像(包括低频和高频区域)的每一列进行提升分解。
* 每一层循环仅针对左上角的低频近似区域(LL子带)进行下一级迭代,递归完成多层分解。
* 使用矩阵
S 记录每一层近似部分和细节部分的尺寸。
- 重构函数 (
lifted_wavelet_recon_2d):
* 执行分解的逆过程,逻辑顺序为先进行列重构(恢复行内关系),再进行行重构(恢复列间关系)。
* 根据分解时记录的尺寸信息或对半划分原则,从压缩的数据结构中解析出近似部分(Low)和细节部分(High)。
* 利用原位操作特性,逐步扩大重构区域,最终恢复原始图像尺寸。
注意:代码中依赖底层的单步提升函数(lifting_step_fwd 和 lifting_step_inv),这些函数在提升架构中负责具的 Split-Predict-Update 算子计算,但在主文件结构中被抽象调用,具体的系数(如9/7或5/3的滤波系数)应在这些子函数中定义。