H.266/VVC相关技术学习笔记14:色度残差联合编码技术

本文介绍了VTM5.0中新增的CbCr分量残差联合编码技术,通过将Cb和Cr残差求平均来减少信息损失,提升编码效率。在不同QP设置下,该技术对编码时间和色度PSNR的影响各异。

最近跟进了现有VTM5.0中关于色度残差编码的相关细节,在VTM5.0中新加入了CbCr分量残差联合编码的技术。

应该是研究统计发现,以往的版本中Cb和Cr残差彼此呈相反的关系,因此建议利用这种现象并引入一种用于色度残差的联合编码的模式。在这种联合模式中,对于TU的两个色度块只有一个残差。该联合的残差放置到Cb的预测块中,并从Cr的预测块中扣除(即Cr的预测快中没有残差数据,因此也不用进行变换量化编码)。在以前的色度残差编码中,CbCr块各自的残差放置在各自的预测块内,然后分别去变换量化编码。
如果Cb和Cr的编码块标志(CBF)是true,则联合残差模式开启。如果该模式启动,则解码单个残差块(即Cb块)。联合残差块的比特流语法和解码过程遵循VMT4.0中的Cb块残差。Cr块的残差是通过对联合残差取反生成的。

该模式的解码端中的实现如下:

New function:

  void CABACReader::joint_cb_cr( TransformUnit& tu )
  {  
  //解码传过来的残差码流
    tu.jointCbCr = m_BinDecoder.decodeBin( Ctx::JointCbCrFlag( 0 ) );
  }

Added in CABACReader::residual_coding:

  // Joint Cb-Cr residual mode is signalled if both Cb and Cr cfbs are true
  //如果CbCr的CBF都为ture,那么联合残差模式则开启
  if ( compID == COMPONENT_Cr && TU::getCbf( tu, COMPONENT_Cb ) )
  {
    joint_cb_cr( tu );
    
    // No Cr residual in bitstream in joint Cb-Cr residual mode
    if ( tu.jointCbCr )
      return;
  }

Added in DecCu::xIntraRecBlk and DecCu::xDecodeInterTU:

  // Cr uses negative of the signalled Cb residual
  if ( tu.jointCbCr && compID == COMPONENT_Cr )
  //对Cb预测块处的联合残差取反就能求出Cr预测块的残差
    piResi.copyAndNegate( cs.getResiBuf( tu.blocks[COMPONENT_Cb] ) );
  else

说了这么多,那么联合色度残差到底 怎么计算的呢?
其实很简单,如下公式所示,实际就是对Cb和Cr的残差求平均,相当于起到了平滑的效果:
resJoint = (resCb – resCr) / 2
式中之所以用减号,是因为Cb和Cr残差近似成相反的关系,且Cb残差为正,Cr残差为负。

下表总结了通用测试条件(CTC)和低QP下测试的结果。在低QP测试中,使用{ 2, 7, 12,17 }的QP集对100帧进行编码。
在这里插入图片描述在这里插入图片描述从以上两个测试结果显示,两种测试条件下的编码时间都有明显上升,每个点的残差平均操作提升了编码端复杂度,而且这种联合残差模式是和原来的单残差编码模式处于竞争的关系,因此会多一轮RDcost计算,所以编码复杂度肯定是有所上升的。
似乎对于更小的Qp,该方案对于色度的增益效果下降比较明显,QP越小,本身残差在变换量化过程中的损失就很小,因此色度单独编码和联合编码对色度PSNR的影响也比较相近,联合平均的操作带来的性能增益并不明显,甚至还有所下降,即使码率降低很多,也无法弥补色度PSNR的损失,但是解码端的解码时间降低比较明显;
对于CTC,由于大QP的色度残差在经过变换量化之后的损失就比较大,因此联合残差编码的平均操作能够在一定程度上弥补单独编码在量化过程中的一些信息损失,并且由于码率的降低,综合性能的色度增益就很明显
之所以要选择小QP估计是考虑到解码复杂度的问题,在性能和复杂度之间做的一个权衡,小的QP所带来的亮度增益还是可观的,色度上的损失也不是很多,同时解码端复杂度明显降低。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值