huffman 哈夫曼编码的实现及应用毕业论文.doc
《huffman 哈夫曼编码的实现及应用毕业论文.doc》由会员分享,可在线阅读,更多相关《huffman 哈夫曼编码的实现及应用毕业论文.doc(53页珍藏版)》请在三一办公上搜索。
1、毕 业 设 计(论文)题目 哈夫曼编码的实现 及应用 二级学院 数学与统计学院 专 业 信息与计算科学 班 级 学生姓名 学号 指导教师 职称 时 间 目录摘要IAbstractII第一章 绪论11.1 研究目的及意义11.2 图像压缩编码技术概述21.2.1 图像压缩编码技术分类21.2.2 图像压缩编码评价21.3 哈夫曼编码简介31.4 本设计所做的主要工作4第二章 利用静态哈夫曼编码实现图像压缩52.1 静态哈夫曼编码介绍52.2 静态哈夫曼编码树的构造62.3 静态哈夫曼编码的具体编码过程62.4 静态哈夫曼编码的算法实例72.3 利用静态哈夫曼编码压缩与还原图像的C语言实现92.3
2、.1 压缩的实现92.3.2 解压缩的实现112.4 图象压缩实例12第三章 利用动态哈夫曼编码实现图像压缩153.1 动态哈夫曼编码的提出153.2 动态哈夫曼编码的原理153.3 动态哈夫曼编码的算法思想163.4 动态哈夫曼编码的编码实例183.5 利用动态哈夫曼编码压缩与还原图像的C语言实现253.5.1 数据结构253.5.2 压缩的实现263.5.3 解压缩的实现273.6 图像压缩实例283.7 静态哈夫曼编码与动态哈夫曼编码的比较29第四章 对哈夫曼编码的改进314.1 在哈夫曼编码中引入堆排序314.2 模拟哈夫曼树的创建32第五章 总结345.1 总结34参考文献35附录3
3、6摘要 哈夫曼编码是一种以哈夫曼树即最优二叉树为核心的编码方式,经常应用于数据压缩。在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称熵编码法),用于数据的无损压缩。熵编码法是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是通过统计每一个源字符出现的概率建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这使得编码之后的字符串的平均长度是最短的,从而达到无损压缩数据的目的)。论文全面分析了静态哈夫曼编码和动态哈夫曼编码算法算法,详细介绍了静态哈夫曼编码树和和动态哈夫曼编码树的构造方案,并针对这两种算法,给出了对应
4、的C 语言代码。经运行分析发现,由于在构造静态哈夫曼树时,大量的时间消耗在从元素集合中选取两个最小的元素上。而动态哈夫曼编码算法,虽然克服了前者的缺点,但是算法复杂,而且解压缩时间长。因此,根据字符编码的单值性,对哈夫曼编码做了第二个改进,即不构造哈夫曼树,而是用一个二维数组模拟哈夫曼树的创建过程并得到各字符的编码,这一改进有效地提高了压缩比。关键词:静态哈夫曼编码,压缩,节点,哈夫曼树Abstract Huffman encoding is a huffman tree that is optimal binary tree as the core, often used in data c
5、ompression. In the computer information processing, Huffman coding is a consistent coding method (also known as entropy coding method ) for lossless compression of data. Entropy coding method refers to the source character (for example, a file of a symbol) is encoded using a special encoding table.
6、This coding table is special because it is the statistical probability of occurrence of each source character set (high probability of occurrence of the character using a shorter encoding, on the contrary a low probability use a longer encoding, which makes the average length of the encoded string i
7、s the shortest, so as to achieve lossless compression of data). Is a comprehensive analysis of the static huffman encoding and dynamic huffman encoding algorithm algorithm detailed static huffman coding tree and the dynamic huffman tree construction program, and for the two algorithms are given corr
8、esponding C-language code. he operation analysis found that the construct static huffman tree, a large number of time consumed in the two smallest elements selected from the set of elements. Dynamic huffman coding algorithm overcome the shortcomings of the former, but the complexity of the algorithm
9、, and decompression time. Thus, according to the single value of the character encoding, huffman coding to do a second improvement, do not construct the huffman tree, but with a two-dimensional array of analog huffman tree creation process, and each character coding, this improvement effectively imp
10、rove the compression ratio. Keywords: Static huffman coding, Compression, Node, huffman tree第一章 绪论1.1 研究目的及意义 从信息论角度看,信源编码的一个最主要的目的,就是要解决数据的压缩问题。数据压缩是指以最少的代码表示信源所发出的信号,减少容纳给定信息集合或数据采样集合的信号空间。图像编码与压缩的目的就是对图像数据按一定的规则进行变换和组合,从而达到以尽可能少的代码表示尽可能多的图像信息。 图像数字化之后,其数据量非常庞大,例如,一副640480 的彩色图像(24bit/像素),其数据量约为92
11、1.6KB。如果以30 帧/s 的速度播放,则每秒的数据量为6404802430bit=221.12Mbit,需要221 Mbit/s 的通信回路。在多媒体中,海量图像数据的存储和处理是一个难题。如不进行编码压缩处理,一张存650MB 字节的光盘仅能存放24s 左右的640 像素480 像素的图像画面15。总之,大数据量的图像信息会给存储器的存储容量、通信干线通道的带宽以及计算机的处理速度增加极大的压力。仅靠增加存储器容量,提高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的。另一方面,图像本身包含着大量的冗余成分。统计测量表明图像信号在相邻像素间、相邻行间、相邻帧之间存在着很强的相
12、关性。一般情况下,画面中亮度变化相对平坦的地方,相邻像素就有相同的值,而且对相邻帧的图像来说,画面中的大部分区域信号变化缓慢,尤其是背景部分几乎不变。如果能对这些冗余成分加以有效削减,就能够大大节减图像的存储空间,减少图像传输时所占信道容量,使得现有的PC 和网络在指标和性能方面能够达到处理图像信息的要求。没有压缩技术的发展,大容量图像信息的存储与传输难以适应应用的要求,多媒体通信技术也难以推广。因此,图像数据在传输和存储中,数据的压缩是必不可少的1.2 图像压缩编码技术概述1.2.1 图像压缩编码技术分类 图像压缩编码的方法很多,其分类视出发点不同而有差异。从图像压缩技术发展过程来看,可将图
13、像压缩编码分为两代,第一代是指20世纪80年代以前的编码方法,它主要研究有关信息熵、编码方法以及数据压缩比等内容。第二代是指20 世纪80 年代以后的编码方法,它突破了信源编码理论,结合分形、模型基、神经网络、小波变换等数学工具,充分利用了人类视觉系统生理特性和图像信源的各种特性。但由于“第二代”编码技术增加了分析的难度,所以大大增加了实现的复杂性。从当前发展情况来看,它仍处于深入研究的阶段。 根据解压重建后的图像与原始图像之间是否有误差,图像压缩编码分为无损(也成为无失真、无误差、信息保持、可逆压缩)编码和有损(有误差、有失真、不可逆)编码两大类。无损压缩中去掉的仅仅是图像数据中冗余的数据,
14、经解码重建的图像和原始图像没有任何失真,如哈夫曼编码、行程编码、算术编码;有损压缩是指解码重建的图像与原始图像相比有失真,不能精确地复原,但视觉效果基本上相同,是实现高压缩比的编码方法,如预测编码、变换编码。1.2.2 图像压缩编码评价 图像信号在编码和传输中会产生误差,尤其是在熵压缩编码中,产生的误差应在允许的范围内。压缩方法的优劣主要由压缩比和所恢复的图像的质量两个方面来衡量。(1)图像熵 设数字图像像素灰度级集合为d1,d2,dn,其对应的概率分别为p(d1),p(d2),,p(dn)。按信息论中信源信息熵的定义,图像的熵定义为: (1) 图像的熵表示像素各个灰度级数据的统计平均值,给出
15、了对输入灰度级集合进行编码时所需的平均位数的下限。(2)平均码字长度 设ai 为数字图像中灰度级di 所对应的码字长度(二进制代码的位数),其相应出现的概率为p(di),则该数字图像所赋予的平均码字长度为: (2)(3)编码效率 (3) 根据信息论中信源码理论,可以证明在R H 条件下,总可以设计出某种无失真编码方法。当然如果编码结果使R 远大于H,表明这种编码方法效率很低,占用比特数太多。最好的编码结果是使R 等于或接近于H。这种状态的编码方法,成为最佳编码。(4)压缩比 压缩比是指编码前后平均码长之比,如果用n 表示编码前每个字符的平均码长,通常为用二进制码表示时的位数,则压缩比可表示为:
16、 (4) 一般来说,压缩比大,则说明被压缩掉的数据量多。一个编码系统要研究的问题是设法减小编码平均长度R,使编码效率尽量趋于1,而冗余度趋于0。1.3 哈夫曼编码简介 哈夫曼编码是根据可变长最佳编码定理,应用哈夫曼算法而产生的一种编码方法。它是一种无损压缩编码方法,其基本原理是出现频度较高的数据用较短的代码,出现频度较低的数据用较长的代码。这些代码都是二进制码,且码长是可变的。它的实现主要借助于哈夫曼树。哈夫曼树,又称最优二叉树,是一类带权路径最短的树。所有可能的输入符号在哈夫曼树上对应为一个叶结点,叶结点的位置就是该符号的哈夫曼编码。具体来说,一个符号对应的哈夫曼编码就是从根结点开始,沿左支
17、或右支前进,一直找到该符号所对应的叶结点为止的路径所产生的二进制编码。这种编码是一种无前缀编码,即,任一字符的编码都不会是其他字符编码的前缀,因而数据编码后在存储与传输的过程中不会产生二义性。假设原始数据中含有k 个各不相同的字符a1,a2,ak,所出现的频率分别为w1,w2,wk,则哈夫曼编码算法2如下:(1) 根据给定的n 个权值w1,w2,wn构成n 棵二叉树的集合F=T1,T2,Tn,其中每棵二叉树Ti(i=1,2,n)中只有一个权值为wi 的根结点,其左、右子树均为空;(2)在F 中选取两棵结点的权值最小的树作为左、右子树,构造一棵新的二叉树,置新二叉树的根结点的权值为其左、右子树上
18、根结点的权值之和;(3) 在F 中删除这两棵树,同时将新得到的二叉树加入到F 中;(4) 重复步骤(2)和(3),直到F 中只含一棵树为止。这棵树便是哈夫曼 树。(5) 将哈夫曼 树的左支标0,右支标1,或者左支标1,右支标0(本文采用前一种形式)。然后将从根到叶子的路径上的标号依次相连,作为该叶子所表示字符的编码。 哈夫曼编码有静态和动态两类。静态哈夫曼编码是以每个字符出现的概率为权值构造哈夫曼编码树,字符存在于叶子上,每个字符都有唯一的二进制序列表示,压缩时,只要压入相应的哈夫曼编码即可;解压时,根据取出的哈夫曼编码,从根结点出发,编码为0时走左子树,为1时走右子树,直至叶结点。动态哈夫曼
19、编码又称自适应哈夫曼编码,它对数据压缩依据的是动态变化的哈夫曼编码树,具体地说,对第i+1个字符的编码是根据原始数据中前i个字符所建立哈夫曼编码树进行的。1.4 本设计所做的主要工作 由上可知,不论是静态哈夫曼编码还是动态哈夫曼编码,其编码和解码过程都相对简单,而如何构造哈夫曼编码树成为问题的关键。论文分别在第2章、第3章中详细介绍了静态哈夫曼编码树和动态哈夫曼编码树的构造方案,并且通过例子演示了构造过程。之后,分别利用这两种编码算法实现了图像的压缩,并且给出了相应的C语言代码。第3章最后一节对两种编码方法作了比较。 另外,由于在构造静态哈夫曼树时,大量的时间消耗在从元素集合中选取两个最小的元
20、素上,因此,在其中引入了堆排序算法,这一改进有效地缩短了压缩时间,第4章第一节对这一改进做了介绍。在静态哈夫曼编码算法中,哈夫曼树的保存占用了大量的空间,而动态哈夫曼编码算法,虽然克服了前者的缺点,但是算法复杂,而且解压缩时间长。因此,在第4章第二节,根据字符编码的单值性,对哈夫曼编码的第二个改进做了介绍,即用一个二维数组模拟哈夫曼树的创建过程并得到字符的前缀编码,这一改进有效地提高了压缩比。第二章 利用静态哈夫曼编码实现图像压缩2.1 静态哈夫曼编码介绍 哈夫曼编码是上个世纪五十年代由哈夫曼教授研制开发的,它借助了数据结构当中的树型结构,在哈夫曼算法的支持下构造出一棵最优二叉树,我们把这类树
21、命名为哈夫曼树. 因此,准确地说,哈夫曼编码是在哈夫曼树的基础之上构造出来的一种编码形式,它的本身有着非常广泛的应用. 那么,哈夫曼编码是如何来实现数据的压缩和解压缩的呢? 众所周知,在计算机当中,数据的存储和加工都是以字节作为基本单位的,一个西文字符要通过一个字节来表达,而一个汉字就要用两个字节,我们把这种每一个字符都通过相同的字节数来表达的编码形式称为定长编码. 以西文为例,例如我们要在计算机当中存储这样的一句话: I am a teacher . 就需要15个字节,也就是120个二进制位的数据来实现. 与这种定长编码不同的是,哈夫曼编码是一种变长编码. 它根据字符出现的概率来构造平均长度
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- huffman 哈夫曼编码的实现及应用 毕业论文 哈夫曼 编码 实现 应用
链接地址:https://www.31ppt.com/p-2396479.html