VVC中的熵编码-JVET提案Q2002

3.6 熵编码
在VVC 中,与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。
在这里插入图片描述
  在VVC中,概率由概率索引pStateIdx线性表示。因此,所有的计算都可以用方程来完成,而不需要进行查找表操作。为了提高概率估计的准确性,采用了多假设概率更新模型。在二进制算术编码器的区间细分中使用的pStateIdx是两个概率pStateIdx0和pStateIdx1的组合。这两个概率与每个上下文模型相关联,并且以不同的adaptation rates独立地更新。每个上下文模型的pStateIdx0和pStateIdx1的adaptation rates基于相关联的bins的统计被预先训练。概率估计pStateIdx是来自这两个假设的估计的平均值。
  图45示出了用于在VVC中解码单个二进制决定的流程图。
在这里插入图片描述
  与HEVC一样,VVC 中CABAC也在每个slice的开始处调用依赖于QP的初始化过程。给定slice的亮度QP的初始值,表示为preCtxState的上下文模型的初始概率状态导出如下:
在这里插入图片描述
  其中slopeIdx和offsetIdx限制为3bits,总初始化值以6-bit精度表示。概率状态preCtxState直接表示线性域中的概率。因此,在输入到算术编码引擎之前,preCtxState只需要适当的移位操作,并且保存了对数到线性域的映射以及256字节的表。
在这里插入图片描述

3.6.2 变换系数水平编码
  在HEVC中,使用不重叠的系数组(CG或子块)对编码块的变换系数进行编码,并且每个CG包含编码块的4×4块的系数。在VVC中,系数组大小的选择仅依赖于TB大小,即消除了对信道类型的依赖。因此,各种CG(1x16、2x8、8x2、2x4、4x2和16x1)可用。根据预定义的扫描顺序对编码块内的CG和CG内的变换系数进行编码。为了限制每个像素的上下文编码bins的最大数量,使用TB的面积和颜色分量来导出TB的上下文编码bins的最大数量。对于亮度TB,上下文编码bins的最大数量等于TB_zosize 乘 1.75。对于色度TB,上下文编码箱(CCB)的最大数量等于TB_zosize 乘 1.25。这里,TB_zosize表示系数清零后TB内的样本数。请注意,CCB计数不考虑变换跳过残差模式中的coded_sub_block_flag。与针对变换系数水平的统计和信号特征设计残差编码的HEVC不同,对变换系数和变换跳过系数分别采用两种独立的残差编码结构。

3.6.2.1 变换系数的残差编码
  在变换系数编码中,首先将变量remBinsPass1设置为上下文编码的bins的最大数目,并且当发送上下文编码bin的信号时将其减1。当remBinsPass1大于或等于4时,在first pass coding中对包括sig_coeff_flag、abs_level_gt1_flag、par_level_flag和abs_level_gt3_flag进行常规编码。如果在first pass coding中上下文编码bins的数目不大于Mccb,则通过使用Golomb-Rice码和旁路编码bins,使用abs_reminder的语法元素来编码指示在first pass 中进一步编码的级别信息的其余部分。当在对first pass 中进行编码时,当remBinsPass1变得小于4时,在first pass 中指示要进一步编码的系数的其余部分利用语法元素abs_reminder进行编码,并且在second pass 中通过使用Golomb-Rice编码和旁路编码bins使用Golomb-Rice编码和旁路编码bins来直接对第一遍中未编码的系数进行编码,如图43所示,在第二遍中使用dec_abs_level语法元素来直接编码未在第一遍中编码的系数。针对每个TB重置remBinsPass1。对sig_coeff_flag、abs_level_gt1_flag、par_level_flag和abs_level_gt3_flag使用上下文编码bins的转换到对剩余系数使用旁路编码bins的转换在每个TB最多发生一次。对于系数子块,如果remBinsPass1小于4,则通过使用旁路编码bins对整个系数子块进行编码。在所有上述水平编码之后,最后对sig_coeff_flag等于1的所有扫描位置的符号(Sign_Flag)进行旁路编码。
  统一(相同) rice参数(RicePar)派生用于Pass 2和Pass 3。唯一的区别是Pass 2和Pass 3的baseLevel分别设置为4和0。不仅根据局部模板中相邻五个变换系数的绝对值之和来确定rice参数,而且还考虑了相应的基准值,如下所示:
在这里插入图片描述
在这里插入图片描述
  在第一子块遍历编码终止之后,由语法元素dec_abs_level对剩余的每个待编码系数的绝对值进行编码,该语法元素对应于修改的绝对级别值,其中零级值被有条件地映射到非零值。在编码端,语法元素dec_abs_level的值由绝对电平(AbsLevel)、依赖量化器状态(QState)和Rice参数的值(RicePara)导出,如下所示:
在这里插入图片描述
3.6.2.2 用于变换跳过的残差编码
  与HEVC类似,VVC支持变换跳过模式。亮度和色度块允许使用变换跳过模式。在变换跳过模式下,信号的统计特性与变换系数的统计特性不同,对这种残差进行变换以实现低频分量周围的能量压缩通常效果较差。具有这种特征的残差经常出现在屏幕内容中,而不是自然相机捕获的内容中。因此,在第3.9节中,变换系数编码的详细描述作为屏幕内容编码工具的一部分进行描述。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值