-数据压缩与信源编码大作业2
- 格式:docx
- 大小:521.57 KB
- 文档页数:9
数据压缩作业2
——哈夫曼编码对图像进行无损压缩
班级: 1402018
姓名:**
学号: ***********
一、试验目的:
了解算数编码的实质,掌握其运用的编码方法,实现图像数据的压缩;并且运用C语言编写相应的压缩编码以及解压缩编码程序,加深对图像压缩编码的理解。
二、试验内容:
自行设计一种图像无损压缩方法,编写相应的编解码程序img_Code/img_Decode,对lena图像进行编解码,观察压缩性能与直接算数编码的差异。
三、算法流程:
(1) 首先把信源中的消息出现的频率从小到大排列。
(2) 每一次选出频率最小的两个值,作为二叉树的两个叶子节点,将和作为它们的根节点,这两个叶子节点不再参与比较,新的根节点参与比较。
(3) 重复(2),直到最后得到和为1的根节点。
(4) 将形成的二叉树的左节点标0,右节点标1。把从最上面的根节点到最下面的叶子节点途中遇到的0,1序列串起来,就得到了各个符号的编码。
四、程序设计说明:
用变量b记录字符在数组中的位置,count统计字符出现的频率,即权值;将每个哈夫曼码值及其对应的ASCII码存放在一维数组header[i]中,且编码表中的下标和ASCII码满足顺序存放关系,据频率(权值)大小,对结点进行排序,选择较小的结点进树,依据parent域值(结点层数)确定树中结点之间的关系,实现图像的压缩编码;同理对压缩过程进行逆向过程编码,根据哈夫曼编码的长短,对结点进行排序,通过哈夫曼编码的长短,依次解码,从原来的位存储还原到字节存储,最终对解压缩后文件和原文件相同性比较进行性能评价判断(根据文件大小)。
五、程序压缩性能评价:
产生Huffman编码需要对原始数据扫描两遍。第一遍扫描要精确地统计出原始数据中,每个值出现的频率,第二遍是建立Huffman树并进行编码。由于需要建立二叉树并遍历二叉树生成编码,因此数据压缩和还原速度都较慢,但简单有效,因而得到广泛的应用。
六、程序源代码:
七、测试数据文件:
1、运行结果:
2、压缩对比: