H.266/VVC技术学习55:熵编码

文章目录

  • 1 CABAC引擎
    • 1.1 HEVC的编解码引擎
    • 1.2 VVC的编解码引擎
  • 2 变换系数熵编解码
    • 2.1 普通变换系数的残差编码
    • 2.2 变换跳过系数的残差编码
  • 3 系数编码上下文模型

1 CABAC引擎

1.1 HEVC的编解码引擎

HEVC中的CABAC引擎使用基于表的概率转换过程,(在64个不同的代表性概率状态之间)。
在HEVC中,在计算新的range范围之前,将表示编码引擎状态的范围ivlCurrRange量化为4个值的集合。使用包含所有64x4x8位的表来实现HEVC状态转换,以近似ivlCurrRange * pLPS(pStateIdx)的值,其中pLPS是最小可能符号(LPS)的概率,pStateIdx是当前状态。
而且,可以使用LUT来实现解码。如下使用LUT获得第一ivlLpsRange。然后,使用ivlLpsRange更新ivlCurrRange并计算输出binVal

1.2 VVC的编解码引擎

在VVC中,CABAC在每个Slice的开头都调用了QP相关的初始化过程。给定切片的亮度QP的初始值,表示为上下文模型的初始概率状态,表示为preCtxState,计算方法如下
H.266/VVC技术学习55:熵编码_第1张图片
其中,slopeIdxoffsetIdx限制为3位,总初始化值由6位精度表示。概率状态preCtxState直接表示线性域中的概率。
因此,preCtxState在输入到算术编码引擎之前只需要进行适当的移位操作即可,并且可以保存对数到线性域的映射以及256字节的表。
H.266/VVC技术学习55:熵编码_第2张图片

2 变换系数熵编解码

在HEVC中,使用不重叠的系数组(CG或子块)对编码块的变换系数进行编码,并且每个CG都包含编码块的4×4块的系数。
在VVC中,系数组大小的选择仅取决于TB大小,即删除对通道类型的依赖性。所以各种CG(如1x16、2x8、8x2、2x4、4x2和16x1)都是可用的。

根据预定义的扫描顺序对编码块内的CG和CG内的变换系数进行编码。为了限制每个像素的上下文编码容器的最大数量,TB的面积和色彩分量用于得出TB的上下文编码容器的最大数量。
对于亮度TB,上下文编码的bin的最大数量等于TB_zosize x 1.75
对于色度TB,上下文编码容器(CCB)的最大数量等于TB_zosize x 1.25
其中,TB_zosize表示系数归零后TB内的样本数。

注意,CCB计数不考虑ts下的coded_sub_block_flag。与HEVC不同,在HEVC中,残差编码被设计用于变换系数幅值的统计和信号特性,而分别使用两个单独的残差编码结构分别用于变换系数和变换跳过系数。

2.1 普通变换系数的残差编码

在变换系数编码中,首先将变量remBinsPass1设置为上下文编码的bin的最大数量,并在发信号通知上下文编码的bin时将其减少1。

1、当remBinsPass1大于或等于4时,将使用上下文编码的bin对包括sig_coeff_flag,abs_level_gt1_flagpar_level_flagabs_level_gt3_flag在内的第一遍编码进行编码。
2-1、如果在第一遍编码中上下文编码的bin的数量不大于Mccb,则通过使用Golomb-rice码使用abs_remainder的语法元素对指示在第一遍中进一步编码的级别信息的其余部分进行编码和旁路编码。
2-2、当remBinsPass1在进行第一遍编码时变得小于4时,指示为在第一遍中进一步编码的其余系数部分将使用abs_remainder的语法元素进行编码,而在第一遍中未进行编码的系数通过使用Golomb-Rice编码和旁路编码的bin,在第二遍中使用dec_abs_level的语法元素直接对其进行编码。
每个TB都会重置remBinsPass1。对于sig_coeff_flagabs_level_gt1_flagpar_level_flagabs_level_gt3_flag使用上下文编码,到对其余系数使用旁路编码,每TB最多只能发生一次转换。
对于系数子块,如果remBinsPass1小于4,则使用旁路编码对整个系数子块进行编码。
3、在所有上述级别编码之后,最终旁路所有sig_coeff_flag等于1的扫描位置的符号。
H.266/VVC技术学习55:熵编码_第3张图片
统一的Rice参数可以用于Pass 2和Pass3。唯一的区别是Pass 2和Pass 3的baseLevel分别设置为4和0。Rice参数不仅根据本地模板中相邻五个变换系数的绝对level的总和确定,而且还考虑了相应的基本level:
在这里插入图片描述

2.2 变换跳过系数的残差编码

与HEVC相似,VVC支持TS模式。 在TS模式中,信号的统计特性与变换系数的统计特性不同,并且将变换应用于此类残差以实现低频分量周围的能量压缩通常不太有效。 与自然相机捕获的内容相反,通常在屏幕内容中发现具有此类特征的残差。

3 系数编码上下文模型

与变换系数级别的绝对值有关的语法元素的概率模型的选择取决于此区域中的绝对值或部分重构的绝对值。用于选择概率模型的模板如下图所示, 黑色方块指定当前扫描位置,蓝色方块表示使用的本地相邻像素。
H.266/VVC技术学习55:熵编码_第4张图片

所选择的概率模型取决于此相邻像素的绝对值(或部分重构的绝对值)的总和,以及相邻像素中大于0的绝对级别数(由sig_coeff_flag的数量等于1得出)。 上下文建模和二值化取决于当前块的以下条件:
numSig:当前块非零值数量;
sumAbs1:在本地邻居进行第一次通过之后,部分重构的绝对值的总和(absLevel1);
sumAbs:相邻块中重构的绝对值之和
•对角线位置(d):变换块内当前扫描位置的水平和垂直坐标之和
基于numSigsumAbs1d的值,选择用于编码sig_flagpar_flaggt1_flaggt2_flag的概率模型。基于sumAbsnumSig的值选择用于二值化abs_remainder的Rice参数。

VVC中,基于跳过高频系数的精简32点MTS(RMTS32)用于降低32点DST-7 / DCT-8的计算复杂性。并且,它伴随着考虑所有类型的零输出(即,RMTS32和DCT2中高频分量的现有零输出)的系数编码变化。具体地,基于减小的TU尺寸来对最后的非零系数位置编码的二进制化进行编码,并且对于最后的非零系数位置编码的上下文模型选择由原始TU尺寸来确定。另外,使用60个上下文模型对变换系数的sig_coeff_flag进行编码。上下文模型索引的选择基于最大五个先前部分重建的绝对级别之和,即locSumAbsPass1,如下所示
H.266/VVC技术学习55:熵编码_第5张图片

你可能感兴趣的:(H.266/VVC视频编码)