2.使用程序huff_enc和huff_dec进行以下操作(在每种情况下,利用由被压缩图像生成的码本)。
(a)对Sena、Sensin、Omanha进行图像编码;(压缩前后的对比)
文件名 | 压缩前 | 压缩后 | 压缩比 |
Sena | 64KB | 57KB | 89.06% |
Sensin | 64KB | 61KB | 95.31% |
Omaha | 64KB | 58KB | 90.62% |
结论: 从压缩的结果来看,压缩比较高,但压缩的效率不是很高。
//(b) 编写一段程序,得到相邻像素之差,然后利用huffman对差值图像进行编码;
//(c)利用adap_huff进行重复(a)和(b).
4.一个信源从符号集A=(a1,a2,a3,a4,a5)中选择字母,概率为P(a1)=0.15,P(a2)=0.04,P(a3)=0.26,P(a4)=0.05,P(a5)=0.50.
(a)计算这个信源的熵。
该信源的熵: H = -0.15*log2(0.15)-0.04*log2(0.04)-0.26*log2(0.26)-0.05*log2(0.05)-0.50*log2(0.50)
=0.5482 bits/symbol;
(b)求这个信源的哈夫曼码。
a.先把集合中的字母的概率按从小到大的顺序在草稿纸上从上到下写出;
b.先合并字母概率最小的两个概率值,求出两个字母的概率的和,直到概率达到0.为止;
c.在每组合中,把(0,1)按上0下1的方式;
d.画出每个信源符号概率到1.0出的路径,记下沿路的1和0;
e.对于每个信源符号都写出1、0序列,然后从右到左取1或0就得到的哈夫曼码。
该信源的哈夫曼码为:
字母 | 码字 | 概率 |
a5 | 0 | 0.50 |
a3 | 10 | 0.26 |
a1 | 110 | 0.15 |
a4 | 1110 | 0.05 |
a2 | 1111 | 0.04 |
(c)求(b)中代码的平均长度及其冗余度。
平均长度 :L=1*0.5+2*0.26+3*0.15+(0.04+0.05)*4=1.83bits/symbol;
熵 :H(A)=-0.50*log2(0.50)-0.26*log2(0.26)-0.15*log2(0.15)-0.04*log2(0.04)-0.05*log2(0.05)=0.5482 bits/symbol;
冗余度 :L-H=1.2818bits/symbol.
5一个符号集A={a1,a2,a3,a4},其概率为P(a1)=0.1,P(a2)=0.3,P(a3)=0.25,P(a4)=0.35,使用以下过程找到一种哈夫曼码:
(a)本章概述的第一种过程;
a.先把集合中的字母的概率按从小到大的顺序在表格上从上到下写出;
b.先合并字母概率最小的两个概率值,求出两个字母的概率的和,直到概率达到1.0为止;
c.在每组合中,把(0,1)按概率小的赋0值打的赋值1的方式,赋值(1、0)从右往左;
d.画出每个信源符号概率到1.0出的路径,记下过程中的1和0;
e.对于每个信源符号都写出1、0序列,然后(1、0)从右往左取赋的(1、0),就得到的哈夫曼码。
字母 | 码字 | 概率 | 集合 | 集合的概率 |
a1 | 0.1 | a1 | 0.1 | |
a2 | 0.3 | a3 | 0.25 | |
a3 | 0.25 | a2 | 0.3 | |
a4 | 0.35 | a4 | 0.35 | |
字母 | 码字 | 概率 | 集合 | 集合的概率 |
a1 | 10 | 0.1 | a2 | 0.3 |
a2 | 0 | 0.3 | a1、a3 | 0.35 |
a3 | 11 | 0.25 | a4 | 0.35 |
a4 | 0.35 | |||
字母 | 码字 | 概率 | 集合 | 集合的概率 |
a1 | 110 | 0.1 | a2、a1、a3、a4 | 1.0 |
a2 | 10 | 0.3 | ||
a3 | 111 | 0.25 | ||
a4 | 0 | 0.35 | ||
相应字母所得哈夫曼码如下:
字母 | 码字 | |||
a1 | 110 | |||
a2 | 10 | |||
a3 | 111 | |||
a4 | 0 | |||
(b) 最小方差过程;
平均长度 :L=1*0.35+2*0.3+(0.25+0.1)*3=2bits/symbol;
s2=0.1(3-2)2+0.3(2-2)2+0.25(3-2)2+0.35(1-2)2=0.7
6.在本书的配套的数据集中有几个图像和语音文件。
(a)编写一段程序,计算其中一些图像和语音文件的一阶熵。
(b)选择一个图像文件,并计算其二阶熵。试试解释一阶熵和二阶熵之间的差别。
(c)对于(b)中所用的图像文件,计算其相邻像素之差的熵。试试你的发现。
文件 | 文件类型 | 文件名 | 一阶熵 | 二阶熵 | 差分熵 |
图像文件 | EARTH | 4.7708012 | 2.568358 | 3.962697 | |
OMAHA | 6.942396 | ||||
SENA | 6.834299 | 3.625205 | 3.656989 | ||
音频文件 | BERK | 2.5683569 | |||
GABE | 7.116340 |
从中的结论有:二阶熵明星比一阶熵低,说明图像中相连像素之间存在着很强的相关性;差分熵比二阶熵略略大一点,这是两者都考虑相连像素之间相关性,所以熵较小;
二阶熵在一阶熵和差分熵之间,音频文件、图像文件(不同文件)之间的一阶熵和二阶熵都不一样,同一文件类型的(BERK/GABE)的不同文件也有差别。