-数据压缩与信源编码大作业2

  • 格式:docx
  • 大小:521.57 KB
  • 文档页数:9

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据压缩作业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、压缩对比: