香农编码费诺编码

合集下载

信息论霍夫曼、香农-费诺编码

信息论霍夫曼、香农-费诺编码

信息论霍夫曼、香农-费诺编码LT二、实验原理:1、香农-费诺编码首先,将信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号。

依次下去,直至每一个小组只剩下一个信源符号为止。

这样,信源符号所对应的码符号序列则为编得的码字。

译码原理,按照编码的二叉树从树根开始,按译码序列进行逐个的向其叶子结点走,直到找到相应的信源符号为止。

之后再把指示标记回调到树根,按照同样的方式进行下一序列的译码到序列结束。

如果整个译码序列能够完整的译出则返回成功,否则则返回译码失败。

2、霍夫曼编码霍夫曼编码属于码词长度可变的编码类,是霍夫曼在1952年提出的一种编码方法,即从下到上的编码方法。

同其他码词长度可变的编码一样,可区别的不同码词的生成是基于不同符号出现的不同概率。

生成霍夫曼编码算法基于一种称为“编码树”(coding tree)的技术。

算法步骤如下:(1)初始化,根据符号概率的大小按由大到小顺序对符号进行排序。

(2)把概率最小的两个符号组成一个新符号(节点),即新符号的概率等于这两个符号概率之和。

(3)重复第2步,直到形成一个符号为止(树),其概率最后等于1。

(4)从编码树的根开始回溯到原始的符号,并将每一下分枝赋值为1,上分枝赋值为0。

三、实验环境matlab7.1四、实验内容1、对于给定的信源的概率分布,用香农-费诺编码实现图像压缩2、对于给定的信源的概率分布,用霍夫曼编码实现图像压缩五、实验过程1.香农-费诺编码编码1function c=shannon(p)%p=[0.2 0.15 0.15 0.1 0.1 0.1 0.1 0.1] %shannon(p)[p,index]=sort(p)p=fliplr(p)n=length(p)pa=0for i=2:npa(i)= pa(i-1)+p(i-1) endk=ceil(-log2(p))c=cell(1,n)for i=1:nc{i}=”tmp=pa(i)for j=1:k(i)tmp=tmp*2if tmp>=1tmp=tmp-1 c{i(j)='1'elsec{i}(j) = '0' endendendc = fliplr(c)c(index)=c编码2clc;clear;A=[0.4,0.3,0.1,0.09,0.07,0.04]; A=fliplr(sort(A));%降序排列[m,n]=size(A);for i=1:nB(i,1)=A(i);%生成B的第1列end%生成B第2列的元素a=sum(B(:,1))/2;for k=1:n-1ifabs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1, 1))-a)break;endendfor i=1:n%生成B第2列的元素if i<=kB(i,2)=0;elseB(i,2)=1;endend%生成第一次编码的结果END=B(:,2)';END=sym(END);%生成第3列及以后几列的各元素j=3;while (j~=0)p=1;while(p<=n)x=B(p,j-1);for q=p:nif x==-1break;elseif B(q,j-1)==xy=1;continue;elsey=0;break;endendif y==1q=q+1;endif q==p|q-p==1B(p,j)=-1;elseif q-p==2B(p,j)=0;END(p)=[char(END(p)),'0'];B(q-1,j)=1;END(q-1)=[char(END(q-1)),'1']; elsea=sum(B(p:q-1,1))/2;for k=p:q-2abs(sum(B(p:k,1))-a)<=abs(sum(B(p:k+1, 1))-a);break;endendfor i=p:q-1if i<=kB(i,j)=0;END(i)=[char(END(i)),'0'];elseB(i,j)=1;END(i)=[char(END(i)),'1'];endendendendendC=B(:,j);D=find(C==-1);[e,f]=size(D);if e==nj=0;elsej=j+1;endendBAENDfor i=1:n[u,v]=size(char(END(i))); L(i)=v;avlen=sum(L.*A)2. 霍夫曼编码function c=huffman(p)n=size(p,2)if n==1c=cell(1,1)c{1}=''returnend[p1,i1]=min(p)index=[(1:i1-1),(i1+1:n)] p=p(index)n=n-1[p2,i2]=min(p)index2=[(1:i2-1),(i2+1:n)] p=p(index2);i2=index(i2)index=index(index2)p(n)=p1+p2c=huffman(p)c{n+1}=strcat(c{n},'1')c{n}=strcat(c{n},'0') index=[index,i1,i2]c(index)=c。

