CABAC编码协议详细分析(初稿)_第1页
CABAC编码协议详细分析(初稿)_第2页
CABAC编码协议详细分析(初稿)_第3页
CABAC编码协议详细分析(初稿)_第4页
CABAC编码协议详细分析(初稿)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CABAC详细分析CABAC的三个步骤:1.二进制转换:把非二进制语法元素唯一映射到一个二进制码字2.上下文建模:利用已编码的符号为语法元素选择合适的上下文模型并自动更新概率模型3基于表格的算术编码:利用查表的方式进行算术编码,有效地避免了乘法运算二进制转换一.一元码对于一个非二进制数C来说,编码 个1并在最后加上一个0二.一元截断码对于C小于Cmax时,用一元码的编码方法,当C=Cmax时,编码个1而不在最后加0三.UEGK二进制转换前缀由CmaxUCoff的一元截断码组成,后缀用k阶哥伦布编码数字CUcoff,其中k阶哥伦布编码用以下程序编码(对于要编码符号S)四.固定长度二进制转换对于字

2、母表【0,1,2,Cmax】,编码的二进制长度其中,二进制1对应其中重要性最低的符号,随着重要性的增加,二进制也会跟着增加五.对于宏块与子宏块类型的具体二进制化对应当adaptive_block_size_transform_flag=0时(非ABT变换,以下都针对非ABT变换),参看表格9-20,9-21,9-22:关于表格的说明:对应在SI帧内的宏块类型二进制转换按以下方法:前缀构成:当类型为mb_type_Sintra_4*4没有后缀,否则由表920给出对于在P和SP图像的帧内预测宏块 ,mb_type=730的前缀由表9-21给出,后缀用表9-20对于在B图像中的帧内预测宏块,mb_t

3、ype=2347的前缀由表9-21给出,后缀用表9-20以上都是对非ABT变换来说的,对于ABT变换,要参考其他二进制方案表格,此处略去。 各种不同的语法元素,都是用到前面的4种二进制方案或者某两种二进制方案的串接,下面举例对变换系数的二进制方案进行说明:首先该过程分为3个步骤:1.如果coded_block_flag0,说明没有重要系数(非0系数),不需要对宏块的信息进行编码,否则进行第二步2.在扫描的过程中,对于每个扫描位置i,如果i位置的系数是0,那么significant_coeff_flagi=0,否则significant_coeff_flagi=1,当significant_co

4、eff_flagi=1时,继续编码last_ significant_coeff_flagi,如果该系数不是最后一个非0系数, last_ significant_coeff_flagi0,否则1,当等于1时不需要再对宏块剩余的0系数进行编码3.对应那些significant_coeff_flagi1的系数,要编码coeff_absolute_value_minus_1和coeff_sign,对于前者,采用UEG0编码(UCoff14),对于后者直接采用旁路编码器(将在后文说到)上下文定义与分配首先,每个语法元素对应一个或者多个上下文指示器context_id,经过二进制转换后的语法元素可能有

5、不止一位的二进制值,以mb_type_I(I帧图像内的宏块类型)为例,对应的context_id为ctx_mb_type_I,该语法元素二进制化后有6位二进制值,分别对应ctx_mb_type_Ik,1<=k<=6即max_idx_ctx_id=6,而每个context_id 对应一定范围内的上下文变量context label,可参看下表: 具体每个CTX_IDK对应哪几个LABEL可进一步参考下表:上下文模板具体某一位context_idk可能对应几个不同的context label,那么究竟具体对应哪个就由上下文模板来决定,上下文模板将在下面进行说明;一. 利用两个相邻符号的

6、上下文模板 如图所示,正要编码的符号S是在当前宏块块C中,A,B是C的相邻宏块通过关系式:ctx_var_spat=cond_term(A,B) (91)计算出符号S的上下文增量X,通过用OFFSET+X得出对应的context label的值。其中cond_term()表示的是一种函数关系,对于91式,有以下3种具体情况: 此外,ctx_coded_block依赖的是表928中的6种块类型,对于上下文变量ctx_abs_mvd_h1和ctx_abs_mvd_v1,按以下式子编码:二、利用先前bin值的上下文模板关系式: 对应的表格:三.关于变换系数信息的上下文定义 有关变换系数的上下文信息都

7、由context_category决定,参看context_category的定义表:ctx_sig_coeff和ctx_last_coeff对应的是significant_coeff_flag和last_significant_coeff_flag,有以下关系式: 其中scanning_pos指示的位置与zig-zag扫描相关,对于ctx_abs_level包含2个变量ctx_abs_level1和ctx_abs_level2,有以下关系式:其中num_decod_abs_lev_eql指的是已编码的绝对值等于1的系数,Num_decod_abs_lev_gtl指的是已编码的绝对值大于1的系

