基于灰度图像的霍夫曼编解码技术 161120058 陈琪
第7章图像编码2 数字图像处理与分析基础 国防科技大学

1、线性预测
假设二维静止图像信号是一个均值为0,方差为
2
的平稳随机过程,x1 , x2 ,…, xn-1为在时刻t1 , t2 ,…, tn-1的采样值,那么时刻tn的采样值可以由它之前的 n-1已知的采样值估计,
t n ai t i
i 1
n 1
链码搜索算法(假设图像中只包括一个连续 区域)
1、从上到下,从左到右扫描图像,第一个满足f(x,y)=1的点 (物体的边界点)确定为链码的起始点IP,并记录起始搜 索方向为code[0]=0,起始点坐标(x0,y0); 2、根据LML(Look Most Left)规则跟踪轮廓: 设当前的方向码为code[i],下一次的搜索方向为code[i+1], (1)首先向当前链码的左方位搜索, next=(code[i]-1)mod 8; (2)如果位于该方位的像素也是物体上的点,即满足 f(x,y)=1,那么这就是下一个轮廓点,记录链码,修改方位 code[i+1] = next,进入下一次搜索; (3)如果位于该next方位的像素不是物体上的点,即不满足 f(x,y)=1,那么它就不是下一个轮廓点,向右依次回溯, next= next +1;
数字图像处理与分析基础
减少搜索的技巧
ED
note: 八方位码只需搜索5个方向。
SD
IP
例:左图为图像f(x,y)中 的目标区域,采用八方位 码,则区域链码 0422426142617161
数字图像处理与分析基础
由链码计算图形的几何特征
(1)周长
P Ne 2No
其中Ne是边界链码中偶数的数目, No是奇数的数目。
1 2 L( X ) p ( 1)(1 p) ab ab
图像的无损压缩程序设计 霍夫曼编码

成绩评定表课程设计任务书摘要哈夫曼编码(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

为什么?
3 图像的无失真编码方法
自适应WBS编码
根据图像局部结构或统计特性,改变像素块 尺寸大小; 一维情况下,首先判断该行是否有1024个连 续白像素; 否则判断是否有64,16,4个连续白像素; 否则直接编码;
3 图像的无失真编码方法
1)白块跳过编码WBS
原理
对于一般白纸黑字的文件,总是白的面积大。因此 跳过白的行程,只对黑行程编码就可以压缩数据。 将每一扫描行分成若干段,每段包含n个像素。对 于全白段,给最短码字如0;而对于黑白相间或全 黑段,不进行压缩。 为区别全白段和有黑段,在编码前加1作为标志位。
一维WBS编码
3 图像的无失真编码方法
一维WBS编码平均码长
设全白段出现的概率是pw,则平均码长 1 1 Rn pw 1 1 pw n 1 1 pw n n 因此WBS 编码的效率取决于n和pw。
设n 5,求包含一个全白块、有黑块11010、 有黑块10000三块的WBS码。 解:全白块编码为0,有黑块11010编码为 111010,有黑块10000编码为110000, 所以编码为0111010110000。
从Lenna和Bob的差分图像的直方图看:
i 1 k i k 1
wn分成两组,
p;
i
n
Step 2 : 将两个子集分别编码0和1; Step3: 将两个子集重复Step1,同样上面子集编码0,下面编码1; Step 4 : 重复Step3,直到每个子集只有1个w为止。最后将编码依 次排出,得到Fano - Shannon编码。
图像编码常用方法介绍(七)