信息论常用无失真信源编码设计(含MATLAB程序)

信息论常用无失真信源编码设计(含MATLAB程序)

《信息论基础》题目:常用无失真信源编码程序设计目录1. 引言 (2)2. 香农编码 (2)2.1 编码步骤 (3)2.2 程序设计 (3)2.3 运行结果 (3)3. 费诺编码 (4)3.1 编码步骤 (5)3.2 程序设计 (5)3.3 运行结果 (5)4. 哈夫曼编码 (6)4.1 编码步骤 (7)4.2 程序设计 (7)4.3 运行结果 (8)5. 结论 (9)6. 参考文献 (10)7. 附录 (11)7.1 香农编码Matlab程序 (11)7.2 费诺编码Matlab程序 (12)7.3 哈夫曼编码Matlab程序 (14)1. 引言信息论(Information Theory)是运用概率论与数理统计的方法研究信息、信息熵、通信系统、数据传输、密码学、数据压缩等问题的应用数学学科。

信息系统就是广义的通信系统,泛指某种信息从一处传送到另一处所需的全部设备所构成的系统。

信息论是关于信息的理论,应有自己明确的研究对象和适用范围[1]。

信息论将信息的传递作为一种统计现象来考虑,给出了估算通信信道容量的方法。

信息传输和信息压缩是信息论研究中的两大领域。

这两个方面又由信息传输定理、信源-信道隔离定理相互联系。

信源编码是一种以提高通信有效性为目的而对信源符号进行的变换,或者说为了减少或消除信源冗余度而进行的信源符号变换。

具体说,就是针对信源输出符号序列的统计特性来寻找某种方法,把信源输出符号序列变换为最短的码字序列,使后者的各码元所载荷的平均信息量最大,同时又能保证无失真地恢复原来的符号序列[2]。

在通信中,传送信源信息只需要具有信源极限熵大小的信息率,但在实际的通信系统中用来传送信息的信息率远大于信源极限熵。

为了能够得到或接近信源熵的最小信息率,必须解决编码的问题,而编码分为信源编码和信道编码,其中的信源编码又分为无失真信源编码和限失真信源编码。

由于无失真信源编码只适用于离散信源,所以本次作业讨论无失真离散信源的三种简单编码,即香农(Shannon)编码、费诺(Fano) 编码和哈夫曼(Huffman) 编码[3]。

费诺编码原理(一)

费诺编码原理(一)

费诺编码原理(一)费诺编码简介1. 什么是费诺编码费诺编码,又称哈夫曼编码(Huffman Coding),是一种变长编码方式,用于有效地压缩数据。

它是由David A. Huffman在1952年提出的,被广泛应用于数据压缩、无损压缩和信息论等领域。

2. 为什么需要费诺编码在传输和存储数据时,我们通常需要压缩数据,以减少占用的空间和提高传输效率。

费诺编码通过将常用字符用较短的编码表示,而将不常用字符用较长的编码表示,从而使得整个数据的平均编码长度最小化,达到高效压缩的效果。

3. 费诺编码的原理为了理解费诺编码的原理,需要了解以下几个重要概念:字符的频率在对数据进行编码之前,首先要统计字符在数据中出现的频率。

频率较高的字符会被赋予较短的编码,频率较低的字符会被赋予较长的编码。

构建哈夫曼树根据字符的频率,我们可以构建一棵哈夫曼树。

哈夫曼树是一种特殊的二叉树,其中每个叶子节点对应一个字符,叶子节点的权值为该字符的频率。

