基于游程编码与哈夫曼编码的灰度图像压缩及解压缩系统
项目介绍
本项目实现了一个集成化的灰度图像压缩方案,采用游程编码(RLE)与哈夫曼编码(Huffman Coding)相结合的双重无损压缩技术。该系统主要针对具有区域连续性的图像设计,通过先消除空间像素冗余,再利用概率分布消除统计冗余,达到高效压缩的目的。系统涵盖了从原始图像读取、混合编码、模拟位流传输到最终解压还原的全过程,由于采用无损策略,解压后的图像能够实现零失真恢复(PSNR为无穷大)。
功能特性
- 智能化图像预处理:支持自动读取标准测试图,并在环境缺失图像时自动生成合成灰度图;具备彩色图像自动转灰度功能。
- 双重逻辑压缩:结合了 RLE 的空间冗余消除及哈夫曼的变长编码优势。
- 自定义算法实现:哈夫曼字典构建、树的生成及编解码逻辑完全基于算法底层逻辑实现,不依赖于外部通信工具箱。
- 性能定量评估:实时计算压缩比(CR)、码率(BPP)、均方误差(MSE)及峰值信噪比(PSNR)。
- 可视化分析:直观对比原图与还原图,并绘制游程符号的频率分布统计图。
功能与逻辑说明
系统主程序严格按照以下逻辑流程运行:
- 图像获取与转换:
读取图像文件并检查色彩通道。若是彩色图像则转换为灰度图。随后将二维图像矩阵展平为一维像素序列,为序列编码做准备。
- 游程编码(RLE)阶段:
遍历一维像素序列,检测连续重复的像素值。将序列转换为由“像素值”和“重复次数”交替组成的码流。
例如:序列 [100, 100, 100, 50, 50] 转换为 [100, 3, 50, 2]。
- 哈夫曼编码(Huffman)阶段:
首先统计游程码流中所有唯一符号(包括像素值和长度值)出现的概率。
其次,基于贪心算法构建哈夫曼树:每次合并概率最小的两个节点,并递归分配二进制位(左支为0,右支为1)。
最后,利用生成的哈夫曼字典将游程序列映射为二进制逻辑位流。
- 模拟解压缩还原:
哈夫曼解码:在位流中逐位匹配字典,将二进制串还原回游程码流。
游程解码:按照“值-长度”规则,将各像素值按照指定的重复次数重新填充回一维序列。
形状重构:将一维序列重新排列为原始的图像行列矩阵,并转为标准图像数据类型。
- 性能度量:
通过对比原始数据位数与哈夫曼编码后的总位数,得出压缩比。通过计算像素间的差异得出 PSNR。
关键函数分析
算法实现核心围绕以下逻辑模块展开:
- 线性游程处理逻辑:
通过单次线性扫描实现。在检测到像素值变化时,记录当前像素及计数,并将结果拼接。解码则通过预分配内存提高填充效率。
- 哈夫曼树构建算法:
使用结构体 cell 阵列模拟节点容器。通过对概率进行动态排序并不断合并最小概率节点,构建出一棵最优二叉树。
- 编码分配与提取逻辑:
利用递归算法遍历生成的哈夫曼树,为每个叶子节点(符号)生成唯一的前缀码。
- 高效映射与编解码:
使用哈希映射(Map)结构存储编码表,在编码阶段实现常数级的增量查询。在解码阶段模拟位滑动窗口逻辑,通过匹配前缀实现精确还原。
使用方法
- 启动 MATLAB 软件,将工作目录切换至项目文件夹。
- 在命令行窗口直接输入 main 并回车。
- 系统将自动执行从压缩到解压缩的全流程,并在控制台输出压缩性能报告。
- 观察自动生成的两个图形窗口:一个展示原图与解压图的对比,另一个展示 RLE 符号的统计分布情况。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 硬件要求:基本桌面级计算配置即可,由于使用了预分配和映射表优化,处理常见分辨率(如 256x256 或 512x512)的图像具有较高的效率。
- 依赖项:本系统为原生代码实现,不依赖于 Matlab Image Processing Toolbox 之外的特殊第三方工具箱。