图像的无损压缩程序设计 霍夫曼编码
图像处理中的图像压缩与恢复方法

图像处理中的图像压缩与恢复方法图像压缩是在图像处理领域中非常重要的一项技术。
在计算机视觉、数字通信以及存储等领域中,图像压缩可以大幅减少图像数据的大小,从而提高数据传输速度和存储效率。
同时,图像恢复则是在压缩后的图像还原以及修复中起到重要作用的技术。
在本文中,我们将介绍一些常见的图像压缩与恢复方法。
一. 图像压缩方法1. 无损压缩方法无损压缩方法是一种能够通过压缩图像数据,但不会导致图像失真的技术。
其中,最常见的无损压缩方法为预测编码和霍夫曼编码。
预测编码基于图像中像素之间的冗余性,通过预测后续像素的值,然后用预测值与实际值之间的差值进行编码。
其中,最著名的预测编码算法包括差分编码和游程编码。
霍夫曼编码是一种变长编码方式,利用出现频率较高的像素值分配较短的编码,而较低频率的像素值分配较长的编码。
通过统计每个像素值出现的频率,并根据频率构建霍夫曼树,可以实现对图像数据进行无损压缩。
2. 有损压缩方法有损压缩方法是一种能够通过压缩图像数据,但会导致图像失真的技术。
其中,最常见的有损压缩方法为离散余弦变换(DCT)和小波变换。
DCT是一种将图像从空间域转换到频域的方法,它能够将图像中的冗余信息集中在低频分量中,而将高频细节信息消除或减少。
通过对DCT系数进行量化和编码,可以实现对图像数据进行有损压缩。
小波变换是一种将图像分解成多个不同分辨率的频带的方法,通过对每个不同分辨率的频带进行量化和编码,可以实现对图像数据的有损压缩。
与DCT相比,小波变换可以更好地保留图像的局部细节。
二. 图像恢复方法1. 重建滤波器方法重建滤波器方法是在压缩图像恢复时常用的一种技术。
它是通过在图像的压缩域对被量化或编码的数据进行逆操作,将压缩后的图像数据恢复到原始图像。
常用的重建滤波器方法包括最近邻插值、双线性插值和双立方插值。
最近邻插值是一种简单的插值方法,它通过选择离目标位置最近的像素值来进行插值。
虽然该方法计算速度较快,但会导致图像失真。
无损编码(霍夫曼编码)

2. 分配码字
从缩减的最后一步开始反向进行编码,对最后两个概率代 表的符号一个赋“0”,一个赋“1”,“0”、“1”可随机赋 给任何一个;再倒一步,对遇到复合符号就增加一个二进制位 的码字,以区分两个符号,一直持续到原始的码原为止。
按照码字表将原图像中的各个像素灰度值用对应的码字表 示,就可以得到图像的霍夫曼编码结果。解码过程与编码过程 相反,即将图像编码值变成原灰度图像。 霍夫曼编码是无失真编码中效率较高的一种编码方法,但 其缺点是信源缩减过程复杂,运算量大。为了克服这一缺点。 人们也相应做了一些改进,所以就出现了算术编码和香农-费诺 编码。
i1
基本编码原理:
1. 无失真编码定理
在无干扰条件下,存在一种无失真的编码方法, 使编码的Lavg与信源的熵H(A)任意的接近。即:
L avg H(A) , 0
是以 H(A)为下限,即 Lavg ≥H(A),一旦出现 Lavg <H(A) , 肯定会出现失真。
几个重要参数:
H(A) (1)编码效率: = Lavg
(2)冗余度: RD =(1 ) 100%
m (3)压缩比: CR = ,m为采用自然编码时的码长 Lavg
m 最大压缩比:(CR )max = H(A)
2. 变字长编码定理
信符出现概率越大,包含的信息量就越小,需 要短码字就可以表示;反之对出现概率小的信符, 信息量就大,也就需要长码字来表示。 当长码字长度严格按照所对应信符的出现概率大 小逆序排序,则编码的平均码长不会大于任何其他 排列方式。即:
当a=2时,信息量单位为比特; 当a=e时,信息量单位为奈特; 当a=10时,信息量单位为哈特; 一般取2为底对数。 若P(x)=1,则I(x)=0,说明确知事件的随 机性为0,信息量也为0。
jpeg的霍夫曼编码