图像编码是将图像数据进行压缩存储的过程,它在数字图像处理领域占据着重要的地位。
通过合理选择和减少冗余的编码方式,可以有效地降低图像的存储空间和传输带宽。
本文将介绍图像编码常用的方法,包括无损编码和有损编码两大类。
一、无损编码无损编码是指在压缩图像数据时能够完全还原原始信息的编码方法。
常用的无损编码方法有:1. 霍夫曼编码霍夫曼编码是一种变长编码方法,它根据每个符号出现的概率进行编码,出现频率高的符号用短码表示,出现频率低的符号用长码表示。
通过构建霍夫曼树,可以实现对图像数据的高效压缩。
2. 预测编码预测编码是一种根据已知像素值预测待编码像素值的方法。
常用的预测编码方法有差值编码和差分编码。
差值编码将像素值与周围像素值的差作为编码值,差分编码则是将像素值与前一个像素值的差进行编码。
这种编码方式能够显著减少冗余信息,提高图像编码效率。
二、有损编码有损编码是指在压缩图像数据时会丢失一部分信息的编码方法。
常用的有损编码方法有:1. 离散余弦变换(DCT)DCT是将图像数据转换到频域的一种方法,通过将图像分块并进行DCT变换,可以将图像数据转换为频域系数。
DCT编码后的图像在高频部分的系数较小,可通过舍弃掉一部分高频系数来减少数据量,从而实现压缩。
2. 小波变换小波变换可以将图像数据分解成多个频域的子带,其中包含了不同尺度和方向的信息。
通过对低频系数进行较少的保留和高频系数的舍弃,可以实现对图像数据的压缩。
3. 基于向量量化的编码基于向量量化的编码是一种将相似的图像块归类到同一类别并用较少的索引值表示的编码方式。
通过对图像块进行聚类和索引编码,可以有效地降低图像数据的存储空间。
总结起来,图像编码常用的方法包括无损编码和有损编码两大类。
无损编码通过霍夫曼编码和预测编码等方法实现对图像数据的高效压缩;有损编码通过DCT、小波变换和基于向量量化的编码等方法在压缩图像数据的同时,会有一定的信息损失。
根据实际需求和应用场景,选取适合的编码方法可以达到较好的图像压缩效果。
霍夫曼编码

进行压缩编码时,只要将码值用码字代替即可。 进行压缩编码时,只要将码值用码字代替即可。所 以源符a1 a1 a2 a2 a3 a3 a3 a4 a4 a4 a4 以源符 a5 a5 a5 a6 a6 a6 a7 a7 a8编码为: 编码为: 编码为 010010011011101101101000000001 1011011010000100001001。 。 平均码长 B=0.1*3+0.1*3+0.15*3+0.2*2+0.15* 3+0.15*3+0.1*4+0.05*4=2.95(b) 熵H= 2.9087 编码效率N=H/B=2.9087/2.95=98.6%
Your company slogan
(二)霍夫曼树的构建
霍夫曼编码实际上构造了一个码树, 霍夫曼编码实际上构造了一个码树,码树从最上层的端点开始 构造,直到树根结束。这里举个例子说明如何生成霍夫曼树。 构造,直到树根结束。这里举个例子说明如何生成霍夫曼树。假 设对由a 设对由a1、a2、a3、a4、a5、a6、a7、a8八个信源符号组成的 源信息字符串: 源信息字符串:“a1 a1 a2 a2 a3 a3 a3 a4 a4 a4 a4 a5 a5 a5 a6 a6 a6 a7 a7 a8”进行霍夫曼编码。首先应对信息中各数字 进行霍夫曼编码。 出现的次数进行统计如下 如下: 出现的次数进行统计如下:
Your company slogan
谢 谢 大 家 !
Your company slogan
霍夫曼编码Huffman 霍夫曼编码Huffman Coding
长春理工大学 080212418 高延邦
目录
一、什么是编码 二、霍夫曼编码简介 三、霍夫曼编码的熵 四、霍夫曼编码
图像霍夫曼编码与解码以及熵-平均码长-冗余度的计算

