第三章霍夫曼编码南京林业大学毕业设计论文管理资料.docx
《第三章霍夫曼编码南京林业大学毕业设计论文管理资料.docx》由会员分享,可在线阅读,更多相关《第三章霍夫曼编码南京林业大学毕业设计论文管理资料.docx(44页珍藏版)》请在冰豆网上搜索。
第三章霍夫曼编码南京林业大学毕业设计论文管理资料
南京林业大学
本科毕业设计(论文)
题目:
霍夫曼编码及其效率的研究
学院:
南方学院
专业:
电子信息工程
学号:
N080802124
学生姓名:
徐佳迪
指导教师:
胡洁
职称:
讲师
二O一二年五月二十日
摘要
Huffman编码是一种无损编码,广泛用于数据文件压缩的十分有效的编码方法,其在电子计算机、电视、遥控和通讯等方面广泛使用。
其压缩通常在20%~90%之间。
哈夫曼编码算法是利用字符在文件中出现的频率表来建立一个用0,1串表示各字符的最优表示方式。
本文主要研究Huffman编码在图像压缩方面的应用,介绍了Huffman编码的原理和步骤。
通过实践运用Matlab工具验证Huffman算法在图像的压缩和图像复原中可以取得良好的压缩效果。
Huffman编码图像压缩算法可以提高图像传输效果和质量,具有较好的应用前景及可扩展性。
关键词:
Huffman编码无损压缩Matlab
abstract
Huffmancodingisalosslesscoding,whichiswidelyusedindatafilecompressionandthecomputer,TV,,remotecontrolandcompressionisusually20%to90%.Huffmanencodingalgorithmisbasedoncharacterfrequencytableinthedocumenttocreatea0,1stringtogetanoptimalrepresentationofeachcharacter.
ThispapermainlystudiestheapplicationofHuffmancodinginimagecompression,theprinciplesandstepsoftheHuffmancodinghavebeenintroduce,AndMatlabhasbeenutilizedtorealizetheHuffmancoding.Fromtheresults,itcanbeenconcludedthatHuffmancodingcanachievegoodcompressioninimagecompressionandimagerestoration..Huffmancodingcanimprovetheeffectivenessandqualityofimagetransmission,hasgoodapplicationprospectsandexpansibility.
Keyword:
HuffmancodinglosslesscompressionMatlab
第一章绪论
图像压缩编码的现状和发展趋势
1948年提出电视数字化后,就开始对图像压缩编码技术的研究工作,至今已有50多年的历史。
图像压缩的基本理论起源于20世纪40年代末香农的信息理论。
香农的编码定理告诉我们,在不产生任何失真的前提下,通过合理的编码,对于每一个信源符号分配不等长的码字,平均码长可以任意接近于信源的熵。
在五十年代和六十年代,图像压缩技术由于受到电路技术等的制约,仅仅停留在预测编码、亚采样以及内插复原等技术的研究,还很不成熟。
1969年在美国召开的第一届“图像编码会议”标志着图像编码作为一门独立的学科诞生了。
到了70年代和80年代,图像压缩技术的主要成果体现在变换编码技术上,矢量量化编码技术也有较大发展,有关于图像编码技术的科技成果和科技论文与日俱增,图像编码技术开始走向繁荣。
自80年代后期以后,由于小波变换理论,分形理论,人工神经网络理论,视觉仿真理论的建立,人们开始突破传统的信源编码理论,例如不再假设图像是平稳的随机场。
图像压缩编码向着更高的压缩比和更好的压缩质量的道路前进,进入了一个崭新的、欣欣向荣的大发展时期。
如今图像压缩编码技术广泛地被应用在各个领域。
如:
电视计算机、多媒体出版物、遥感图像数据库等。
它已经为开创新的应用领域提供了良好的技术基础。
到目前为止,图像压缩编码技术已经发展到第二代编码技术。
1、第一代编码技术包括建立在shannon的码率失真理论基础上的预测编码、变换编码、统计编码及Oliver提出的PCM编码理论。
虽然这些编码技术在中等压缩率的情况下,能提供非常好的图像质量,但在码率非常低得情况下,无法提供令人满意的质量。
究其原因是由于这些技术没有利用图像的结构特点,同时也没有考虑人类视觉系统的特性,因此它们也就只能以像素或块作为编码的对象。
2、第二代编码包括基于分形的编码、基于模型的编码、基于区域分割的编码,以及基于神经网络的编码等。
这类编码技术不再局限于信息论的框架,充分利用了人类视觉以及图像信源的各种特征,实现从“波形”编码到“模型”编码的转变,获得了更高的压缩比。
课题的研究背景
1951年,哈夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试。
导师RobertM.Fano给他们的学期报告的题目是,寻找最有效的二进制编码。
由于无法证明哪个已有编码是最有效的,哈夫曼放弃对已有编码的研究,转向新的探索,最终发现了基于有序频率二叉树编码的想法,并很快证明了这个方法是最有效的。
由于这个算法,学生终于青出于蓝,超过了他那曾经和信息论创立者香农共同研究过类似编码的导师。
哈夫曼使用自底向上的方法构建二叉树,避免了次优算法Shannon-Fano编码的最大弊端──自顶向下构建树。
1952年,DavidA.Huffman在麻省理工攻读博士时发表了《一种构建极小多余编码的方法》(AMethodfortheConstructionofMinimum-RedundancyCodes)一文。
它是是可变字长编码(VLC)的一种,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。
国内外研究状况
《计算机世界月刊》1994年7月号所登载的《动态哈夫曼编码的数据压缩方法》一文给出了一种实时性较强的数据压缩方法,该方法的最大特点是不需预先对原始数据进行一遍扫描以建立哈夫曼树,而改为以动态变化的哈夫曼树对数据编码。
该文所附的动态哈夫曼编码数据压缩与解压源程序中的UpDate函数是动态修改哈夫曼树的关键部分,该函数对动态哈夫曼树的一种可能情况无法正确修改,针对这一点,该文附上对该函数的一个修正定义,以使该压缩与解压程序更加完善。
2007年第24卷第11《期微电子学与计算机》一书中阐述了一种基于浓缩Huffman表的Huffman算法的研究与实现。
给出两种核心的算法:
树构造浓缩Huffman表
设规范Huffman树根结点所在层为第1层,共有n层,从第2层开始记录每一层的相关信息,形成Huffman表,具体做法是:
(1)第2层,记录最右边的非叶结点的编码b2。
显然,若b2=1,表明第2层没有叶结点;若b2=0,表明第2层有一个叶结点且编码为1,并令二进制串B=b2。
(2)逐次对第i层(i=3,4,⋯,n-1)进行相同处理,若第i层没有叶结点,且I层之前记录的编码中第1位出现过0,则记录一位二进制位bi=1作为标记,否则记录第i层最右边非叶结点的编码bi,并依次把bi存放在bi-1的右边,得到二进制串B=b2b3⋯bn-1。
表得到规范Huffman树
本节介绍如何从二进制位串B得到规范Huffman树的编码[2~5]。
。
设树的第i层(i=2,3,⋯,n)上最右边非叶结点编号为Ni,最右边的结点编号为Ri。
(1)取B中第一个字串b2,因为层数为2,所以码长为1。
若b2=1,则N2=R2=1,该层无叶结点;若b2=0,则N2=0,R2=1,由定理3得到该层叶结点编码为N2+1=1。
(2)对第3层取B中第2个字串b3,具体做法是:
若b2=0,且b2后的第一位是1,由定理5,b3=1表明该层没有叶结点,否则b3为2位二进制串,并由定理2得到R3=2*N2+1。
根据定理3,由b3逐次加一知道等于R3为止,分别得到第3层所有叶结点的编码。
(3)按
(2)中的方法逐次对第i层(i=4,5,⋯,n)进行相同处理,分别得到Ri,并通过Ni求得每一层的叶结点的编码。
课题研究的目的和意义
举个例子,将照相机拍摄到的图像数字化之后,其数据量非常庞大。
对于一般的彩色图像,以三原色(R,G,B)分别摄入,井分别以8位进行数字化,则一个像素是以24位二进制数据来描述的。
如果以电视画面分辨率为640X480来计算,。
如果按每秒30帧播放,则需要221Mbps(bitpersecond)的通信回路。
一张CD(compactdisk)大约可以记录600Mbyte的信息,所以只能存放大约20秒的录像信息,并且需要221MbPs速度读出。
有线电视台要具备数百个频道的数据传送能力,为了使一张CD可以记录30分钟的录像,就需要对数据进行大约1/100的压缩。
对于传送黑白二值图像的传真,利用电话线,经调制解调器(modem),将图像数据转换成编码数据进行传送。
这时,因为电话线路只有14400bPs左方的传输速度,所以耍在数十秒时间内传送一页A4稿纸的内容,就必须进行数据压缩。
设设备的分辨率为200bpi(bitperinch),,需要240秒的传送时间。
由此可知,图像数据在传输和存储中,数据的压缩都是必不可少的,图像数据压缩是根据图像的数据冗余和视觉特性进行的。
图像压缩编码技术可以追溯到1948年提出的电视信号数字化,到今天已经有60多年的历史了。
在此期间出现了很多种图像压缩编码方法,特别是到了80年代后期以后,由于小波变换理论,分形理论,人工神经网络理论,视觉仿真理论的建立,图像压缩技术得到了前所未有的发展,其中,Huffman编码是由Huffman1952年提出的一种编码方法。
这种编码方法根据源数据各信号发生的概率进行编码。
在源数据中出现概率越大的信号,分配的字码越短;出现概率越小的信号,其码长越长,从而达到尽可能少的码表示源数据。
它在编码方法中的最佳的。
本文主要内容
本文首先介绍了统计编码的相关内容,其次描述了图像压缩技术以及几种常见的图像压缩方式的机理,后面着详细描述了Huffman编码的基本知识,最后基于Matlab,运用Huffman编码对图像进行了压缩处理,并对处理结果作了分析。
第二章
图像压缩和统计编码
图像压缩
图像压缩技术概念
所谓的图像压缩编码技术就是对要处理的图像源数据按一定的规则进行变换和组合,从而达到以尽可能少的代码(符号)来表示尽可能多的数据信息。
图像压缩原理
图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码.
图像数据之所以能被压缩,就是因为数据中存在着冗余。
图像数据的冗余主要表现为:
图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。
数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。
由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。
信息时代带来了“信息爆炸”,使数据量大增,因此,无论传输或存储都需要对数据进行有效的压缩。
在遥感技术中,各种航天探测器采用压缩编码技术,将获取的巨大信息送回地面。
数字图像的冗余主要表现在以下几种形式:
A、空间冗余:
规则物体和规则背景的表面物理特性都具有相关性,数字化后表现为数字冗余。
例如:
某图片的画面中有一个规则物体,其表面颜色均匀,各部分的亮度、饱和度相近,把该图片作数字化处理,生成位图后,很大数量的相邻像素的数据是完全一样或十分接近的,完全一样的数据当然可以压缩,而十分接近的数据也可以压缩,因为恢复后人亦分辨不出它与原图有什么区别,这种压缩就是对空间冗余的压缩。
B、时间冗余:
序列图像(如电视图像和运动图像)和语音数据的前后有着很强的相关性,经常包含着冗余。
在播出该序列图像时,时间发生了推移,但若干幅画面的同一部位没有变化,变化的只是其中某些地方,这就形成了时间冗余。
C、统计冗余:
空间冗余和时间冗余是把图像信号看作概率信号时所反应出的统计
特性,因此,这两种冗余也被称为统计冗余。
D、编码冗余:
同样长度的编码可以表示不同的信息。
E、结构冗余:
相似的,对称的结构如果都加以记录就出现结构冗余。
F、知识冗余:
由图像的记录方式与人对图像的知识差异而产生的冗余。
人对许多图像的理解与某些基础知识有很大的相关性。
许多规律性的结构,人可以由先验知识和背景知识得到。
而计算机存储图像时还得把一个个像素信息存入,这就形成冗余。
G、视觉冗余:
视觉系统对于图像场的注意是非均匀和非线性的,视觉系统不是对图像的任何变化都能感知。
图像压缩技术分类
图像压缩技术分类
数据压缩技术主要分为无损数据压缩和有损数据压缩两大类,为了保证数据的完整性,对数据的压缩只能采用无损数据压缩技术目前已经开发了很多商品化的数据压缩产品,国际上也制定了很多数据压缩标准(比如JPEG、MPEG等),对这些数据的压缩采用动态的数据流压缩方式。
图像压缩目前的目标
目标是在给定位速(bit-rate)或者压缩比下实现最好的图像质量。
但是,还有一些其它的图像压缩机制的重要特性:
可扩展编码(en:
Scalability)通常表示操作位流和文件产生的质量下降(没有解压缩和再压缩)。
可扩展编码的其它一些叫法有渐进编码(en:
progressivecoding)或者嵌入式位流(en:
embeddedbitstreams)。
尽管具有不同的特性,在无损编码中也有可扩展编码,它通常是使用粗糙到精细像素扫描的格式。
尤其是在下载时预览图像(如浏览器中)或者提供不同的图像质量访问时(如在数据库中)可扩展编码非常有用有几种不同类型的可扩展性:
质量渐进(en:
Qualityprogressive)或者层渐进(en:
layerprogressive):
位流渐进更新重建的图像。
分辨率渐进(en:
Resolutionprogressive):
首先在低分辨率编码图像,然后编码与高分辨率之间的差别。
成分渐进(en:
Componentprogressive):
首先编码灰度数据,然后编码彩色数据。
感兴趣区域编码,图像某些部分的编码质量要高于其它部分,这种方法可以与可扩展编码组合在一起(首先编码这些部分,然后编码其它部分)。
元数据信息,压缩数据可以包含关于图像的信息用来分类、查询或者浏览图像。
这些信息可以包括颜色、纹理统计信息、小预览图像以及作者和版权信息。
图像压缩目前的标准
经典的视频压缩算法已渐形成一系列的国际标准体系,,。
图像压缩效果的评估
压缩方法的质量经常使用峰值信噪比来衡量,峰值信噪比用来表示图象有损压缩带来的噪声。
但是,观察者的主观判断也认为是一个重要的、或许是最重要的衡量标准。
下面我们就介绍一下图像压缩中的无损压缩。
统计编码的概念
高效编码的主要方法是尽可能地除去信源中的成分,从而减少码率传递最大的信息量。
对于有记忆信源来说,首先要去除像素间的相关性,从而达到压缩编码的效率。
对于无记忆信源来说,像素间没有相关性,可以利用像素灰度值出现概率的不均等性,采用某种编码方式,从而达到压缩冗余信息的目的。
这种根据像素灰度值出现概率的分布特性而进行的压缩编码叫做统计编码。
主要的统计编码包括香农-范诺(Shannon-Fano)编码、哈夫曼(Huffman)编码、算术编码(arithmeticcoding)和LZW编码等。
所谓信息量是指从N个相等可能事件中选出一个事件所需要的信息度量或含量,也就是在辩识N个事件中特定的一个事件的过程中所需要提问"是或否"的最少次数.
信息熵
信息是个很抽象的概念。
人们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。
比如一本五十万字的中文书到底有多少信息量。
直到1948年,香农提出了“信息熵”的概念,才解决了对信息的量化度量问题。
信息论之父克劳德·艾尔伍德·香农第一次用数学语言阐明了概率与信息冗余度的关系,用来度量信息中所含的信息量:
(为自信息量
的均值/数学期望)
其中,H为信息熵(单位为bit),S为信源,pi为符号si在S中出现的概率。
最大离散熵定理:
所有概率分布P(Xj)所构成的熵,以等概率时为最大。
此最大值与熵之间的差值,就是信源X所含的冗余度(redundancy)。
可见:
只要信源不是等概率分布,就存在着数据压缩的可能性。
这就是统计编码的理论基础。
此最大值与熵之间的差值,就是信源X所含的冗余度(redundancy)。
可见:
只要信源不是等概率分布,就存在着数据压缩的可能性。
这就是统计编码的理论基础。
熵编码的概念
如果要求在编码过程中不丢失信息量,即要求保存信息熵,这种信息保持编码又叫做熵保存编码,或者叫熵编码。
特性:
熵编码是无失真数据压缩,用这种编码结果经解码后可无失真地恢复出原图像。
常见的统计编码
算术编码(ArithmeticCoding)跳出了分组编码的范畴,从全序列出发,采用递推形式的连续编码。
它不是将单个的信源符号映射成一个码字,而是将整个输入符号序列映射为实数轴上[0,1]区间内的一个小区间,其长度等于该序列的概率;再在该小区间内选择一个代表性的二进制小数,作为实际的编码输出,从而达到了高效编码的目的。
不论是否二元信源,也不论数据的概率分布如何,其平均码长均能逼近信源的熵。
①算术编码基本原理
算术编码方法是将被编码的信息表示成实数0和1之间的一个间隔。
信息越长编码表示它的间隙就越小,表示这一间隙所须二进位就越多,大概率符号出现的概率越大对应于区间愈宽,可用长度较短的码字表示;小概率符号出现概率越小层间愈窄,需要较长码字表示。
②算术编码实现步骤
设数据序列有两种符号组成,其概率各不相同(一大一小),称概率大的为大概率符号,以MPS(MostProbableSymbol)表示大概率符号,其概率用Pe代表;称概率小的为小概率符号,用LPS(LeastProbableSymbol)表示小概率符号,其概率用Qe代表;
算术编码的实现相应地比Huffman编码复杂,但当与信号源符号的出现概率接近时,算术编码的效率高于Huffman编码。
在图像测试中表明,算术编码效率比Huffman效率高5%左右。
③在算数编码中需要注意的几个问题
,运算中出现溢出是一个明显的问题,但多数机器都有16位,32位或者64位的精度,因此这个问题可使用比例缩放方法解决。
,这个码字实在间隔【0,1)中的一个实数因此译码器在接受到表示这个实数的所有位之前不能进行译码。
,如果有一位发生错误就会导致整个消息译错。
2Huffman编码
Huffman编码(HuffmanCoding)是一种熵编码编码压缩方式,Huffman编码是可变字长编码(VLC)的一种。
Huffman压缩是个无损的压缩算法,一般用来压缩文本和程序文件。
哈夫曼压缩属于可变代码长度算法一族。
意思是不同符号(例如,文本文件中的字符)用一个特定长度的位序列替代。
因此,在文件中出现频率高的符号,使用短的位序列,而那些很少出现的符号,则用较长的位序列
3Shannon-Fano编码
按照Shannon所提出的信息理论,1948年和1949年分别由Shannon和MIT的数学教授RobertFano描述和实现了一种被称之为香农-范诺(Shannon-Fano)算法的编码方法,它是一种变码长的符号编码。
Shannon-Fano算法采用从上到下的方法进行编码:
首先按照符号出现的概率排序,然后从上到下使用递归方法将符号组分成两个部分,使每一部分具有近似相同的频率,在两边分别标记0和1,最后每个符号从顶至底的0/1序列就是它的二进制编码。
香农-范诺编码和哈夫曼编码都属于不对称、无损、变码长的熵编码。
它们的码长虽然都是可变的,但却都不需要另外附加同步代码(即在译码时分割符号的特殊代码)。
如上例中,若哈夫曼编码的码串中的头两位为01,那末肯定是符号A,因为表示其他符号的代码没有一个是以01开始的,因此下一位就表示下一个符号代码的第1位。
同样,如果出现“000”,那么它就代表符号C。
如果事先编写出一本解释各种代码意义的“词典”,即码簿(H表),那么就可以根据码簿一个码一个码地依次进行译码。
采用香农-范诺编码和哈夫曼编码时有两个问题值得注意:
没有错误保护功能,在译码时,如果码串中有哪怕仅仅是1位出现错误,则不但这个码本身译错,而且后面的码都会跟着错。
称这种现象为错误传播(errorpropagation),计算机对这种错误也无能为力,不能知道错误出在哪里,更谈不上去纠正它。
是可变长度码,因此很难在压缩文件中直接对指定音频或图像位置的内容进行译码,这就需要在存储代码之前加以考虑。
与香农-范诺编码相比,哈夫曼编码方法的编码效率一般会更高一些。
尽管存在上面这些问题,但哈夫曼编码还是得到了广泛应用。
4LZW编码
LZW算法是一种基于字典的编码——将变长的输入符号串映射成定长的码字——形成一本短语词典索引(串表),利用字符出现的频率冗余度及串模式高使用率冗余度达到压缩的目的。
该算法只需一遍扫描,且具有自适应的特点(从空表开始逐步生成串表,码字长从像素位数n+1逐步增加到12),不需保存和传送串表。
串表具有前缀性——若串wc(c为字符)在表中,则串w也在串表中(所以,可初始化串表为含所有单个字符的串)。
匹配采用贪婪算法——每次只识别与匹配串表中最长的已有串w(输出对应的码字)、并可与下一输入字符c拼成一个新的码字wc。
对串表的改进:
用w的码字来代替wc中的w,则串表中的串等长;当串表已满时(一般表长为2^12),可清表重来(输出清表码字)。
清表码字=2^n,结束码字=1+2^n。
所以,第一个可用的多字符串的码字=2+2^n。
5RLE行程长度编码
行程编码RLE(RunLengthEncoding游程长度编码)是一种使用广泛的简单熵编码。
它被用于BMP、JPEG/MPEG、TIFF和PDF等编码之中,还被用于传真机。
RLE的编码方法
RLE视数字信息为无语义的字符序列(字节流),对相邻重复的字符,用一个数字表示连续相同字符的数目(称为行程长度),可达到压缩信息的目的。
如
未压缩的数据:
ABCCCCCCCCDEFFGGG
RLE编码:
AB8CDEFF3G
对比该RLE编码例前后的代码数可以发现,在编码前要用17个代码表示的数据,而编码后只要用10个代码,:
1。
这说明RLE确实是一种压缩技术,而且这种编码技术相当直观,也非常经济。
RLE所能获得的压缩比有多大,这主要是取决于数据本身的特点。
如果图像数据(如人工图形)中具有相同颜色的图像块越大,图像块数目越少,获得的压缩比就越高。
反之(如自然照片),压缩比就越小。
RLE译码采用与编码相同的规则,还原后得到的数据与压缩前的数据完全相同。
因此,RLE是