jpeg的霍夫曼编码
霍夫曼编码是一种无损数据压缩算法,其基本原理是利用数据的概率分布来构建最优前缀码,并对数据进行编码。
JPEG图像的霍夫曼编码是图像压缩中的一种常见方法。
在JPEG图像的霍夫曼编码中,首先需要对图像进行分块处理,通常是将图像分成8x8的小块。
然后,对每个小块进行DCT(离散余弦变换)变换,将图像从空间域变换到频率域。
在频率域中,图像的能量主要集中在少数几个系数上,因此可以忽略一些低频系数,从而达到压缩的目的。
在霍夫曼编码中,对每个DCT系数赋予一个二进制码,码字的长度与该系数的概率成反比,即出现概率越高的系数对应的码字越短,而出现概率越低的系数对应的码字越长。
这样,在编码时可以有效地减少数据量,从而达到压缩的目的。
在JPEG图像的霍夫曼编码中,通常会将图像分成多个层次进行编码,每个层次对应不同的压缩比和图像质量。
用户可以根据需要选择不同的层次来获取不同的压缩效果和图像质量。
总的来说,JPEG图像的霍夫曼编码是一种有效的图像压缩方法,能够有效地减少数据量,同时保持较高的图像质量。
图像压缩编码方法

图像压缩编码方法
图像压缩编码方法是通过减少图像数据的冗余部分来减小图像文件的大小,以便于存储和传输。
以下是常见的图像压缩编码方法:
1. 无损压缩:无损压缩方法可以压缩图像文件的大小,但不会丢失任何图像数据。
常见的无损压缩编码方法包括:
- Huffman编码:基于字符出现频率进行编码,将频率较低的字符用较长的编码表示,频率较高的字符用较短的编码表示。
- 预测编码:根据图像像素间的相关性进行编码,利用当前像素与附近像素的差异来表示像素值。
- 霍夫曼编码:利用霍夫曼树来对图像数据进行编码,降低数据的冗余度。
- 算术编码:根据符号的出现概率,将整个编码空间划分为不同部分,每个符号对应于不同的编码区域。
2. 有损压缩:有损压缩方法可以在压缩图像大小的同时,对图像数据进行一定的丢失,但尽量使丢失的数据对人眼不可见。
常见的有损压缩编码方法包括:
- JPEG压缩:基于离散余弦变换(DCT)的方法,将图像数据转换为频域表示,
然后根据不同频率成分的重要性进行量化和编码。
- 基于小波变换的压缩:将图像数据转换为频域表示,利用小波基函数将图像分解为低频和高频子带,然后对高频子带进行量化和编码。
- 层次编码:将原始图像数据分为不同的预测层次,然后对不同层次的误差进行编码,从而实现压缩。
需要注意的是,不同的压缩编码方法适用于不同类型的图像数据和压缩要求。
有些方法适用于需要高压缩比的情况,但会引入更多的失真,而有些方法适用于需要保留图像质量的情况,但压缩比较低。
因此,在选择图像压缩编码方法时,需要根据具体要求和应用场景进行权衡和选择。
用Huffman编码实现图像压缩