DIP上机报告题目:数字图像处理上机报告(第4次)学校:中国地质大学(武汉)指导老师:傅华明姓名:龙勋班级序号: 071112-06目录1图像霍夫曼编码与解码以及熵,平均码长,冗余度的计算错误!未定义书签。
2上机小结 (10)注:给定的文件夹中只需运行test脚本就可以得到结果,从workspace中看到相应的数据4.2图像的霍夫曼编码与解码题目要求:对图2实施哈夫曼编码和解码,计算图象熵,平均码长和冗余度;算法设计:1.遍历图像,统计各个像素灰度值的概率2.找出概率最小的两个,在最小概率所代表的灰度值编码中加1,在另一个较小的概率所代表的灰度值编码中加03.合并两个概率,成为一个新的元素,如此重复下去,直到最后剩两个元素4.进行编码的逆过程,即解码过程5.计算相应的数据程序代码:运行代码:clearin=[2,2,3,5,0,0,5,5,5,4,1,1,2,2,1,5,4,6,5,5,7,2,2,3,5,2,2,2,3,4,4,4,6,2,1,4,1,1,2,2,1,5,7,6,5,5,7,2,2,4,4,1,2,2,1,5,2,3,1,2,2,1,5,0];[p,out] = gailv( in );[code] = Huffman(0:7,p); %进行霍夫曼编码[Coded_Img]=Encode(in,code); %对图像进行编码[H,L,R]=GetInfo(code); %计算熵、平均码长、冗余度[Img]=Decode(Coded_Img,code); %对图像进行解码图像各像素灰度的概率计算:function[ p,out ]=gailv( in )[M,N]=size(in);out = zeros(4,8);p = zeros(1,8);for i=1:8out(1,i)=i-1;endfor i=1:Mfor j=1:Nfor k=1:8if in(i,j) == out(1,k)out(2,k)=out(2,k)+1;endendendendfor i=1:8out(3,i)=out(2,i)/(M*N);p(1,i)=out(2,i)/(M*N);endend霍夫曼编码过程:function [code_out] = Huffman(s,p)[Ms,Ns]=size(s);if (Ms==1)sig=s';elsesig=s;end%s为各元素名称 p为各元素概率[Ms,Ns]=size(sig);[Mp,Np]=size(p);if (Ms~=Np)return;endcode=cell(Ms,4);%建立编码cellcode_out=cell(Ms,3);%建立输出cellcoding=cell(Ms,2);%建立编码过程中用到的cellfor i=1:Mscode{i,1}=sig(i,:);%第一列为元素名称code{i,2}=[];%第二列为编码code{i,3}=p(i);%第三列为元素概率code{i,4}=[];%第四列为元素概率排行coding{i,1}=p(i);%第一行为元素概率coding{i,2}=i;%第二行表示此概率由哪些元素组成end[m,l]=Cell_min(coding(:,1));%找出最小值while (m<1)%若最小值小于1(编码尚未完成)[m1,l1]=Cell_min(coding(:,1));%找出最小值temp_p=coding{l1,1};%记录下最小概率coding{l1,1}=2;%将概率改为2,则以后不会再次取到[m2,l2]=Cell_min(coding(:,1));%找出次小值coding{l2,1}=coding{l2,1}+temp_p;%最小概率和次小概率相加得到新元素概率[k,mp]=size(coding{l1,2});%考虑最小概率包含了哪些元素for i=1:mpcode{coding{l1,2}(i),2}=[1,code{coding{l1,2}(i),2}];%在这些元素的编码前加1end[k,mp]=size(coding{l2,2});%考虑次小概率包含了哪些元素for i=1:mpcode{coding{l2,2}(i),2}=[0,code{coding{l2,2}(i),2}];%在这些元素的编码前加0endcoding{l2,2}=[coding{l2,2},coding{l1,2}];%新元素包含了次小和最小元素包含的所有元素[m,l]=Cell_min(coding(:,1));%找出当前最小值,继续循环endfor i=1:Mscode_out(i,1:3)=code(i,1:3);%输出cell前3列等于编码cell前3列end求概率的最小值函数:function [mind,loc]=Cell_min(data)%找出cell中的某列元素的最小值和位置[M,N]=size(data);loc=-1;for i=1:Md(i)=data{i}(1,1);endturemin=min(d);%找出最小值for i=1:M %遍历矩阵,找出最小值所在位置if (d(i)==turemin)mind=d(i);loc=i;return;endendend图像编码代码:function [Coded_Img]=Encode(img,code)%遍历图像,查表确定码字[M,N]=size(img);[Mc,Nc]=size(code);Coded_Img=cell(M,N);for i=1:Mfor j=1:Ndata=img(i,j);for k=1:Mcif (code{k,1}==data)Coded_Img{i,j}=code{k,2};endendendendend图像解码代码:function [img]=Decode(Coded_Img,code)%遍历编码图像,查表确定数值[M,N]=size(Coded_Img);[Mc,Nc]=size(code);for i=1:Mfor j=1:Ndata=Coded_Img{i,j};for k=1:Mcif(size(data)==size(code{k,2}))if (code{k,2}==data)img(i,j)=code{k,1};endendendendendend相关数据的计算:function [H,L,R]=GetInfo(code)[M,N]=size(code);H=0;for i=1:MH=H+code{i,3}*log2(1/code{i,3});end%计算熵L=0;for i=1:M[m,n]=size(code{i,2});L=L+code{i,3}*n;end%计算平均码长R=L/H-1;%计算冗余度end运行结果:编码前图像:编码后图像:解码后图像:熵(H)、平均码长(L)、冗余度(R)至此,成功实现了图像矩阵的编码和解码以及相关参数的计算。
数据压缩霍夫曼编码算术编码

