VVC中的熵编码-JVET提案N1002

3.6 熵编码
在VVC 的draft 4中,与HEVC中的设计相比,CABAC包含以下主要变化:

  • CABAC 核心引擎
  • 子块内经过 五次 四次 扫描的变换系数编码
  • 变换系数上下文建模

3.6.1 CABAC 核心引擎
   HEVC中的CABAC引擎在64个不同代表性概率状态之间使用基于表格的概率转换过程。在HEVC中,表示编码引擎状态的范围ivlCurrRange在计算新的间隔范围之前量化到一组4个值。 HEVC状态转换可以使用包含所有64x4x8 bit的预计算值的表格来实现,以近似于ivlCurrRange * pLPS(pStateIdx)的值,其中pLPS是最小概率符号(LPS)和pStateIdx是当前的状态的索引。
   在HEVC中,解码判决可以使用预先计算的LUT来实现。首先,使用LUT获取ivlLpsRange,如下所示。然后,ivlLpsRange用于更新ivlCurrRange并计算输出binVal。
HEVC中查表获取ivlLpsRange
  在VVC中,解码判决使用具有可变概率更新窗口大小的两状态模型。VVC 的CABAC引擎为每个CABAC上下文维持两个状态:pStateIdx0和pStateIdx1。根据这两种状态计算ivlLpsRange,而不是根据LUT查找:

VVC中通过pStateIdx0和pStateIdx1的计算来获取ivlLpsRange  然后,ivlLpsRange用于更新ivlCurrRange并以与HEVC相同的方式计算binVal结果。
  在VVC状态转换过程中,每个上下文模型的两个状态被更新如下:
VVC中两种状态的获取方式
  其中binVal是解码值,Shift0和Shift1是可变窗口大小参数。Shift0和Shift1的值取决于所使用的上下文模型,并且可以从查找表中取出。

3.6.2 变换系数级编码
  在HEVC中,使用不重叠的系数组(称为CG或子块)对编码块的变换系数进行编码,并且每个CG包含编码块中4×4块的系数。在VVC5中,系数组大小的选择仅依赖于TB大小,即消除了对信道类型的依赖。因此,各种CG(1x16、2x8、8x2、2x4、4x2和16x1)都可使用。根据预定义的扫描顺序对编码块内的CG和CG内的变换系数进行编码。可以将具有至少一个非零变换系数的CG的变换系数级别的编码分成多次扫描。在第一遍扫描中,对第一个bin(由bin0表示,也称为significant_coeff_flag即SCF,用于表示系数的大小是否大于0)进行编码。接下来,对上下文编码second/third bins(分别由bin1和bin2表示,也称为coeff_abs_greater1_flag和coeff_abs_greater2_flag)进行两次扫描。最后,如有必要,调用另外两次扫描用于编码符号信息和系数级别的剩余值(也称为coeffabs_level_restaining)。注意,只有前三次扫描中的bins以常规模式编码,并且这些bins在下面的描述中被称为常规bins。
  在VVC 3 5中,对于每个子块,按编码顺序分离常规编码bins和旁路编码bins;首先发送子块的所有常规编码bins,然后发送旁路编码bins。子块的变换系数通过五次扫描遍历进行编码,如下所示:

  • Pass1:按编码顺序处理 :编码有效标志(sig_flag)、大于1的标志(gt1_flag)、奇偶校验(par_level_flag)和大于2 3的标志(gt2 gt3_flag)的编码。如果sig_flag等于1,则首先对gt1_flag进行编码(指定其绝对值是否大于1)。如果gt1_flag等于1,则额外编码par_flag(它指定绝对值的奇偶性减去2)。
  • Pass2:对于gt3_flag等于1的所有扫描位置,处理剩余绝对电平(余数)的编码。用Golomb-Rice码对非二进制语法元素进行二值化,并且在算术编码引擎的旁路模式中对得到的bins进行编码。
  • Pass3:在第一次遍历(Pass)中没有sig_flag标志被编码时(由于达到常规编码bins的限制),那么其系数绝对值(absLevel) 会使用Golomb-Rice码在算术编码引擎的旁路模式下完全编码。
  • Pass4:对sig_coeff_flag等于1的所有扫描位置的符号(sign_flag)进行编码

  可以保证对于4×4子块,编码或解码的常规编码bins(sig_flag、par_flag、gt1_flag和gt3_flag)不超过32个。对于2x2色度子块,常规编码bins的数量被限制为8个。
  统一(相同)的rice参数(ricePar)派生用于Pass 2和Pass 3。唯一的区别是Pass 2和Pass 3的baseLevel分别设置为4和0。不仅根据本地模板中相邻五个变换系数的绝对值之和来确定rice参数,而且还考虑了相应的基准值,如下所示:
在这里插入图片描述

3.6.3 用于系数编码的上下文建模
  与变换系数水平的绝对值相关的语法元素的概率模型的选择取决于局部邻域中的绝对水平或部分重构的绝对水平的值。使用的模板如图43所示。
在这里插入图片描述
  所选择的概率模型取决于局部邻域中的绝对水平(或部分重构的绝对水平)和局部邻域中大于0的绝对水平的数目(由等于1的sig_coeffs_flag的数目给出)。上下文建模和二值化取决于局部邻域的以下特征:

  • numSig:局部邻域中非零系数的个数;
  • sumAbs1:在局部邻域第一次遍历后 ,部分重构的绝对水平之和(absLevel1);
  • sumAbs:局部邻域重建的绝对水平之和
  • diagonal position (d):变换块内当前扫描位置的水平和垂直坐标之和

  基于numSig、sumAbs1和d的值,选择用于编码sig_flag、par_flag、gt1_flag和gt2_flag的概率模型。根据sumAbs和numSig的值选择用于二值化abs_reminder的Rice参数。
  在VVC5中,采用基于跳过高频系数的简化32点MTS(RMTS32)来降低32点DST-7/DCT-8的计算复杂度。而且,考虑到所有类型的zero-out (即,RMTS32和DCT2中高频分量的现有零输出),它伴随着系数编码变化。具体地,基于缩小的TU尺寸来编码最后一个非零系数位置编码的二值化,并且最后的非零系数位置编码的上下文模型选择由原始TU大小确定。

  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值