分配编码从根节点出发,沿着左子树分支走为0,沿着右子树分支走为1,通过这样的方式,可以给每个字符分配唯一的编码。

压缩数据根据字符的编码,将原始数据中的字符逐个替换为对应的编码,从而实现数据的压缩。

4. 费诺编码的优势费诺编码的优势在于可以根据数据的统计特征来动态地构建编码表,使得经常出现的字符用较短的编码表示,极大地提高了压缩的效果。

此外,由于费诺编码是前缀编码,因此可以避免编码冲突。

5. 费诺编码的应用费诺编码被广泛应用于数据压缩领域,其中最著名的应用之一就是在ZIP压缩算法中的使用。

此外,费诺编码还常用于文件压缩、图像压缩等领域。

结论费诺编码是一种高效的数据压缩算法,通过根据字符频率构建哈夫曼树,并根据树的结构分配编码,实现了数据的高效压缩。

费诺编码的优势在于压缩效果好、没有编码冲突等特点,因此被广泛应用于各种数据压缩场景中。

香农编码的原理

香农编码的原理

香农编码的原理
香农编码(Shannon Coding),又称为香农-费诺编码(Shannon-Fano Coding),是由信息论的奠基人之一克劳德·香农(Claude Shannon)于1948年提出的一种熵编码方法。

香农编码的目标是用尽可能短的二进制编码表示出现概率不同的符号,从而减小信息传输的平均长度。

香农编码的基本原理如下:
* 符号的概率分布:
* 对于给定的符号集合,首先需要知道每个符号出现的概率。

* 概率排序:
* 将符号按照概率从高到低排序。

* 分割符号集:
* 将符号集按照概率中位数分为两组,保证一组的概率之和接近另一组。

* 分配二进制编码:
* 对于左侧一组的符号,添加一个二进制前缀(如0),对右侧一组的符号添加另一个二进制前缀(如1)。

* 递归处理:
* 对于分割后的每个子集,重复上述过程,直到每个符号都被分配唯一的二进制编码。

* 生成编码表:
* 根据上述过程生成完整的编码表,包含每个符号和对应的二进制编码。

香农编码的特点是,出现概率较高的符号获得较短的编码,而出现概率较低的符号获得较长的编码。

这样设计的编码方案可以有效减
小平均编码长度,提高信息传输的效率。

需要注意的是,香农编码的主要缺点在于生成的编码长度可能不是整数,可能存在解码的歧义性。

为了解决这个问题,后来发展出了霍夫曼编码等更为广泛使用的熵编码方法。

香农信息论的主要内容

香农信息论的主要内容

香农信息论的主要内容香农信息论是由美国科学家克劳德·香农在20世纪40年代提出的一种关于信息传输和处理的数学理论。

它的主要内容包括信息的度量、信源编码、信道编码和错误控制编码等方面。

香农信息论提出了信息的度量方法。

香农认为,信息的度量应该与信息的不确定性有关。

他引入了信息熵的概念,将信息的度量与信源的概率分布联系起来。

信息熵越大,表示信息的不确定性越高,需要传输的信息量也就越大。

这一概念为后续的编码和传输提供了理论基础。

接下来,香农信息论提出了信源编码的理论。

信源编码是将信息源输出的符号序列进行编码,以便更高效地传输和存储。

香农证明了存在一种无损编码方法,使得平均码长接近信息熵。

这种编码方法被称为香农-费诺编码,为数据压缩和存储提供了理论基础。

然后,香农信息论研究了信道编码的问题。

信道编码是在信道中传输信息时引入冗余来纠正误码的一种方法。

香农提出了信道容量的概念,表示在给定信噪比条件下,信道最大可承载的信息速率。

他证明了存在一种编码方法,使得在无限长的码长下,信息传输速率接近信道容量。

这一结果被称为香农定理,对于提高信道传输的可靠性和效率具有重要意义。

香农信息论还涉及了误差控制编码的研究。

误差控制编码是在信息传输过程中引入冗余以纠正和检测错误的一种方法。