8、数(两者都在当前宏块中计算)上下文模型的初始化前文解决了如何给语法元素的每一位分配context label的问题,现在来解决一下究竟每一个context label对应什么样的状态。首先是状态的初始化问题,状态包含一个代表状态的数字和MPS(最大概率符号),实质上上下文模型状态的初始化是由该帧图像的量化参数QP决定的,对于每一个context label都分配一对数组m,n,状态的初始化按以下的三步进行:1. 计算 pre_state=(m*(QP-12)>>4)+n;2. 对于P和B帧图像限制pre_state在0,101内,对于I帧图像,限制pre_state在27,74内,

9、即pre_state= min(101,max(0, pre_state) (对P 和B帧), pre_state=min (74,max(27, pre_state) (对I帧)3. 将pre_state按以下规则映射到数组state,MPS,规则:如果pre_state<=50, state=50- pre_state,MPS=0,否则 state= pre_state-51,MPS=1对于不同context label的m,n分配,参看以下表格:基于表格的算术编码算术编码是基于区间细分的,CABAC的算术编码有以下3个明显性质:1 概率的估计是对小概率符号LPS的概率而言的,是通过

10、基于表格中64个不同状态之间的转换而实现的。2 区间长度R通过一组预先量化的值Q1,Q2,Q3,Q4进行量化以计算新的间隔区间。通过储存一个64*4的表格(Qi*Pk)来避免R*Pk的乘法运算。3 一个独立的编码路径(旁路编码)用于对近似均匀分布(Plps=0.5)的语法元素一. 概率估计概率估计在H.264/AVC中的免除乘法的二进制编码基本思想依赖于一个假设:每一个上下文模型估计的概率可以用一个有效的有限的特征值集合来表征。对于CABAC,对LPS有64个特征概率值。伸缩因子,N64一方面想要获得快速的自适应N要小;另一方面,如果想获得更加稳定更加精确的估计,则需要更大的N。注意在MQ编码

11、中,在CABAC方法中,不需要对LPS的概率值进行表格化。在算术编码中,每一个概率仅仅用其相关的索引作为地址。这样设计的结果导致,CABAC中的每一个上下文模型可以有两个参数完全决定:LPS概率当前估计值()和MPS的值(0或者1)。这样,在CABAC的概率估计中有128个不同的状态,每一个状态用一个7位整型数来表达。实际上,有一个状态的索引()与一个自治的非自适应的状态相关,它带有一个固定值的MPS,它仅仅在算术码字终止前用于编码二进制决定位(binary decisions).因此只有126个有效概率状态。1) 概率状态的更新对于一个给定概率状态,概率的更新取决于状态索引和已经编码的符号值

12、(MPS or LPS)。更新过程导致一个新的概率状态,潜在的LPS概率修正,如果有必要需要修改MPS的值。表格9-35显示的是编码MPS或LPS后的状态转移规则。对于I帧图像来说把状态控制在前24个内是有利的,因此,表9-35包含了独立的一列用作I帧图像。在编码一个MPS或者LPS后,概率估计自动从一个状态转移到另外一个状态进行自动更新,对于I帧图像来说,有: If (decision=MPS) State<-Next_State_MPS_INTRA(State) Else State<-Next_State_LPS (State)对于其他帧的图像来说,有: If (decisi

13、on=MPS) State<-Next_State_MPS (State) Else State<-Next_State_LPS (State)此外,当状态在0的时候(就是Plps=0.5), 如果编码得到的是一个LPS,那么LPS的概率就超过了原来MPS的概率,因此,LPS与MPS的值要进行交换。 二.算术编码器的总体描述算术编码器的情形是由一个指向编码子区间的V值和一个表示该区间长度的R值描述的。图9-3显示了编码的流程:对于编码器的初始化(InitDecoder),将在后文中谈到,其中V和R将被初始化。对于每一个编码决定的S(具体说编1或者0),有两个步骤。一是读取上下文模型,上文已经解决了该问题;二是根据上下文决定S的值,这将在后面给出。 A. 算术编码器的初始化初始化如图9-4所示,V是通过GetByte函数获得2个压缩数据的字节,R的初始化设置为0x8000。 关于GetByte函数:图9-7显示了压缩数据是如何输入的;首先,一个新的压缩数据的字节从比特串C中读取,然后指向当前比特串位置的CL增加1,比特计算器BG被设置成7 B. 编码决定图9-5显示的是一个编码决定,即决定具体编码的符号是MPS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论