固定编码模式
1
概率统计与区间分配直接影响编码效率。
2
自适应模式
3
各符号的概率初始值都相同,但依据实际出现的符号而相应地改变。
4
两种编码模式:
jpeg、mpeg-1和mpeg-2等国际标准采用的图像压缩编码方案都是传统的“DCT+运动补偿+算术编码”模式
JPEG2000、MQ算术编码器
嵌入位平面图像编码器EZW、SPIHT和SPECK中也采用这种通用算法编码器
现有一个由5个不同符号组成的30个符号的字符串:BABACACADADABBCBABEBEDDABEEEBB
计算 该字符串的霍夫曼码 该字符串的熵 该字符串的平均码长 编码前后的压缩比
霍夫曼编码
霍夫曼编码举例1
霍夫曼编码
符号
出现的次数
log2(1/pi)
分配的代码
需要的位数
B
10
1.585
?
A
8
1948年, Shannon提出将信源依其概率降序排序, 用符号序列累积概率的二进制表示对信源的编码;
1976年, R. Pasco和J.Rissanen 分别用定长的寄存器实现了有限精度的算术编码;
1979年, Rissanen 和G.G. Langdon将算术编码系统化,并于1981年将AC推广应用到二值图像编码上,大大提高了起压缩效率;
算术编码处理过程的编码区间分配可用图解法表示: 以少代多思想:用最终求得的编码表示范围子区间的 任何值(如:0.10603),来替代被编码符号串X1X2X3X4X5
无论是否是二元信源,也不论数据的概率分 布如何,算术编码可以二进制小数表示,其平均码长可以接近无损压缩的熵极限。
哈夫曼编码

图像编码与压缩——哈夫曼编码专业班级:10 信息安全学生姓名:王猛涛学生学号:_ 20101616310049 _指导教师:姚孝明完成时间:2013年4月13日_数字图像处理实验六:图像编码与压缩——哈夫曼编码一、实验目的1. 了解图像的哈夫曼编码原理。
2. 掌握哈夫曼编码算法。
二、实验主要仪器及设备1. 微型计算机:Intel Pentium及更高。
2. MATLAB软件(含图像处理工具箱)。
三、实验原理(Huffman编码)1. 可变码长最佳编码定理定理:在变长编码中,如果码字长度严格按照信号中符号出现概率大小的相反顺序排列,则平均码字长度一定小于其他符号顺序排列方式的平均码字长度。
D.A.Huffman(哈夫曼)在1952年根据可变长最佳编码定理,提出了依据信源集中符号出现的概率分配不同长度的唯一可译码的算法。
接收端在得到哈夫曼编码后,通过解码可以得到与输入完全一致的信号。
2.前缀码(prefix code)一组唯一可译码中的任意一个码字都只与一种信号存在对应关系。
为了译码的需要,在唯一可译码中的前缀码保证任意一个码字都不是其他码字的前缀。
例如,有一维图像的符号集合为{EMBED Equation.KSEE3 \* MERGEFORMAT |)}fffi)(ff ,设定的码字集合。
编码系统解码时,只要一遇到),3(4({),2(),1(“0”,便知道对应的是。
若接收到的是“1”,则等待下一个比特,若下一个比特为“0”。
即确定是,若下一个比特是“1”,则等待第三个比特。
若第三个比特为“0”,则可判定信号为,否则为。
若一前缀码为010*******,则译码的输出信号序列为。
可见前缀码保证了这样译出的码字具有唯一性和“即时性”。
3.Huffman编码Huffman编码的算法如下:(1)将图像的灰度等级按概率大小进行升序排序。
(2)在灰度级集合中取两个最小概率相加,合成一个概率。
(3)新合成的概率与其他的概率成员组成新的概率集合。