3D小波变换与3D-SPIHT视频压缩系统
项目介绍
本项目是一个基于MATLAB开发的视频序列压缩与重建框架。通过结合三维离散小波变换(3D-DWT)和三维空间方向树集合分裂算法(3D-SPIHT),系统能够有效地去除视频在空间维度和时间维度上的统计冗余。该系统不仅实现了完整的编解码流程,还提供了灵活的码率控制和多维度的图像映射评估指标,适用于对压缩效率和重建质量均有要求的视频处理场景。
功能特性
- 完全自洽的数据生成:内置合成视频生成模块,模拟产生一个包含运动圆形目标和渐变背景的动态视频序列(16帧,64x64分辨率),无需外部数据集即可运行演示。
- 三维多尺度分解:利用Haar小波对视频立方体进行多级分解,统筹处理帧内空间相关性与帧间运动冗余。
- 高效比特流编码:实现3D-SPIHT核心算法,通过动态维护三类链表(LIP, LSP, LIS)实现逐位平滑的嵌入式编码,生成可分级的比特流。
- 精确的码率控制:支持通过设置目标比特率(BPP)来限制生成的总比特数,实现对压缩比的精准把控。
- 综合性能评估:自动计算每一帧的峰值信噪比(PSNR)、结构相似性(SSIM)及系统的实际压缩比(CR),并可视化展示质量波动。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 内存需求:由于采用了递归搜索子孙节点的算法结构,建议运行环境具备充足的内存以处理较大分辨率的视频立方体。
实现逻辑与阶段说明
系统运行逻辑严格遵循标准视频编码器的流水线:
- 参数与视频初始化
系统首先定义全局参数,如分解层数(2层)和目标比特率。随后通过数学函数驱动坐标平移,生成一个在16帧时间轴上呈圆周运动的合成视频,作为编码器的输入源。
- 三维离散小波变换 (3D-DWT)
采用分离变换方式,对视频矩阵进行深度分解。在每一级分解周期内:
- 依次针对时间轴、垂直方向、水平方向执行1D Haar小波运算。
- 将能量集中在极少数低频系数中,其余区域产生大量趋于零的高频系数,为压缩奠定基础。
- 3D-SPIHT 核心编码过程
- 初始化阶段:计算全局最大系数以确定初始位平面阈值。将最粗尺度子带的所有像素坐标存入LIP(不显著像素列表),并筛选出具有子孙的像素存入LIS(不显著集合列表)。
- 排序扫描 (Sorting Pass):逐一检查LIP中的元素是否显著;同时对LIS中的集合(类型A处理所有子孙,类型B处理曾孙及以后)进行显著性测试。一旦发现显著节点,立即记录其符号位并移入LSP(显著像素列表)。
- 精细扫描 (Refinement Pass):对前几轮已确认为显著的像素,输出其当前位平面的二进制值,不断逼近真实系数。
- 码流截断:系统在整个过程中实时监控比特流长度,一旦触发maxBits阈值立即终止。
- 解码与重构模拟
系统通过模拟解码逻辑,利用LSB记录的位置信息和最终的量化阈值,对小波系数进行重构。显著系数被赋予当前区间的中值,以最小化量化误差。
- 逆变换与结果输出
执行与分解方向相反的逆三维小波变换(I3D-DWT),将系数还原回时空域。最后,通过遍历每一帧计算PSNR和SSIM,生成对比图和性能曲线。
关键函数与算法细节分析
- 基础变换 (haar_1d / ihaar_1d):
实现了最基础的海尔小波运算。通过对相邻元素进行加减及1/sqrt(2)的缩放,将信号投影到低频平均值和高频细节分量上。
- 显著性检查 (check_significance):
这是SPIHT算法的核心决策模块。它接收当前的位平面阈值,通过遍历特定坐标对应的整个空间方向树(3D八叉树结构),判断该分支下是否存在任何绝对值大于或等于阈值的系数。
- 三维树结构映射 (get_children / get_all_descendants):
系统模拟了复杂的3D空间相关性:
- get_children 利用坐标偏移和倍增逻辑,定位当前像素在下一层分辨率中的8个后代节点。
- get_all_descendants 采用递归算法,遍历从当前节点出发直到叶子节点的所有关联系数。
- 曾孙判定核心 (has_grandchildren):
用于辅助LIS列表的维护,特别是针对类型B(Grandchildren only)的逻辑判定,通过检查子节点是否仍拥有后代来决定集合的分裂行为。
- 质量评估指标:
- PSNR:基于均方误差(MSE)计算,公式中使用了255作为峰值信号。
- SSIM:基于亮度、对比度、结构三个维度的简化计算模型,能够比PSNR更真实地反映人眼视觉感受。
使用方法
- 在MATLAB中打开包含此代码的工作目录。
- 在命令行窗口直接输入 main 并回车。
- 程序将自动执行:生成视频 -> 变换 -> 编码 -> 解码 -> 逆变换 -> 评估。
- 运行结束后,控制台将打印实际压缩比和平均PSNR,并弹出一个三子图窗口。
注意事项
- 输入的视频分辨率(frameSize)和帧数(nFrames)必须是 2 的幂次(如 64, 16),以兼容多级小波分解的降采样要求。
- 实际压缩比受限于目标比特率(targetBPP),当设置非常低的BPP时,重构视频可能会出现明显的块效应或模糊。
---
*本系统由 Antigravity Agentic AI 设计实现*