香农提出了循环冗余校验码和海明码等编码方法,有效地提高了信息传输的可靠性。

总结来说,香农信息论的主要内容包括信息的度量、信源编码、信道编码和误差控制编码等方面。

这些理论为信息的传输、存储和处理提供了重要的数学基础,对于信息技术的发展和应用具有深远影响。

香农信息论的研究成果不仅在通信领域得到广泛应用,还在计算机科学、数据压缩、密码学等领域有着重要的应用价值。

无失真的信源编码.

无失真的信源编码.

0 1
0 1
这两种编码哪一种更好呢,我们来计算一下二者的码长。
第七节 霍夫曼编码——二进制哈夫曼编码
L1 P(si )li 0.4 1 0.2 2 0.2 3 0.1 4 0.1 4 2.2 L2 P(si )li 0.4 2 0.2 2 0.2 2 0.1 3 0.1 3 2.2


第七节 霍夫曼编码——二进制哈夫曼编码
例 设单符号离散无记忆信源如下,要求对信源编二进制 霍夫曼码。编码过程如下图(后页)。
x6 x7 x8 X x1 , x2 , x3 , x4 , x5 , P( X ) 0.4 0.18 0.1 0.1 0.07 0.06 0.05 0.04

x2 ,
,
xi ,
,
p( x2 ), ,
p( xi ), ,
xn , p( xn )
p( x ) 1
i 1 i
n
二进制香农码的编码步骤如下: 将信源符号按概率从大到小的顺序排列,为方便起见,令 p(x1)≥ p(x2)≥…≥ p(xn) 令p(x0)=0,用pa(xj),j=i+1表示第i个码字的累加概率,则:

在图中读取码字的时候,一定要从后向前读,此时编出 来的码字才是可分离的异前置码。若从前向后读取码字, 则码字不可分离。
第七节 霍夫曼编码——二进制哈夫曼编码
第七节 霍夫曼编码——二进制哈夫曼编码

将上图左右颠倒过来重画一下,即可得到二进制哈夫曼码的码树。
第七节 霍夫曼编码——二进制哈夫曼编码

K 也不变,所以没有本质区别;

缩减信源时,若合并后的新符号概率与其他符号概率相等,从编码方 法上来说,这几个符号的次序可任意排列,编出的码都是正确的,但 得到的码字不相同。不同的编法得到的码字长度ki也不尽相同。

《信息论与编码》第三章部分习题参考答案

第三章习题参考答案第三章习题参考答案3-1解:(1)判断唯一可译码的方法:①先用克劳夫特不等式判定是否满足该不等式;②若满足再利用码树,看码字是否都位于叶子结点上。

如果在叶节点上则一定是唯一可译码,如果不在叶节点上则只能用唯一可译码的定义来判断是不是。

可译码的定义来判断是不是。

其中C1,C2,C3,C6都是唯一可译码。

都是唯一可译码。

对于码C2和C4都满足craft 不等式。

但是不满足码树的条件。

但是不满足码树的条件。

就只能就只能举例来判断。

举例来判断。

对C5:61319225218ki i ---==+´=>å,不满足该不等式。

所以C5不是唯一可译码。

译码。

(2)判断即时码方法:定义:即时码接收端收到一个完整的码字后,就能立即译码。

特点:码集任何一个码不能是其他码的前缀,即时码必定是唯一可译码, 唯一可译码不一定是即时码。

唯一可译码不一定是即时码。

其中C1,C3,C6都是即时码。

都是即时码。

对C2:“0”是“01”的前缀,……,所以C2不是即时码。

不是即时码。

(1) 由平均码长61()i i i K p x k ==å得1236 3 1111712(3456) 241681111712(3456) 2416811152334 24162K bitK bit K bitK bit==´+´+´+++==´+´+´+++==´+´+´´=62111223366()()log () 2 /()266.7%3()294.1%178()294.1%178()280.0%52i i i H U p u p u H U K H U K H U K H U K h h h h ==-=============å比特符号3-7解:(1)信源消息的概率分布呈等比级数,按香农编码方法,其码长集合为自然数数列1, 2, 3, ···, i, ·, i, ····;对应的编码分别为:0, 10, 110, ···, 111…110 ( i 110 ( i –– 1个1), ·1), ····。

