JPEG编码与解码的设计与实现(4)

2018-11-20 17:31

之中,而收到消息后,就可以消除或者部分解除了这些不确定性,也就是获得了信息。因此不确定性减少量,就可以作为信息的度量。换句话说,信息是用不确定性的量度定义的。一个消息的可能性愈小,其信息含量愈大;而消息的可能性愈大,则其信息含量愈小。

信息论的创始人香农在1948年的论文中提到了熵的概念,用来描述不确定性。也就是说,事件出现的概率小,其不确定性就越大,反之就越小。在数学上,所传输的消息是其出现概率的单调下降函数。所谓信息是指从n个相等可能事件中选出一个事件,所需要的信息度量或含量,也就是在辨别n个事件中特定的一个事件过程中所需要提问“是”或“否”的最少次数。如从64个数中选定某一个数,提问:“是否大于32?”,则不论回答是与否,都消去了半数的可能事件,如此下去,只要问6次这类问题,就可以从64个数中选定一个数,则所需信息量是:㏒2 64=6(bit)

设从N个数中选一个X的概率为P(X),并设从N中任选一个数的概率都相等,即 P(X)=1/N,则信息量I(X)可定义为:

I?X???log1??logP(X) N上式的值将随对数所取的底数不同而有所不同的值,因而其单位也就不同。通常取以2为底的对数,相应的单位为比特(bit),也可以取以e为底的对数,其单位为奈特(nat)。

如果将信源所有可能的信息量进行平均(当这些事件的概率不相等时),就得信源中的每个符号的平均信息量,称之为概率分布的熵(Entropy).

设信源X的符号集为X i (i=1,2,3…N)并设Xi出现的概率为P(Xi),则信源X的熵为:

H(X)???P(Xi)logP(Xi)

i?0熵是一个非负数,即H(Xi)≥0;当P(Xi)=0或P(Xi)=1时,H(X)=0。 2.4.2. 熵编码原理

信源中含有自然冗余度,这些冗余度既来自于信源本身的相关性,又来自于信源概率分布的不均匀性,只要找到去除相关性或改变概率分布不均匀性的手段和方法,也就找到了信息熵编码的方法。如图像中存在有空间相关、帧间相关,还存在有灰度概率分布不均匀性。因此,利用信息熵理论减少数据在传输和存储的冗余度,就是信息熵编码要解决的问题。

信源所含有的平均信息量(熵)是进行无失真编码的理论极限,而低于此极限的无

14

失真编码方法是找不到的,只要不低于此极限,就能找到某种适宜编码方法,去逼近熵。

JPEG中的熵编码

JPEG标准具体规定了两种熵编码方式:Huffman编码和算术编码。JPEG基本顺序编码解码器具体规定用Huffman编码,但是JPEG并没有限制对任何JPEG算法必须用Huffman编码方式或算术编码方式。熵编码可以分成两步进行,首先把DC码和行程码转换成中间符号序列,然后给这些符号赋以变长码字。[4]

1. 熵编码的中间符号表示

对差分DC系数用两个符号进行编码,符号1和符号2。符号1表示的信息称为“长度”,即为DC系数的幅度进行编码所用的位数,符号2表示DC系数的幅度。

类似地,对每个AC系数也用两个符号进行编码,符号1和符号2。符号1表示了两条信息,称为“行程”和“长度”。行程是在之字形矩阵中位于非零AC系数前的连续零值AC系数的个数,长度是对AC系数的幅度进行编码所用的位数。符号2表示了AC系数的幅度。

2. 熵编码

对DC系数的符号1用Huffman表中的可变长度代码(VLI)进行编码,表2-7给出了DC系数亮度的一个典型的Huffman编码表。符号2用可变长度整数代码(VLI)进行编码,若为负值,则采用二进制的补码的形式。表2-8所示为符号2用比特表示的长度,它随着幅度(差分DC系数值)变化而改变。在实际编码中,我们首先要从表中找出差分DC系数需要多少位来表示。然后,位的数目用以四位二进制编码的十进制位数表示。接着就用可变长度整数表示系数的幅度。

表2-7亮度DC系数表

尺寸分类 0 1 2 3 4 5 6 2 3 3 3 3 3 4 码长 00 010 011 100 101 110 1110 码字 15

7 8 9 10 11 5 6 7 8 9 表2-8 DC系数符号2结构

尺寸 11110 111110 1111110 11111110 111111110 幅度 1,1 -3…-2,2…3 -7…-4,4…7 -15…-8,8…15 -31…-16,16…31 -63…-32,32…63 -127…-64,64…127 -255…-128,128…255 -511?-256,256?511 -1023?-512,512?1023 1 2 3 4 5 6 7 8 9 10 而对AC系数采用Huffman表中的VLC对符号1编码,表2-9给出了AC系数亮度的部分Huffman编码表。随着对DC系数进行编码,用VLI对符号2进行编码。图2-9中的流程图显示了对AC系数编码时涉及的步骤。如图所示,我们可对零值AC系数的个数作计数直到遇到第一个非零的AC系数。有两种情况需要考虑:第一种,当连续零值AC系数超过16,用ZRL代码对这16个连续的零值AC系数编码,同时游程计数复位为零;第二种,当发现了一个非零的AC系数,就按下面的方式建立一个复合8bit数值:首先,我们要找到表示AC系数所需的位数,然后位数被编码为BCD值。这一BCD值就形成了8bit复合值中最低的4bit,遇到非零AC系数之前的零值AC系数的个数生成了8bit复合值中的高bit,即如图2-9所表示的那样。

重复上面的编码过程,直到全部63个系数都用这种方式处理完毕。如果最后一个AC系数是零,就用块结束(EOB)代码。

16

图2.9 AC系数的编码流程 表2-9 亮度AC系数表

行程/尺寸 0/0(EOB) 0/1 0/2 0/3 0/4 0/5 0/6 0/7 0/8 0/9 4 2 2 3 4 5 7 8 10 16 码长 1010 00 01 100 1011 11010 1111000 11111000 1111110110 1111111110000010 码长 17

0/A 1/1 1/2 1/3 1/4 1/5 1/6 1/7 1/8 1/9 1/A 2/1 2/2 2/3 2/4 2/5 2/6 2/7 2/8 2/9 2/A 16 4 5 7 9 11 16 16 16 16 16 5 8 10 16 16 16 16 16 16 16 1111111110000011 1100 11011 1111001 111110110 11111110110 1111111110000100 1111111110000101 1111111110000110 1111111110000111 1111111110001000 11100 11111001 1111110111 111111110100 1111111110001001 1111111110001010 1111111110001011 1111111110001100 1111111110001101 1111111110001110 下面通过一个例子来具体说明编码的过程。表2-10是一个8×8的亮度图像子块经过量化后的矩阵。可以看到只有左上角的几个数(低频分量)不是0,这样使用行程编码就会取得很好的效果。

表2-10 量化后矩阵

15 -2 -1 0

0 -1 -1 0 -1 0 0 0 0 0 0 0 18

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


JPEG编码与解码的设计与实现(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:青岛版三年级上册平移与旋转备课

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: