基于灰度图像的霍夫曼编解码技术 161120058 陈琪

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)把出现的元素概率最小的两个相加合并成新的概率,与剩余的概率组成新的概率集合,直到剩下最后两个概率。
(3)从最后一步开始反向进行分配码字,对于每次相加的两个概率,给大的赋“0”,小的赋“1”,存储到一个稀疏矩阵,最后写出01序列的哈夫曼编码。
(4)把整字节存储的huffcode一位一位取出,转为字符串,去掉原来为凑整字节数所添加的零进行解码。
《信息编码理论》课程
题目:基于c++哈夫曼编码的图像编解码算法的
仿真实现
******
学号:*********
学院:物理与信息工程学院
专业:081001通信与信息系统
年级:2016级
2016年11月24日
【摘要】哈夫曼编码(Huffman coding)是一种常用的信源熵编码,是一种以哈夫曼树为核心的数据编码方式,在数据压缩中得到广泛应用。在计算机信息处理中,哈夫曼编码是一种一致性编码方法,用于数据的无损压缩。本论文首先介绍了图像压缩相关知识。随后,分析概述了哈夫曼压缩编码的原理及方法,并采用Microsoft Visual Stdio软件对两幅图片进行压缩编码程序设计,获得压缩信息及哈夫曼编码表,分析压缩后的图像像素数据及压缩比。并对图像进行重构。
2.4
哈夫曼编码虽然是最佳编码,但存在一些缺点,具体如下:
(1)对于过短的文件进行编码,意义不大。因为存储哈夫曼树的信息需要一定的存储空间;
(2)利用哈夫曼编码,若用于通信网络,会引起较大的延时;
(3)对较大文件进行编码,会出现频繁的磁盘读写访问,降低了数据编码的速度[10[11]。
3
3.1
(1)首先,寻找出现的所有元素,接着计算各元素出现的概率,并将元素按照出现概率排列,产生码字。
例如:假设信源符号为【a、b、c、d、e、f、g】,其出现的概率相应的为【0.25、0.025、0.025、0.05、0.35、0.25、0.05】,一共7个字符,对其进行哈夫曼编码,算法如下:
首先按照每个字符出现的频率大小从左到右排列:0.35、0.25、0.25、0.05、0.05、0.025、0.025;选出最小的两个值作为叶子节点构成一棵二叉树,值较大的叶子节点在左,两个叶子节点对应的频率之和作为根节点。把原排列中最小的两个节点删除,新的根节点插入排列保持大小从左到右的排列顺序不变;重复执行2),直到最后得到值为1的根节点。得到一棵哈夫曼树,如图2.1所示:
[8]林建英,李建华等.一种易于硬件实现的快速自适应哈夫曼编码算法[J].大连理工大学学报,2008,48(3):436-440
[9]雒莎,葛海波.基于查找表的自适应Huffman编码算法[J].西安邮电学院学报,2011(5):76-79.
[10]刘燕清,龚声蓉.基于一次排序动态编码的Huffman编码算法[J].计算机应用与软件,2009(12):86-88+176
[11]邵小兵.基于Huffman编码的数据压缩算法的研究与实现[D].西安:西安工业大学
[12]JENGJ H,TSFJqG C C,HSmH J G.Study on Huber Fractal Image Compression[J].IEEETransactions on Image Processing.2009.18(5):995—1003.
(5)显示编码的压缩信息(如压缩率、最大码长等)。
4.
为了方便实验,选择MATLAB软件平台作为实验平台,实验中使用的是MATLAB7.0版本的软件,实验中涉及的信源数据输入文件是一个64x64的灰度图像矩阵lena.jpg作为原始的实验图像。
4.1
编码时程序首先扫描文件符号概率分布,然后通过概率分布建立Huffman树,其叶节点为各个符号及其对应的出现概率。从根节点遍历二叉树到各叶节点,根据遍历路径确定符号的Huffman编码.如下图4.1.1所示。
图2.1哈夫曼编码树
在得到的哈夫曼树上左分支标记1,右分支标记0,所有的字符根据其频率标记到对应的叶子节点上,从根节点到叶子节点路径上遇到的0、1字符串即为对应叶子节点所在字符的编码。a、b、c、d、e、f、g七个字符的哈夫曼编码分别是:10、0001、0000、0011、11、01、0010,可以看到,符号只能出现在树叶上,任何一个字符的路径都不会是另一字符路径的前缀路径。
[6]Knuthde.Dynamic Huff man coding [J].Journal of Algorithms,l985.6:l63-180
[7]VitterJs. Design and analysis of dynamic Huffman codes [J].Journal of the ACM,1987,34 (4 ):825-845
[13]http://blog.csdn.net/liulina603/article/details/18959051net
最后分别给建成的最优二叉树中每个节点的左右分支分别标0和1,作为权值,这样,从根节点到每一个叶子节点有一条唯一的路径,读出每条路径上的权值就会产生一个对应节点的唯一码字。表1体现了最直观的哈夫曼编码方式。
表1哈夫曼编码过程
信源符号
概率
编码过程
码字W
Βιβλιοθήκη Baidu码长K
0.4
0.4 0.4 0.6 0 1.0
0.2 0.4 0 0.4 1
接下来进行对存储的信息解码,哈夫曼解码的软件设计流程如下:
图4.2.3哈夫曼码解码流程
图4.2.4解码运行结果
图4.2.5解码后的图像与原图像对比
解码后的图像与原来的图像是一样的,这就是想要的结果,说明说哈夫曼编码起到了效果,同时很直观的说明了哈夫曼编码是一种无损的数据压缩方法。
5
图像压缩技术研究了几十年,取得了很大的成绩,但还有许多不足,值得我们进一步研究。Huffman编码压缩作为一种简单高效的编码方法,在文本,图像,音频等压缩技术中都有着广泛的应用。从整个课题中可以看到,Huffman编码算法只对图像压缩一次,要想提高压缩比,可以对图像进行两次压缩或多次压缩。另外,还可以与人眼视觉特性相结合实现有损压缩[12][13]。
由此可见一个消息出现的可能性越小,其信息量就越多,其出现对信息的贡献量越大,反之亦然。
信源的平均信息量称为“熵”(entropy),可以表示为:
对上式取以2为底的对数时,单位为比特(bits):
根据香农(Shannon)无噪声编码定理,对于熵为H的信号源,对其进行无失真编码所可能达到的最低比特数为,这里为一任意小的正数,因此可能达到的
无损压缩删除的是冗余信息,重构后的数据和原始数据完全相同。无损编码主要可分为三大类:基于统计概率方法,基于字典编码方法和预测编码。基于概率的方法通过用短的代码代表出现概率夫的符号,用长的代码代表出现概率小的符号,实现数据压缩,侧如电影《风声》中所说的Morse码。基于统计的方法是指根据每个字符出现的概率进行编码,常见的方法[1]有1952年Huffman提出的霍夫曼编码[2]和1960年Elias提出的算术编码(Arithmetic Coding)[3]。
图像压缩是通过删除图像数据中冗余的或者不必要的部分来减小图像数据量的技术,压缩过程就是编码过程,解压缩过程就是解码过程[5]。压缩技术分为无损压缩和有损压缩两大类,前者在解码时可以精确地恢复原图像,没有任何损失;后者在解码时只能近似原图像,不能无失真地恢复原图像。假设有一个无记忆的信源,它产生的消息为{ai},1≤i≤N,其出现的概率是已知的,记为P(ai)。则其信息量定义为:
[2]王防修, 周康. 通过哈夫曼编码实现文件的压缩与解压 [ J].武汉工业学院学报.2008.
[3]孙日明.几种图形图像压缩方法[D].大连:大连理工大学.2013.
[4]田端财.等.基于哈夫曼编码的图像压缩技术研究[J].科技资讯,2009(08):29-30
[5]李薇.等.霍夫曼编码和游程编码在图像编码中的应用[J].舰船电子工程,2010,30(7):67-69
1.2
对数字图像进行压缩通常利用两个基本原理[4]:一是数字图像的相关性。在图像的同一行相邻象素之间,相邻象素之间,活动图像的相邻帧的对应象素之间往往存在很强的相关性,去除或减少这些相关性,也即去除或减少图像信息中的冗余度也就实现了对数字图像的压缩。帧内象素的相关称做空域相关性。相邻帧间对应象素之间的相关性称做时域相关性。二是人的视觉心理特征。人的视觉对于边缘急剧变化不敏感(视觉掩盖效应),对颜色分辨力弱,利用这些特征可以在相应部分适当降低编码精度而使人从视觉上并不感觉到图像质量的下降,从而达到对数字图像压缩的目的。
通过此次课程设计我理解了什么是Huffman(哈夫曼)编码,并通过此次课程设计学会了如何运用C/C++语言编写灰度图像霍夫曼编码的程序。了解了Huffman(哈夫曼)编码的具体方法,学会了如何计算平均码长和压缩比,并计算出编码效率。
参考文献
[1]黄贤武,王加俊,李家华.数字图像处理与压缩编码技术【M】.成都:电子科技大学出版社,2000.
图4.1.1哈夫曼编程总体流程框图
4.2
图4.2.1程序运行结果图
因为霍夫曼编码是无损压缩编码,如图4.2.1所示,测试前lena.bmp大小为5KB左右,压缩比为2.999:1,压缩完成后2.38KB。
图4.2.2运行后数据计入
图4.2.2的第一行表示:输出起始节点、节点总数、图像所占空间(字节)。其余行表示:第i个节点颜色表,第i个节点的左孩子,第i个节点的右孩子。
0.2 0 0.2 1
0 0.2 1
1
1
1
0.2
01
2
0.2
000
3
0.1
0010
4
0.1
0011
4
解码过程:
(1)指向huffman树的树根。
(2)根据当前一位编码为0或l从而指向左或右儿子节点。
(3)判断该节点的左,右儿子是否是空(即为0)不是则向后扫描一个编码,执行上一步,如是则完成一个解码,该叶子节点的数组下标即为像素值,继续解下一个。
最大压缩比:
其中B是原始图像的平均比特率。
在图像压缩中,压缩比是一个重要的衡量指标。可以定义压缩比为:
图像的平均码字长度R为:
编码效率η定义为:
信息冗余度为:
2
2.1
Huffman(哈夫曼)编码是统计编码的一种,属于无损压缩编码。该编码是在1952年为文本文件建立的,编码方法简单且有效,因而得到广泛的应用。现在已经派生出很多变体。它的基本原理是用较短的代码代替出现概率较高的数据,用较长的代码代替出现概率较低的数据,所有代码都采用二进制码,其码的长度是可变的,且每个数据的代码各不相同。它提出的这种编码也称为最佳变长码,其优点是编码的效率高,但这种编码依赖于源的统计特性,同时我们看到,Huffman编码只能通过查表的方法建立消息和码字之间的关系,所以如果消息数很大,需要存储的码表也需很大,从而会影响存储量、编码以及译码速度等各个方面的性能[6][7]。
【关键字】哈夫曼编码图像压缩c++
1
1.1
图像压缩作为图像处理的一个重要组成部分,一直受到广大研究人员的关注。在几十年研究人员的努力下,图像压缩算法从最初的编码方法上的研究到后来的空间变换编码上的研究,随着小波理论、分形理论、人工神经网络理论和视觉仿真理论建立,图像压缩编码方法向着更高的压缩比和更好的压缩效果方向发展。根据压缩机制的不同,可把压缩分为无损压缩和有损压缩。
2.2
其具体步骤如下:
1.将信源符号按出现概率从大到小排成一列,然后把最末两个符号的概率相加,合成一个概率。
2.把这个符号的概率与其余符号的概率按从大到小排列,然后再把最末两个符号的概率加起来,合成一个概率。
3.重复上述做法,直到最后剩下两个概率为止。
4.从最后一步剩下的两个概率开始逐步向前进行编码。每步只需对两个分支各赋予一个二进制码,如对概率大的赋予码0,对概率小的赋予码[8][9][10]。
相关文档
最新文档