三大运营商笔试-通信试题

第一套试题一、单选题1.下面编码方法惟一的是()。

A.费诺编码B.哈夫曼编码C.香农编码D.游程编码1.【答案】C。

解析:①香农编码:有系统的、唯一的编码方法,但在很多情况下编码效率不是很高;②费诺玛:比较适合于对分组概率相等或接近的信源编码;③哈弗曼码:对信源的系统设计没有特殊的要求,编码效率比较高对编码设备的要求也高;④游程编码:主要应用于计算机图形图像方面。

2.所谓相干解调,是指在接收端解调时使用()的载波进行解调。

A.频率相同、相位不同B.频率不同、相位相同C.频率相同、相位相同D.频率不同、相位不同2.【答案】C。

解析:在相干解调过程中,需要和载波同频同相的相干解调进行解调。

3.所谓码重就是一个码组中包含的()的个数。

A.1B.0C.信息元D.码元4.恒参信道相位畸变,对模拟通信质量影响()。

A.很大B.不显著C.显著D.不存在4.【答案】B。

解析:恒参信道是指信道的特性参数基本不随时间变化,或者变化极慢,恒参信道的相位畸变,对模拟通信质量影响不显著5.下列关于差错控制编码的描述错误的是()。

A.检错重发法和反馈校验法都需要反向信道的支持B.前向纠错法使得接收端不仅能发现错码,还能够纠正错码C.一维奇偶校验可以检测所有奇数个错误D.二维奇偶校验可以检测所有奇数个和偶数个错误6.线性调制系统的调制制度增益()。

A.与调制方式有关,与解调方式无关B.与调制方式无关,与解调方式有关C.与调制方式无关,与解调方式无关D.与调制方式有关,与解调方式有关7.均匀量化器的量化噪声功率与信号大小()关,适用于动态范围()的信号,非均匀量化器可以改善()信号的量化信噪比,适用于动态范围()的信号。

A.无、小、小、大B.有、小、大、小C.无、大、小、大D.有、大、小、大7.【答案】A。

解析:均匀量化器的量化噪声功率与信号大小无关,适用于动态范围小的信号,非均匀量化器可以改善小信号的量化信噪比,适用于动态范围大的信号。

信息论与编码课程设计 河南理工大学

一设计目的信息论与编码是我们电子信息工程的一门重要的专业课,通过对本次课程设计,学习将学到的理论知识用于实践,同时也学习了用软件编写程序,进一步对本课程知识的巩固和理解。

学习分析问题,解决问题的方法和途径,提高对本专业的学习兴趣。

二设计任务与要求(1)统计信源熵要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。

(2)哈夫曼编码要求:任意输入消息概率,利用哈夫曼编码方法进行编码,并计算信源熵和编码效率。

三理论简介3.1通信系统的模型通信系统的模型通信系统的性能指标主要是有效性、可靠性、安全性和经济性,通信系统优化就是使这些指标达到最佳,除了经济性,这些指标正是信息论的研究对象,可以通过各种编码处理来使通信系统的性能最优化。

根据信息论的各种编码定理和上述通信系统的指标,编码问题可以分为3类:信源编码、信道编码和加密编码。

3.1.1 信源编码由于信源符号之间存在分布不均匀和相关性,使得信源存在冗余度,信源编码的主要任务就是减少冗余度,提高编码效率。

信源编码的基础是信息论中的两个编码定理:无失真编码定理和限失真编码定理。

前者适用于离散信源或数字信号;后者主要用于连续信源或模拟信号。

本次课程设计就是利用的无失真信源编码。

3.1.2 信道编码信源编码器的作用:把信源发出的消息变换成由二进制码元(或多进制码元)组成的代码组,这种代码组就是基带信号。

