H.266/VVC技术描述_8-LMCS

  VVC在环路滤波前使用了luma mapping with chroma scaling (LMCS)工具,包括两个部分:1、使用分段线性模型对亮度映射。2、基于亮度值对色度分量参考缩放。下图表示了LMCS的结构,黄色块表示进行LMCS计算的块,紫色块表示在映射域(LMCS计算后)进行的模块,无色块表示在非映射域进行的模块。LMCS由一个SPS级flag控制开关。
H.266/VVC技术描述_8-LMCS_第1张图片
  对于帧间块,运动补偿后的预测值映射到映射域,帧内块本身在映射域因此不进行前向映射,计算出重建值后,再进行反映射回到原始域。

1、使用分段线性模型进行亮度映射-LM

  为了提高压缩效率,环内亮度映射对输入信号的分布进行调整,来调整码字动态范围。亮度使用了前向映射函数FwdMap和相应的反向映射函数InvMap,FwdMap函数使用16等分的分段线性模型表示,InvMap可以根据FwdMap推导出来。
  亮度映射模型在APS中编码,每个视频序列可以使用4个LMCS APS,每帧只能使用一个LMCS APS。分段模型分为16段,每段的参数使用此段码字的数量表示,例如一个10比特的输入,每段默认64个码字。码字数量用于计算此段的缩放尺度和调整此段的映射函数。在slice级使用一个flag表示是否使用LMCS,如果使用LMCS,使用一个aps_id来确定使用的APS。
  分段线性模型使用两个输入点InputPivot[]和两个输出点MappedPivot[]来确定,用SignalledCW[ i ]表示i段码字数量,那么计算方式为:
  1) OrgCW = 64
  2) For i = 0:16, InputPivot[ i ] = i * OrgCW
  3) For i=0:16, MappedPivot[i] is calculated as follows:
   MappedPivot[ 0 ] = 0;
   for( i = 0; i <16 ; i++)
   MappedPivot[ i + 1 ] = MappedPivot[ i ] + SignalledCW[ i ]
  前向和反向映射计算可以使用查表(look-up-table,LUT)获得。由于分段模型每段在原始域等分,因此计算映射时直接将输入右移可以得到时属于哪段,但是在映射域每段大小不同,因此反变换时需要较为复杂的计算来得出某个值属于哪个区域,从而增加了解码复杂度。VVC采取了以下限制,假设映射域范围时0-1023,首先范围被分为32等份,如果MappedPivot[ i ]不是32的倍数,MappedPivot[ i + 1 ]和MappedPivot[ i ]不能属于同一个32等分段(也就是说MappedPivot[ i + 1 ]必须增加大于等于32的值)。这样可以使用右移5位来判断数值属于哪一段。

2、基于亮度的色度残差缩放-CS

  色度残差缩放CS用来补偿亮度和对应位置色度的交互作用,如果亮度映射LM被使用,同样在slice级标识是否使用CS。另外区域小于等于4的色度块不适用CS。
  CS取决于当前虚拟流水线数据单元VPDU左方上方的重建亮度平均值avgYr,计算方法为,
  1、查找avgYr在亮度反映射函数InvMap中属于的段,标记为 YIdx
  2、CScaleInv = cScaleInv[ YIdx ], cScaleInv[] 为事先定义好的表LUT.
  如果当前CU时inter 128x128, inter 128x64或inter 64x128,第一个VPDU的CS缩放因子被用于所有色度变换块。对于整个色度块,CScaleInv是一个固定值。

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