用Huffman编码实现图像压缩摘要:当前,网络和多媒体技术日新月异,信息量急速膨胀。
针对这种情况,本文探讨了它的解决方法——数据压缩(主要是图像压缩)。
着重研究了无失真条件下的最佳编码方法——huffman编码,对其方法的优劣做了较为客观的评价。
关键词:图像压缩编码 huffman编码中图分类号:tp393.03 文献标识码:a 文章编号:1007-9416(2011)12-0238-021、前言随着科技的发展,现在各种各样的数据和信息正在急速膨胀,每天出现的新知识正以近乎指数的规律逐日上升。
如何方便快速地存储、处理和传输这些日益增加的信息,使之更好的为我们服务,已经成为多数行业共同的呼声。
特别是近几年来随着网络走进普通家庭,昔日老牛拉破车似的网速已让多数人所不能容忍。
因为数据在数据传输时,要占据很大的信道容量。
为此,人们想到了采用对图像新的表达方法以减小表示一幅图像所需数据量,这就是图像编码要解决的主要问题。
由于图像编码减少了数据量,因此人们也常称图像编码为图像压缩。
本文将着重研究huffman编码方法,并形成一个对huffman编码方法的较为完整的评价。
2、正文2.1 huffman编码huffman编码的主导思想是根据数据符号发生的概率进行编码。
在源数据中出现概率越高的符号,相应的码长越短;出现概率越小的符号,其码长越长,从而达到用尽可能少的码符号表示源数据。
huffman编码方法是接近压缩比上限的一种最佳的编码方法。
2.2 具体编码过程(1)将信源符号按出现概率由大到小排列。
(2)将2个最小概率相加,形成一新的概率集合,对应一新的信源,符号数减小一个,即具有q-1个符号数,称为缩减信源a。
(3)将缩减信源a中q-1个符号再按概率大小排列。
如符号间概率相等,则排列次序不论。
(4)如此继续,得到具有(q-2)、(q-3)、(q-4)、...个符号的缩减信源b、c、d等,直到只有2个符号为止。
图像的无损压缩程序设计 霍夫曼编码

成绩评定表课程设计任务书摘要哈夫曼编码(Huffman Coding)是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。
在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。
这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。
这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。
本课题通过MATLAB编写适当的函数,对一个随机信源进行哈夫曼编码,得出码字,平均码长和编码效率。
从而理解信源编码的基本思想与目的以及哈夫曼编码方法的基本过程与特点,并且提高综合运用所学理论知识独立分析和解决问题的能力。
关键字:哈夫曼;信源编码;MATLAB目录1设计目的及相关知识 (1)1.1设计目的 (1)1.2图像的霍夫曼编码概念 (1)1.3Matlab图像处理通用函数 (1)2课程设计分析 (3)2.1 图像的霍夫曼编码概述 (3)2.2 图像的霍夫曼编码举例 (4)3仿真 (6)4结果及分析 (9)5附录 (12)结束语 (15)参考文献 (16)1设计目的及相关知识1.1设计目的1)了解霍夫曼编码的原理。
2)理解图像的霍夫曼编码原理,了解其应用,掌握图像的霍夫曼编码的方法。
3)对图像编码程序设计进行较深入的认识,对知识牢固掌握。
4)掌握图像霍夫曼编码的整个过程及其中的注意事项。
5)了解图像无损压缩的目的及好处。
1.2图像的霍夫曼编码概念所谓霍夫曼编码的具体方法:先按出现的概率大小排队,把两个最小的概率相加,作为新的概率和剩余的概率重新排队,再把最小的两个概率相加,再重新排队,直到最后变成1。
每次相加时都将“0”和“1”赋与相加的两个概率,读出时由该符号开始一直走到最后的“1”,将路线上所遇到的“0”和“1”按最低位到最高位的顺序排好,就是该符号的霍夫曼编码1.3 Matlab图像处理通用函数colorbar 显示彩色条语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle)getimage从坐标轴取得图像数据语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \ [...]=getimage imshow显示图像语法:imshow(I,n) \ imshow(I,[low high]) \ imshow(BW) \ imshow(X,map) \ imshow(RGB)\ imshow(...,display_option) \ imshow(x,y,A,...) \ imshow filename \h=imshow(...)montage 在矩形框中同时显示多幅图像语法:montage(I) \ montage(BW) \ montage(X,map) \ montage(RGB) \h=montage(...)immovie创建多帧索引图的电影动画语法:mov=immovie(X,map) \ mov=immovie(RGB)subimage在一副图中显示多个图像语法:subimage(X,map) \ subimage(I) \ subimage(BW) \ subimage(RGB) \ subimage(x,y,...) \ subimage(...)truesize调整图像显示尺寸语法:truesize(fig,[mrowsmcols]) \ truesize(fig)warp 将图像显示到纹理映射表面语法:warp(X,map) \ warp(I ,n) \ warp(z,...) warp(x,y,z,...) \ h=warp(...)zoom 缩放图像语法:zoom on \ zoom off \ zoom out \ zoom reset \ zoom \ zoom xon \ zoom yon\ zoom(factor) \ zoom(fig,option)2课程设计分析2.1 图像的霍夫曼编码概述赫夫曼(Huffman)编码是1952年提出的,是一种比较经典的信息无损熵编码,该编码依据变长最佳编码定理,应用Huffman算法而产生。
霍夫曼编码和游程编码在图像编码中的应用