同时通过信源编码可以压缩信源的冗余度,以提高通信系统传输消息的效率。

信源译码器的作用:把信道译码器输出的代码组变换成信宿所需要的消息形式,它的作用相当于信源编码器的逆过程。

3.1.3 加密编码加密编码是研究如何隐蔽消息中的信息内容,以便在传输过程中不被窃听,提高通信系统的安全性。

3.2 信源熵3.2.1 信源的描述和分类& 按信源在时间和幅度上的分布情况离散信源:文字、数据、电报连续信源:语音、图像& 按发出符号的数量单个符号信源:指信源每次只发出一个符号代表一个消息符号序列信源:指信源每次发出一组含二个以上符号的符号序列代表一个消息 & 按符号间的关系无记忆信源有记忆信源3.2.2 离散信源熵& 自信息量:随机事件的自信息量定义为其概率对数的负值,即在信息论中常用的对数底是2,信息量的单位为比特(bit);& 联合自信息量两个消息xi ,yj 同时出现的联合自信息量:& 条件自信息量在事件yj 出现的条件下,随机事件xi 发生的条件概率为p(xi / yj) ,则它的条件自信息量定义为条件概率对数的负值:& 离散信源熵为信源中各个符号不确定度的数学期望,即单位为:比特/符号 或者 比特/符号序列。

计算机科学技术:信息论与编码考试题库二

计算机科学技术:信息论与编码考试题库二1、问答题(江南博哥)请给出平均码长界定定理及其物理意义。

答案:2、填空题多用户信道的信道容量用()来表示。

答案:多维空间的一个区域的界限3、判断题狭义的信道编码既是指:信道的检、纠错编码。

答案:对4、判断题互信息量I(X;Y)表示收到Y后仍对信源X的不确定度。

答案:对5、判断题对于具有归并性能的无燥信道,当信源等概率分布时(p(xi)=1/n),达到信道容量。

答案:错6、问答?有两个二元随机变量X和Y,它们的联合概率为P[X=0,Y=0]=1/8,P[X=0,Y=1]=3/8,P[X=1,Y=1]=1/8,P[X=1,Y=0]=3/8。

定义另一随机变量Z=XY,试计算:(1)H(X),H(Y),H(Z),H(XZ),H(YZ),H(XYZ);(2)H(X/Y),H(Y/X),H(X/Z),H(Z/X),H(Y/Z),H(Z/Y),H (X/YZ),H(Y/XZ),H(Z/XY);(3)I(X;Y),I(X;Z),I(Y;Z),I(X;Y/Z),I(Y;Z/X),I(X;Z/Y)。

答案:7、填空题平均互信息量I(X;Y)与信源熵和条件熵之间的关系是()。

答案:(X;Y)=H(X)-H(X/Y)8、填空题根据输入输出信号的特点,可将信道分成离散信道、连续信道、()信道。

答案:半离散或半连续9、填空题单符号离散信源一般用随机变量描述,而多符号离散信源一般用()描述。

答案:随机矢量10、填空题信源编码的目的是提高通信的(),信道编码的目的是提高通信的(),加密编码的目的是保证通信的()。

答案:有效性;可靠性;安全性11、填空题某离散无记忆信源X,其符号个数为n,则当信源符号呈()分布情况下,信源熵取最大值()。

答案:等概;log(n)12、名词解释前向纠错(FEC)答案:是指差错控制过程中是单向的,无须差错信息的反馈。

13、名词解释信源编码答案:就是针对信源输出符号序列的统计特性,通过概率匹配的编码方法,将出现概率大的信源符号尽可能编为短码,从而使信源输出的符号序列变换为最短的码字序列针对信源输出符号序列的统计特性,通过概率匹配的编码方法,将出现概率大的信源符号尽可能编为短码,从而使信源输出的符号序列变换为最短的码字序列。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验目的:通过该实验,掌握通过计算机实验可变长信源编码方法,进一步熟悉香农编码,费诺编码以及霍夫曼编码方法。

