张翠的第二次作业
P66
2、利用程序huff_enc和huff_dec进行以下操作(在每种情况下,利用由被压缩图像生成的码本)
(a)对Sena、Sensin和Omaha图像进行编码。
(b) 编写一段程序,得到相邻之差,然后利用huffman对差值图像进行编码。
(c) 使用adap_huff重复(a)和(b)。
解答:(a)
文件名 | 压缩前 | 压缩后 | 压缩比 |
Sena | 64.0KB | 56.1KB | 0.88 |
Sensin | 64.0KB | 60.2KB | 0.94 |
Omaha | 64.0KB | 57.0KB | 0.89 |
(b)
(c)
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)计算这个信源的熵。
(b)求这个信源的霍夫曼码。
(c)求(b)中代码的平均长度及其冗余度。
解答:
(a)这个信源的熵为:
H=0.15*log220/3+0.04*log225+0.26*log250/13+0.05*log220+0.5*log22
=0.411+0.186+0.505+0.216+0.5
=1.818
(b)这个信源的霍夫曼码为:
1)为每个字符创建一个集合
字母 | 码字 | 概率 | 集合 | 集合的概率 |
a1 | 0.15 | a1 | 0.15 | |
a2 | 0.04 | a2 | 0.04 | |
a3 | 0.26 | a3 | 0.26 | |
a4 | 0.05 | a4 | 0.05 | |
a5 | 0.5 | a5 | 0.5 |
2)第一次编码
字母 | 码字 | 概率 | 集合 | 集合的概率 |
a1 | 0.15 | a2a4 |
0.09 | |
a2 | 1 | 0.04 | a1 |
0.15 |
a3 |
0.26 | a3 |
0.26 | |
a4 |
0 | 0.05 | a5 |
0.5 |
a5 |
0.5 | |
3)第二次编码
字母 | 码字 | 概率 | 集合 | 集合的概率 |
a1 | 0 | 0.15 | a2a4a1 | 0.24 |
a2 |
11 | 0.04 | a3 | 0.26 |
a3 | 0.26 | a5 | 0.5 | |
a4 | 10 | 0.05 | ||
a5 | 0.5 |
4)第三次编码
字母 | 码字 | 概率 | 集合 | 集合的概率 |
a1 | 10 | 0.15 | a2a4a1a3 | 0.5 |
a2 | 111 | 0.04 | a5 |
0.5 |
a3 | 0 | 0.26 | ||
a4 | 110 | 0.05 | ||
a5 | 0.5 |
5)第四次编码
字母 | 码字 | 概率 | 集合 | 集合的概率 |
a1 | 110 | 0.15 | a2a4a1a3a5 | 1.0 |
a2 | 1111 | 0.04 | ||
a3 | 10 | 0.26 | ||
a4 | 1110 | 0.05 | ||
a5 | 0 | 0.5 |
综上可得:a1:110 a2:1111 a3:10 a4:1110 a5:0
(c)平均长度L=0.15*3+0.04*4+0.26*2+0.05*4+0.5*1
=0.45+0.16+0.52+0.2+0.5
=1.83bits/symbol
冗余度R=L-H=1.83-1.818=0.012
5 、一个符号集A={a1, a2, a3, a4,},其概率为P(a1)=0.1,P(a2)=0.3,P(a3)=0.25,P(a4)=0.35,使用以下过程找出一种霍夫曼码:
(a)本章概述的第一种过程:
(b)最小方差过程。
解释这两种霍夫曼码的区别。
解答:(a)用本章概述的第一种过程可得:
第一个霍夫曼码为: a1:001 a2:01 a3:000 a4:1
第二个霍夫曼码为: a1:00 a2:10 a3:01 a4:11
第一个的平均码长L=0.1*3+0.3*2+0.25*3+0.35*1 =2.0
第二个的平均码长L=0.1*2+0.3*2+0.25*2+0.35*2=2.0
(b)最小方差过程:
第一个的方差S1=0.1*(2-3)2+0.3*(2-2)2+0.25*(2-3)2+0.35*(2-1)2=0.7
第二个的方差S2=0.1*(2-2)2+0.3*(2-2)2+0.25*(2-2)2+0.35*(2-2)2=0
这两种霍夫曼码的区别在于:这两个代码的平均码长是相同的,但码字长度的方差有很大不同
参考书《数据压缩导论(第4版)》Page 30
6.在本书配套的数据集中有几个图像和语音文件。
(a)编写一段程序,计算其中一些图像和语音文件的一阶熵
(b)选择一个图像文件,并计算其二阶熵。试解释一阶熵与二阶熵之间的差别。
(c)对于(b)中所用的图像文件,计算其相邻像素之差的熵。试解释你的发现。
解答:根据老师所提供的代码,调试的到的结果如下:
图像名称 | 一阶熵 | 二阶熵 | 差分熵 |
EARTH(IMG) | 4.770801 | 2.568358 | 3.962697 |
OMAHA(IMG) | 6.942426 | 4.488626 | 6.286834 |
SENA(IMG) | 6.834299 | 3.625204 | 3.856989 |
SENSIN(IMG) | 7.317944 | 4.301673 | 4.541547 |
BERK(RAW) | 7.151537 | 6.705169 | 8.976150 |
GABE(RAW) | 7.116338 | 6.654578 | 8.978236 |
由表格中的内容,我们可以得到结论是:1)相同图像的一阶熵都要比二阶熵的数值大
2)相同图像的差分熵的数值要大于二阶熵的数值。原因:两者都考虑相邻像素之间相关性,所以熵较小;但二阶熵是考虑 相邻像素间相关性后熵的下界,比差分熵更小一些。