第二次作业

 参考书《数据压缩导论(第四版)》Page 66

 2 利用程序huff_enc和huff­_dec进行以下操作(在每种情况下,利用由被压缩图像生成的码本)。

(a) 对Sena、Sensin和Omaha图像进行编码。

(b) 编写一段程序,得到相邻之差,然后利用huffman对差值图像进行编码。

答:(a)我对其代码进行编译后得到的结果如下:

文件名 压缩前大小 压缩后大小 压缩比
OMAHA.IMG 64KB 57KB 89.06%
SENA.IMG 64KB 56.1KB 87.66%
SINAN.IMG 64KB 60.2KB 94.06%

 

(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)计算这个信源的熵。

(b)求这个信源的霍夫曼码。

(c)求(b)中代码的平均长度及其冗余度。

 答: (a)由于P(a1)=0.15,P(a2)=0.04,P(a3)=0.26,P(a4)=0.05,P(a5)=0.50,

              则这个信源的熵为H=-0.15*log20.15-0.04*log20.04-0.26*log20.26-0.05*log20.05-0.50*log20.50

                                            = -0.15*(-2.74) -0.04*(-4.64) -0.26*(-1.94) -0.05*(-4.32) -0.50*(-1)

                                   =0.4105+0.1858+0.5053+0.2161+0.5

                                   =1.8177(bit)

       (b)由题意可得,这个信源的霍夫曼码为:

步骤一:为每个字符创建一个集合

字母 码字 概率 集合 集合的概率
a1   0.15 a2 0.04
a2   0.04 a4 0.05
a3   0.26 a1 0.15
a4   0.05 a3 0.26
a5   0.5 a5 0.5

步骤二:对最前面集合的字母的码字中插入前缀“1”,对第二个集合的字母的码字中插入前缀“1”,并合并最前面的两个集合,然后排序

字母 码字 概率 集合 集合的概率
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     

步骤三:重复步骤二

字母 码字 概率 集合 集合的概率
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    

步骤四:重复步骤二

字母 码字 概率 集合 集合的概率
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    

步骤五:重复步骤二

字母 码字 概率 集合 集合的概率
a1 110 0.15 a1a2a3a4a5 1
a2 1111 0.04    
a3   10 0.26    
a4 1110 0.05    
a5 0 0.5    

       

综上可得:   a的码字为为110; 

                 a2 的码字为1111 ;

                 a3 的码字为10 ;

                 a4 的码字为1110 ;

                 a5 的码字为0 。

  (c) 由(b)可得:

              代码的平均长度为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.83(bit)

            冗余度为:熵值-平均长度=H-L=1.83-1.8177=0.0123(bit)

  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 的编码为111;

                                                                                               a2的编码为10;

                                                                                               a3的编码为110;

                                                                                               a4的编码为0.(概率是按降序排列,从而来划分的)

 (b)用本章概述的Huffman编码得到的这个信源的霍夫曼码为:

步骤一:为每个字符创建一个集合

字母 码字 概率 集合 集合的概率
a1   0.1  a1  0.1
a2   0.3  a3  0.25
a3     0.25  a2  0.3
a4   0.35  a4  0.35

步骤二:对最前面集合的字母的码字中插入前缀“1”,对第二个集合的字母的码字中插入前缀“1”,并合并最前面的两个集合,然后排序

字母 码字 概率 集合 集合的概率
a1  1  0.1  a2
 0.3
a2    0.3  a4
 0.35
a3  0  0.25  a1a3
 0.35
a4    0.35    

步骤四:重复步骤二

字母 码字 概率 集合  集合的概率
a1 1 0.1 a1a3
0.35
a2 1 0.3 a2a4
0.65
a3 0.25    
a4  0  0.35    

步骤三:重复步骤二

字母 码字 概率 集合 集合的概率
a1 1 1  0.1  a1a2a3a4  1
a2 0 1  0.3    
a3 1 0  0.25    
a4 00  0.35    

综上可得:

          a1 的编码为11;

          a2的编码为01;

          a3的编码为10;

           a4的编码为00.

用上述的两种方法这个信源的平均码长L=2(bit)

第一种方法的方差S12=0.35*(1-2)2+0.3*(2-2)2+(0.25+0.1)*(3-2)2=0.7

第二种方法的方差S22=(0.35+0.1+0.3+0.25)*(2-2)2=0

综上所述,两种方法的平均码长相同,根据最小方差过程,第二种方法的码长变化较小,比较接近平均码长,所以第二种方法更容易实现。

 参考书《数据压缩导论(第4版)》   Page 30

   2-6. 在本书配套的数据集中有几个图像和语音文件。

 (a)编写一段程序,计算其中一些图像和语音文件的一阶熵。

(b)选择一个图像文件,并计算其二阶熵。试解释一阶熵和二阶熵之间的差别。

(c)对于(b)中所用的图像文件,计算其相邻像素之差的熵。试解释你的发现。

答:(a)根据老师给出的代码我进行了调试,得出图像和语音文件的一阶熵、二阶熵和差分熵的结果如下:

文件名 一阶熵 二阶熵 差分熵
EARTH(IMG) 4.770801 2.568358  3.962697 
OMAHA(IMG) 6.942426 4.488626 6.286834
SENSIN(IMG) 7.317944 4.301673  4.541547 
SENA(IMG) 6.834299 3.625204  3.856989
BERK(RAW) 7.151537  6.705169 8.976150 
GABE(RAW) 7.116338  6.654578 8.978236
test(txt) 4.315677  3.122731  6.099982

(b)我选择的是图像SENA,

根据(a)所得图像SENA的一阶熵为6.834299(bit),二阶熵为3.625204(bit). 

所以一阶熵和二阶熵之间的差别是一阶熵比二阶熵大。

(c)图像SENA相邻像素之差的熵为3.856989:

 我的发现是:对于图像的相邻像素之差的熵是介于一阶熵和二阶熵之间的,也许差分熵更加接近图像的真正的存储大小。

从今天起,做个幸福的人。

原文地址:https://www.cnblogs.com/zlyyl/p/4784904.html