H.264 熵编码分析 By kdjwang 2008‐08‐09 第一版 2008‐10‐10 第二版 利用信源的随机过程统计特性进行码率压缩的编码方式称为熵编码。它是把所有的语法(句法)元素(包括控制流数据,变换量化残差系数和运动矢量数据)以一定的编码形式映射成二进制比特流。熵编码是无损压缩编码方法,它生成的码流可以经解码无失真地恢复出数据。在信息论中表示一个数据符号的理论上最佳的比特数通常是一个分数而不是整数, 这个比特数用 log2(1/P)表示,其中 P 是每个数据符号的出现概率。这里 log2(1/P)指的就是熵的概念。熵的大小与信源的概率模型有着密切的关系,各个符号出现的概率不同,信源的熵也不同。当信源中各事件是等概率分布时,熵具有极大值。信源的熵与其可能达到的最大值之间的差值反映了该信源所含有的冗余度。信源的冗余度越小,即每个符号所独立携带的信息量越大,那么传送相同的信息量所需要的序列长度就越短,符号位也越少。因此,数据压缩的一个基本的途径是去除信源的符号之间的相关性,尽可能地使序列成为无记忆的,即前一符号的出现不影响以后任何一个符号出现的概率。 熵编码可以是定长编码,变长编码或算术编码。定长编码把固定长度的码字解释为有符号或者无符号的整数。变长编码对出现频率高的符号用短码字表示,对出现频率低的符号用长码字表示。算术编码是一种递推形式的连续编码,其思想是用 0 到1 的区间上的一个数来表示一个字符输入流,它的本质是为整个输入流分配一个码字,而不是给输入流中的每个字符分别指定码字。算术编码是用区间递进的方法来为输入流寻找这个码字的,它从于第一个符号确定的初始区间(0 到1)开始,逐个字符地读入输入流,在每一个新的字符出现后递归地划分当前区间,划分的根据是各个字符的概率,将当前区间按照各个字符的概率划分成若干子区间,将当前字符对应的子2 区间取出,作为处理下一个字符时的当前区间。到处理完最后一个字符后,得到了最终区间,在最终区间中任意挑选一个数作为输出。算术编码是一种高效的熵编码方案,其每个符号所对应的码长被认为是分数。由于对每一个符号的编码都与以前编码的结果有关,所以它考虑的是信源符号序列整体的概率特性,而不是单个符号的概率特性,因而它能够更大程度地逼近信源的极限熵,降低码率。 在 H.264 标准中通过描述子(Descriptor)的形式来说明语法元素的解码算法。描述子在括号中带有一个参数,这个参数表示需要提取的比特...