霍夫曼编码和游程编码在图像编码中的应用1. 介绍- 论文的目的和背景- 图像编码的重要性和应用场景2. 霍夫曼编码- 霍夫曼编码的原理和基本概念- 霍夫曼编码在图像压缩中的应用- 霍夫曼编码的优缺点3. 游程编码- 游程编码的原理和基本概念- 游程编码在图像压缩中的应用- 游程编码的优缺点4. 霍夫曼编码和游程编码的比较- 霍夫曼编码和游程编码的相似性和区别- 在不同场景下的选择5. 结论和展望- 对比和总结- 霍夫曼编码和游程编码在未来图像编码中的应用前景1. 介绍图像编码是指对数字图像进行压缩处理,将其转换为较小的数字数据集,以达到减少存储空间和传输带宽的目的。
图像编码在现代图像传输、存储和处理等领域扮演着至关重要的角色。
因此,如何高效地压缩图像数据,是图像编码面临的核心挑战之一。
霍夫曼编码和游程编码是两种常见的图像编码方法。
霍夫曼编码是一种基于概率统计的编码方法,可以根据输入数据和对应的概率分布,生成最优编码。
而游程编码则是一种基于连续性的编码方法,可以将相邻的像素值相同的像素序列用较小的数据表示。
本文旨在深入探讨霍夫曼编码和游程编码在图像编码中的应用,并对这两种编码方式进行比较分析。
通过对两种编码方式的优缺点进行分析,为图像编码的实践提供理论上的支持,以期为图像编码技术的发展做出一定的贡献。
在本文的后续章节中,我们将探讨霍夫曼编码和游程编码的原理、应用和优缺点,并对两种编码方式进行比较。
我们还将对两种编码方式在图像编码中的实践应用进行深入研究,并向读者展示在不同场景下如何选择适合的编码方式。
值得注意的是,霍夫曼编码和游程编码只是两种图像编码方式中的一部分,仍有很多其他编码方式存在。
因此,在本文中,我们将重点关注霍夫曼编码和游程编码,示范其在图像编码的实际应用中具有的潜在优势。
2. 霍夫曼编码2.1 霍夫曼编码原理及基本概念霍夫曼编码是一种基于概率统计的编码方法,由霍夫曼提出。
其基本思想是将出现概率高的字符用短编码表示,出现概率低的字符用长编码表示。
图像处理中的无损压缩算法