实验环境: Matlab7.1
实验内容及过程:
1.对于给定的信源的概率分布,用MA TLAB语言实现香农编码。

2. 对于给定的信源的概率分布,用MA TLAB语言实现霍夫曼编码。

3. 对于给定的信源的概率分布,用MATLAB语言实现游程编码。

以下为M文件:
1.
function c = shannon(p)
% p = [0.2 0.15 0.15 0.1 0.1 0.1 0.1 0.1] % shannon(p)
[p , index] = sort(p) ;
p = fliplr(p) ;
n = length(p) ;
pa = 0 ;
for i = 2:n
pa(i) = pa(i - 1) + p(i - 1) ;
end
k = ceil(-log2(p)) ;
c = cell(1,n) ;
for i = 1:n
c{i} = '' ;
tmp = pa(i) ;
for j = 1:k(i)
tmp = tmp * 2 ;
if tmp >= 1
tmp = tmp - 1 ;
c{i}(j) = '1' ;
else
c{i}(j) = '0' ;
end
end
end
c = fliplr(c) ; c(index) = c ;
2.
function c = huffman(p)
n = size(p , 2) ;
if n == 1
c = cell(1,1) ;
c{1} = '' ;
return
end
[p1 , i1] = min(p) ;
index = [(1:i1-1) , (i1+1:n)] ; p = p(index) ;
n = n - 1 ;
[p2 , i2] = min(p) ;
index2 = [(1:i2-1) , (i2+1:n)] ; p = p(index2);
i2 = index(i2) ;
index = index(index2) ;
p(n) = p1 + p2 ;
c = huffman(p) ;
c{n+1} = strcat(c{n} , '1') ;
c{n} = strcat(c{n} , '0') ; index = [index , i1 , i2] ;
c(index) = c ;
3.
% 以下程序是将原图像转换为二值图像
image2=image1(:); %将原始图像写成一维的数据并设为image2 image2length=length(image2); % 计算image2的长度
for i=1:1:image2length % for 循环,目的在于转换为二值图像if image2(i)>=127
image2(i)=255;
else image2(i)=0;
end
end
image3=reshape(image2,146,122); % 重建二维数组图像
,并设为image3
figure,imshow(image3);%(右图)
% 以下程序为对原图像进行游程编码,压缩
X=image3(:); %令X为新建的二值图像的一维数据组
x=1:1:length(X); % 显示游程编码之前的图像数据
figure,plot(x,X(x));
j=1;
image4(1)=1;
for z=1:1:(length(X)-1) % 游程编码程序段
if X(z)==X(z+1)
image4(j)=image4(j)+1;
else
data(j)=X(z); % data(j)代表相应的像素数据
j=j+1;
image4(j)=1;
end
image4length=length(image4); % 计算游程编码后的所占字节数,记为image4length y=1:1:image4length ; % 显示编码后数据信息
figure,plot(y,image4(y));
CR=image2length/image4length; % 比较压缩前于压缩后的大小
% 下面程序是游程编码解压
l=1;
for m=1:image4length
for n=1:1:image4(m);
rec_image(l)=data(m);
l=l+1;
end
end
u=1:1:length(rec_image); % 查看解压后的图像数据
figure,plot(u,rec_image(u));
rec2_image=reshape(rec_image,146,122); % 重建二维二维图像数组figure,imshow(rec2_image); % 显示解压恢复后的图像
通过matlab可以看出,程序运行过程中
各个变量的值:%右图
CR=12.084,说明该游程编码,
压缩率为12.084
实验结果及分析:
p = [0.2 0.15 0.15 0.1 0.1 0.1 0.1 0.1]
c1 = shannon(p)
c2 = huffman(p)
结果:
c1 = '000' '010' '001' '1110' '1100' '1011' '1001' '1000'
c2 = '111' '101' '110' '000' '001' '010' '011' '100'
实验心得:实验应用M文件编写可分别编写不同段的内容,在运行时只需调用函数即可,方便了运行。

相关文档
最新文档