欢迎来到天天文库
浏览记录
ID:40554187
大小:192.83 KB
页数:11页
时间:2019-08-04
《h264熵编码分析(v2.0)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、h.264熵编码分析(v2.0)利用信源的随机过程统计特性进行码率压缩的编码方式称为熵编码。它是把所有的语法(句法)元素(包括控制流数据,变换量化残差系数和运动矢量数据)以一定的编码形式映射成二进制比特流。熵编码是无损压缩编码方法,它生成的码流可以经解码无失真地恢复出数据。在信息论中表示一个数据符号的理论上最佳的比特数通常是一个分数而不是整数,这个比特数用log2(1/P)表示,其中P是每个数据符号的出现概率。这里log2(1/P)指的就是熵的概念。熵的大小与信源的概率模型有着密切的关系,各个符号出现的概率不同,信
2、源的熵也不同。当信源中各事件是等概率分布时,熵具有极大值。信源的熵与其可能达到的最大值之间的差值反映了该信源所含有的冗余度。信源的冗余度越小,即每个符号所独立携带的信息量越大,那么传送相同的信息量所需要的序列长度就越短,符号位也越少。因此,数据压缩的一个基本的途径是去除信源的符号之间的相关性,尽可能地使序列成为无记忆的,即前一符号的出现不影响以后任何一个符号出现的概率。 熵编码可以是定长编码,变长编码或算术编码。定长编码把固定长度的码字解释为有符号或者无符号的整数。变长编码对出现频率高的符号用短码字表示,对出现频率
3、低的符号用长码字表示。算术编码是一种递推形式的连续编码,其思想是用0到1的区间上的一个数来表示一个字符输入流,它的本质是为整个输入流分配一个码字,而不是给输入流中的每个字符分别指定码字。算术编码是用区间递进的方法来为输入流寻找这个码字的,它从于第一个符号确定的初始区间(0到1)开始,逐个字符地读入输入流,在每一个新的字符出现后递归地划分当前区间,划分的根据是各个字符的概率,将当前区间按照各个字符的概率划分成若干子区间,将当前字符对应的子2区间取出,作为处理下一个字符时的当前区间。到处理完最后一个字符后,得到了最终区
4、间,在最终区间中任意挑选一个数作为输出。算术编码是一种高效的熵编码方案,其每个符号所对应的码长被认为是分数。由于对每一个符号的编码都与以前编码的结果有关,所以它考虑的是信源符号序列整体的概率特性,而不是单个符号的概率特性,因而它能够更大程度地逼近信源的极限熵,降低码率。 在H.264标准中通过描述子(Descriptor)的形式来说明语法元素的解码算法。描述子在括号中带有一个参数,这个参数表示需要提取的比特数。除了定长编码以外,还有3种熵编码方案:一个是指数哥伦布编码(Exponential Golomb Code
5、s);一个是从可变长编码发展而来的上下文自适应可变长编码(CAVLC);另一个是从算术编码发展而来的基于上下文的自适应二进制算术编码(CABAC)。前两种属于变长编码,而第三种属于算术编码。研究表明CABAC的压缩效率比CAVLC提高了9%~14%。 Exp‐Golomb Codes Exp‐Golomb的描述子有无符号指数哥伦布编码ue(v),有符号指数哥伦布编码se(v),截断指数哥伦布编码te(v)和映射指数哥伦布编码me(v)。 0阶指数哥伦布编码是一种有规则结构的变长编码,它的结构可以表示为 [M
6、zeros][1][INFO] 其中M zeros称为前缀,由M个零组成,而M位INFO称为信息后缀。码字总长为2M+1。①M和INFO的值由要编码的值索引code_num得到。(可参考标准表9‐1) M=⎢⎣log2(code_num+1)⎥⎦ INFO=code_num+1−2M ① 如无特别说明,本文档中提到的标准均指“ITU‐T Recommendation H.264 ‐‐ Advanced video coding for generic audiovisual services”2005年3月版本。
7、以下假设编码语法元素的值为x。 ue(v):从编码语法元素到code_num的转换公式为code_num = x。(可参考标准表9‐2) se(v):从编码语法元素到code_num的转换公式为: code_num = 2x‐1 (x>0) code_num = ‐2x (x≤0) te(v):从编码语法元素到code_num的转换,首先判断x值的位数范围v,如果v大于1,x到code_num的转换过程和ue(v)相同;如果v等于1,即x等于0或1,则code_num与x的值相同,但最终的编码值与code
8、_num这个值相反。 me(v):从编码语法元素到code_num的转换参考标准表9‐4。 CAVLC CAVLC的描述子是ce(v),需要编码的语法元素有 coeff_token: 指明了非零系数的个数和拖尾系数的个数。 trailing_ones_sign_flag: 拖尾系数的符号。如果相应的拖尾系数是+1,trailing_ones_sign_f
此文档下载收益归作者所有