图像处理中的无损压缩算法图像的无损压缩在现代图像处理中扮演着非常重要的角色。
其使用的目的是在压缩图像数据的同时尽可能地减小图像的文件大小,同时确保压缩后的图像与原始图像具有相同的图像质量。
本文将讨论一些常见的无损压缩算法,以及它们在现代图像处理中的应用。
1. 算法概述无损压缩算法的主要思想是利用冗长的数据表示方式,以更紧凑的方式表示数据。
从理论上讲,无损压缩算法可以压缩任何类型的文件,但该压缩算法效果的好坏取决于文件的特征。
在图像文件中,无损压缩算法可以压缩包含的像素数据,而不会损失对图像进行渲染的重要信息。
2. 常见的无损压缩算法(1)哈夫曼编码哈夫曼编码是一种源编码技术,适用于自然语言文本和数字表示等各种类型的信息。
在此算法中,使用较短的编码表示常见的字符,而使用较长的编码表示不常用的字符,从而实现数据的高效编码。
在图像处理中,哈夫曼编码经常用于压缩图像文件中的颜色信息。
利用这种技术可以将不同颜色的像素表示为具有不同长度的编码,从而实现图像数据的有序存储。
(2)差分编码差分编码是另一种常见的无损压缩技术,可以减少连续像素中的颜色变化。
在此算法中,通过计算相邻像素之间的差异来编码图像数据。
通过这种技术,可以使图像数据的表示更加紧密,从而减少文件大小。
(3)Lempel-Ziv-Welch算法Lempel-Ziv-Welch算法是一种基于词典的数据压缩算法,经常用于压缩文本文件和图像文件。
在此算法中,利用特定的词典来存储已经编码的数据序列,新的数据序列可以直接进行编码。
通过这种技术,可以大大减小文件大小并保持图像的质量。
3. 应用案例无损压缩在现代图像处理中发挥着重要作用,特别是在需要将大量图像存储在闪存或硬盘中的情况下。
无损压缩可以大大减小文件大小,从而节省存储空间。
在医学成像方面,无损压缩算法也非常重要。
医学图像文件通常非常大,并且需要长期存储。
通过无损压缩算法,这些大型文件可以轻松存储并最大限度地减少传输时间和存储空间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩评定表课程设计任务书摘要哈夫曼编码(Huffman Coding)是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。
在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。
这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。
这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。
本课题通过MATLAB编写适当的函数,对一个随机信源进行哈夫曼编码,得出码字,平均码长和编码效率。
从而理解信源编码的基本思想与目的以及哈夫曼编码方法的基本过程与特点,并且提高综合运用所学理论知识独立分析和解决问题的能力。
关键字:哈夫曼;信源编码;MATLAB目录1设计目的及相关知识 (1)1.1设计目的 (1)1.2图像的霍夫曼编码概念 (1)1.3Matlab图像处理通用函数 (1)2课程设计分析 (3)2.1 图像的霍夫曼编码概述 (3)2.2 图像的霍夫曼编码举例 (4)3仿真 (6)4结果及分析 (9)5附录 (12)结束语 (15)参考文献 (16)1设计目的及相关知识1.1设计目的1)了解霍夫曼编码的原理。
2)理解图像的霍夫曼编码原理,了解其应用,掌握图像的霍夫曼编码的方法。
3)对图像编码程序设计进行较深入的认识,对知识牢固掌握。
4)掌握图像霍夫曼编码的整个过程及其中的注意事项。
5)了解图像无损压缩的目的及好处。
1.2图像的霍夫曼编码概念所谓霍夫曼编码的具体方法:先按出现的概率大小排队,把两个最小的概率相加,作为新的概率和剩余的概率重新排队,再把最小的两个概率相加,再重新排队,直到最后变成1。
每次相加时都将“0”和“1”赋与相加的两个概率,读出时由该符号开始一直走到最后的“1”,将路线上所遇到的“0”和“1”按最低位到最高位的顺序排好,就是该符号的霍夫曼编码1.3 Matlab图像处理通用函数colorbar 显示彩色条语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle)getimage从坐标轴取得图像数据语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \ [...]=getimage imshow显示图像语法:imshow(I,n) \ imshow(I,[low high]) \ imshow(BW) \ imshow(X,map) \ imshow(RGB)\ imshow(...,display_option) \ imshow(x,y,A,...) \ imshow filename \h=imshow(...)montage 在矩形框中同时显示多幅图像语法:montage(I) \ montage(BW) \ montage(X,map) \ montage(RGB) \h=montage(...)immovie创建多帧索引图的电影动画语法:mov=immovie(X,map) \ mov=immovie(RGB)subimage在一副图中显示多个图像语法:subimage(X,map) \ subimage(I) \ subimage(BW) \ subimage(RGB) \ subimage(x,y,...) \ subimage(...)truesize调整图像显示尺寸语法:truesize(fig,[mrowsmcols]) \ truesize(fig)warp 将图像显示到纹理映射表面语法:warp(X,map) \ warp(I ,n) \ warp(z,...) warp(x,y,z,...) \ h=warp(...)zoom 缩放图像语法:zoom on \ zoom off \ zoom out \ zoom reset \ zoom \ zoom xon \ zoom yon\ zoom(factor) \ zoom(fig,option)2课程设计分析2.1 图像的霍夫曼编码概述赫夫曼(Huffman)编码是1952年提出的,是一种比较经典的信息无损熵编码,该编码依据变长最佳编码定理,应用Huffman算法而产生。
Huffman编码是一种基于统计的无损编码。
根据变长最佳编码定理,Huffman编码步骤如下:(1)将信源符号xi按其出现的概率,由大到小顺序排列。
(2)将两个最小的概率的信源符号进行组合相加,并重复这一步骤,始终将较大的概率分支放在上部,直到只剩下一个信源符号且概率达到1.0为止;(3)对每对组合的上边一个指定为1,下边一个指定为0(或相反:对上边一个指定为0,下边一个指定为1);(4)画出由每个信源符号到概率1.0处的路径,记下沿路径的1和0;(5)对于每个信源符号都写出1、0序列,则从右到左就得到非等长的Huffman码。
Huffman编码的特点是:(1)Huffman编码构造程序是明确的,但编出的码不是唯一的,其原因之一是两个概率分配码字“0”和“1”是任意选择的(大概率为“0”,小概率为“1”,或者反之)。
第二原因是在排序过程中两个概率相等,谁前谁后也是随机的。
这样编出的码字就不是唯一的。
(2)Huffman编码结果,码字不等长,平均码字最短,效率最高,但码字长短不一,实时硬件实现很复杂(特别是译码),而且在抗误码能力方面也比较差。
(3)Huffman编码的信源概率是2的负幂时,效率达100%,但是对等概率分布的信源,产生定长码,效率最低,因此编码效率与信源符号概率分布相关,故Huffman编码依赖于信源统计特性,编码前必须有信源这方面的先验知识,这往往限制了霍夫曼编码的应用。
(4)Huffman编码只能用近似的整数位来表示单个符号,而不是理想的小数,这也是Huffman编码无法达到最理想的压缩效果的原因。
2.2 图像的霍夫曼编码举例假设一个文件中出现了8种符号S0,S1,S2,S3,S4,S5,S6,S7,那么每种符号要编码,至少需要3比特。
假设编码成000,001,010,011,100,101,110,111那么符号序列S0S1S7S0S1S6S2S2S3S4S5S0S0S1编码后变成000001111000001110010010011100101000000001,共用了42比特。
我们发现S0,S1,S2这三个符号出现的频率比较大,其它符号出现的频率比较小,如果我们采用一种编码方案使得S0,S1,S2的码字短,其它符号的码字长,这样就能够减少占用的比特数。
例如,我们采用这样的编码方案:S0到S7的码字分别01,11,101,0000,0001,0010,0011,100,那么上述符号序列变成011110001110011101101000000010010010111,共用了39比特,尽管有些码字如S3,S4,S5,S6变长了(由3位变成4位),但使用频繁的几个码字如S0,S1变短了,所以实现了压缩。
可由下面的步骤得到霍夫曼码的码表(1)首先把信源中的消息出现的频率从小到大排列。
(2)每一次选出频率最小的两个值,作为二叉树的两个叶子节点,将和作为它们的根节点,这两个叶子节点不再参与比较,新的根节点参与比较。
(3)重复(2),直到最后得到和为1的根节点。
(4)将形成的二叉树的左节点标0,右节点标1。
把从最上面的根节点到最下面的叶子节点途中遇到的0,1序列串起来,就得到了各个符号的编码。
上面的例子用Huffman编码的过程如图下图所示,其中圆圈中的数字是新节点产生的顺序。
图2-1 Huffman编码的二叉树示意图信源的各个消息从S0到S7的出现概率分别为4/14,3/14,2/14,1/14,1/14,1/14,1/14,1/14。
计算编码效率为98.5%,编码的冗余只有1.5%,可见霍夫曼编码效率很高。
产生Huffman编码需要对原始数据扫描两遍。
第一遍扫描要精确地统计出原始数据中,每个值出现的频率,第二遍是建立Huffman树并进行编码。
由于需要建立二叉树并遍历二叉树生成编码,因此数据压缩和还原速度都较慢,但简单有效,因而得到广泛的应用。
3仿真主程序:%以下为主程序mainp.mclcclearclose all;%定义HufData/Len为全局变量的结构体global HufData;global Lendisp('计算机正在准备输出霍夫曼编码结果,请耐心等待……'); %原始码字的灰度a=imread('kids.tif');%分区画出原始图像和灰度直方图figure;subplot(1,2,1)imshow(a);%取消坐标轴和边框axis offbox offtitle('MATLAB自带图像','fontsize',13);subplot(1,2,2);axis offbox offimhist(a);title('图像灰度直方图','fontsize',13);%图像的灰度统计GrayStatistics=imhist(a);GrayStatistics=GrayStatistics';GrayRatioo=GrayStatistics/sum(GrayStatistics); GrayRatioNO=find(GrayRatioo~=0);Len=length(GrayRatioNO);%初始化灰度集,防止系统随即赋予其垃圾值GrayRatio=ones(1,Len);for i=1:LenGrayRatio(i)=GrayRatioo(i);endGrayRatio=abs(sort(-GrayRatio));%将图像灰度概率赋予结构体for i=1:LenHufData(i).value=GrayRatio(i);end% 霍夫曼编码/霍夫曼编码HuffmanCode(Len);%输出码字zippedHuffman=1;for i=1:LentmpData=HufData(i).code;str='';for j=1:length(tmpData)str=strcat(str,num2str(tmpData(j)));zippedHuffman=zippedHuffman+1;enddisp(strcat('a',num2str(i),'= ',str))endi;%计算计算机一共输出多少个霍夫曼编码/霍夫曼编码zippedHuffman;%计算在删去0灰度级压缩之前的原始图像字节容量unzipped_delete=i*8;%计算压缩比率ratio_delete=zippedHuffman/unzipped_delete; %计算图像的压缩比率ad=num2str(ratio_delete*100);str2=strcat(ad,'%');disp(strcat('霍夫曼编码压缩比率','= ',str2))4结果及分析结果:图4-1 输出原图像与该图像像灰度直方图计算机正在准备输出霍夫曼编码结果,请耐心等待……a1=110a2=11110a3=11101a4=01100a5=01010a6=01000a7=00101a8=00011a9=111111a10=111001a12=101100 a13=101011 a14=101010 a15=101001 a16=100111 a17=100110 a18=100100 a19=100011 a20=100010 a21=100001 a22=100000 a23=011111 a24=011110 a25=011011 a26=011010 a27=010111 a28=010110 a29=010011 a30=001111 a31=001101 a32=001100 a33=001001 a34=001000 a35=000101 a36=000011 a37=000010 a38=000001 a39=000000 a40=1111101a42=1110001a43=1110000a44=1011101a45=1011100a46=1011011a47=1010001a48=1010000a49=1001011a50=1001010a51=0111011a52=0111010a53=0111001a54=0111000a55=0100101a56=0100100a57=0011101a58=0011100a59=0001001a60=0001000a61=10110101a62=101101001a63=101101000霍夫曼编码压缩比率=78.9683%分析:从输出灰度直方图可得出该图像的量化值主要集中在低灰度级处,通过输出可以看到该灰度级对应的霍夫曼编码,并且输出了该图像的压缩效率。