VVC变换编码

VVC的变换设计主要包含三方面:初级变换(primary transform)、二次变换(secondary transform)、变换划分(transform partitioning)。

VVC继承了部分HEVC变换编码特性,包括:

  1. 采用定点操作,数据中间值的表示和算术都保持为16bit;
  2. 变换过程既可以通过直接矩阵乘法实现,也可以通过快速方法,比如部分蝶形;
  3. 变换核通过缩放变换基为64√ N,并通过微调舍入到最近的整数,其中变换基的范数为1,N是变换尺寸;
  4. 小点数的DCT-2时大点数DCT-2的一部分,所以所有的DCT-2变换核都包含在64x64 DCT-2变换核中。虽然VVC允许的最大CB尺寸达到128x128,但为了适应VDPUS,限制为64x64。
  • 初级变换

  • 1、变换核 (Transform Kernels)

VVC中,除了常见的DCT-2以外,可选的变换类型包括DST-7和DCT-8,公式表示如下:

式中,N时变换尺寸,i=0,1,…,N-1对应输出向量中的元素索引,j=0,1,…,N-1对应输入向量中的元素索引。

对于不平滑的残差分布,DST-7和DCT-8比DCT-2更有效,因为前者的函数更符合这种不平滑的统计。DCT-2的尺寸范围从4点到64点,DST-7/DCT-8的尺寸范围从4点到32点(此处的N点对应NXN的矩阵块)。

为了与HEVC中每个系数最差的乘法过程保持一致,对于64点DCT-2和32点DST-7/DCT-8,分别只保持前面32个和16个低频系数,高频系数调零。这一点在进行last coeficeien position 编码和cg扫描时有所应用。

VVC中,初级变换指定为分离变换。支持五种不同的变换类型组合:传统的(DCT-2,DCT-2)和四种新的MTS模式组合,(DST-7,DST-7),(DST-7,DCT-8),(DCT-8,DST-7)和(DCT-8,DCT-8)。由于编码增益有限,而且引入额外的编码器搜索和额外的变换组合会增加复杂度,所以不支持DCT-2和DST-7(或DCT-8)之间带有额外指示信号开销的显式组合。对于VVC,DST-7和DCT-8在某些编码工具中应用在亮度块上,包括MTS,ISP和SBT。对于色度编码,在VVC的发展过程中,DST-7/DCT-8也展示了潜在的收益。但由于色度分量通常呈现光滑的纹理,相对于复杂度而言,编码收益甚微,此时使用DCT-2已经足够。

2、多变换选择(Multiple Transform Selection)

VVC包含两种MTS,显性MTS和隐性MTS。显性MTS可应用在帧内和帧间编码块,而隐性只应用在帧内编码块。显性MTS中,通过变换类型的指示信号表明对DST-7/DCT-8的选择。而在隐性MTS中,变换类型的选择基于编码信息,不需要信号指示。在序列参数集(SPS)中,有三个标记用来控制MTS操作:sps_mts_enabled_flag、sps_explicit_mts_intra_enabled_flag、sps_explicit_mts_intra_enabled_flag。在显性MTS中,CU的末尾会传递索引信号mts_idx,表明水平方向和垂直方向的变换类型,对应如下表。

只有当存在非DC系数外的亮度块的非零系数,且在左上角16x16区域外没有非零系数(DST-7/DCT-8只在16x16的低频区域内作用)时,才对MTS 索引进行指示。换句话而言,如果在16x16的低频区域外存在非零系数,则表明没有应用DST-7/DCT-8此外,当使能了ISP,SBT和LFNST时,不指示mts_idx,变换类型推测为DCT-2或预定义的变换类型。MTS,LFNST,MIP,ISP和SBT的组合如下表:

其中,Y/N表示能否组合,N/A表示不可用。

经过发展,隐性MTS中的变换选类型选择如下:

如果块宽度小于32,则水平变换应用DST-7,否则使用DCT-2;

如果块高度小于32,则垂直变换应用DST-7,否则使用DCT-2。

ISP块的变换推导也应用上述规则。

隐性MTS可视作HEVC帧间预测残差变换的拓展,DST-7的应用尺寸从4x4拓展至16x16。除了块尺寸上的限制外,隐性变换只会应用在LFNST和MIP索引为零时。

隐性MTS的优势如下:

  1. 虽然隐性MTS的编码增益不如显性,但在DCT-2上可以不借助任何编码器搜索而得到关键的编码收益。这一特点吸引了那些不能提供复杂率失真搜索功能的简易编码器。
  2. 隐性MTS提供了一个统一的变换推导规则,既适用于ISP,也适用于非ISP的帧内编码块;
  3. 由于隐性MTS中不允许尺寸超过16的DST-7变换,所以可省去32点DST-7的高频调零操作。
  • 二次变换

低频不可分离二次变换(LFNST),应用于左上角低频区域,且只针对初级变换是DCT-2的帧内编码块。LFNST中定义的变换核包含4个变换集,每个集对应两个核,选择48x16还是16x16的核取决于Tb尺寸。

当TB尺寸大于等于8x8时,对左上角8x8区域应用48x16核,记作LFNST8;

当TB的宽或高是4时,对左上角4x4区域采用16x16核,记作LFNST4。

  1. LFNST计算过程

LFNST的计算通过矩阵乘法实现,这有利于并行度。主要的思想即,缩减二次变换(Reduced Secondary Transform),通过RxN矩阵实现的由N维向量到R维向量的变换,R小于N,N/R称为缩减因子。缩减矩阵RxN用作正向变换核,其转置矩阵用于逆LFNST。缩减矩阵可以通过缩减矩阵维度来最小化计算复杂度和用于存储变换系数的存储空间。缩减因子越大,表明在计算和存储的使用上减少的复杂度越大。

VVC中的LFNST使用两种缩减因子来将最差情况下的计算复杂度限制为每个样本八次乘法,核的存储大小也由10KB缩减为8KB。

相对于48x48的矩阵LFNST8的缩减因子是3。使用LFNST8时,预定义的三个4x4块中的48个系数称为ROI8(Region of Interest for LFNST8),构成了输入向量。输入向量与16x48的缩减核矩阵相乘,得到了输出的16个系数。

对于LFNST4,对应的区称为ROI4,是左上角的4x4块。此外,对于4x4和8x8的TB,还有一个额外的缩减因子2(缩减倍数3x2)。这意味着,只有前8个系数需要计算。这样就将每个样本的最差乘法次数限制为了8。

下图a展示了应用16x48和8x48矩阵的正向LFNST8。16x48是缩减因子为3的变换核,8x48是附加额外缩减因子2的变换核。为了降低复杂度,当LFNST应用时,ROI8之外区域的系数均调零。输出长度为16或8的系数向量,用于量化和熵编码。对于只产生了8个输出系数的情况,即4x4 或 8x8的TB,第八个扫描位置之后的系数一定是零。因此,这种情况下,对于系数编码,最后一个非零系数限制在第八个扫描位置之内(与residual_coding中的LFNST部分对应)。图b是LFNST逆过程。更进一步说,对于dual tree,LFNST在亮度和色度块都有所应用。对于色度和亮度的LFNST索引分开指示。对于帧间slice(dual tree被禁用),则单个LFNST索引既用于亮度,也用于色度。对于single tree划分模式,不进行色度LFNST。

    8x8和4x4TB的乘法次数限制

对于8x8TB,采用LFNST8,对应16x48的缩减核。48个输入数据来自左上角8x8区域中的三个4x4块(除去右下角4x4)。为了限制每个像素的乘法次数小于等8,所以需要附加额外缩减因子2,则变换核成为8x48在这种情况下,最后一个关键系数的位置小于8。

对于4x4TB,采用LFNST4,对应16x16的变换核。16个输入数据来自左上4x4块中。与8x8TB面临的情况相同,为了限制乘法次数,需要进行缩减,采用8x16的变换核。

如果进行了ISP划分,则当在一个帧内编码单元内存在多个变换分区时,LFNST应用于所有的变换块,而且只传递一个LFNST索引。LFNST核的初始精度是10bit,但被量化为包含符号位的8bit整数。由精度改变造成的对编码性能的影响可忽略。

2、LFNST集选择

VVC中有四个LFNST集,对应lfnstSetIdx。集合的选择依赖于帧内预测的模式,即intraPredMode

针对每个集合,提供了三种配置:LFNST index等于0,表示未使用LFNST;等于1/2,表明使用了两个LFNST核中的一个。

3、LFNST索引指示

由于LFNST被限制使用在只有当第一个CG区域之外的系数都是非关键的时候,所以LFNST index 的编码取决于最后一个关键系数的位置。

只有当帧内编码块尺寸大于等于4x4时,才需要指示LFNST的索引。基于此,还需要考虑下述额外条件来决定LFNST的指示。

  1. 如果在调零区域发现非零系数,则不需要传递LFNST index,此情况下,LFNST被推测为未启用。
  2. 如果非零系数只出现在DC位置或者在相关彩色分量中不存在非零系数,则LFNST索引无需指示,除过ISP模式。
  3. 如果一个或者更多的颜色分量通过变换跳过方式编码,则不传递LFNST索引。
  4. 对于MIP模式编码的CU,如果宽或高小于16,则不指示LFNST。
  5. 如果CU的宽或高超过SPS中定义的最大变换尺寸,则不只是LFNST。

当LFNST index未被指示时,被推测未0,表示LFNST未应用。

  • 变换分区
  1. 子块划分SBT

帧间预测残差的分布不同于帧内。从统计学来看,帧间预测残差的大小预测块中心向边界递增。此外,在许多情况下,帧间预测残差位于块的一侧,而非遍布整个块区域。受到SVT(spatially varying transform)使用小变换块捕捉局部残差的启发,同时考虑到帧间预测残差的独特分布,提出了SBT方法并应用在VVC。

VVC中有八个SBT模式,变换块是整个残差块的一半或四分之一,如图阴影部分,剩余部分的残差不进行编码,视为零。SBT中,变换块只存在于残差块的一侧。

SBT的另一个特征是基于变换块位置的自适应变换核。举例说明,如果左侧被视为最佳的变换块(阴影部分),右侧包含更少的残差,则在水平方向使用DCT-8,比DCT-2更高效。反之,则使用DST-7。垂直方向上类似。注意,这种自适应变换核应用在亮度变换块上,色度变换块通常使用DCT-2。

VVC标准中,还有两种SBT模式,如图b。一种是变换块位于残差块中央,采用DST-1。另一种是变换块位于残差快的角落。但为了避免产生更复杂的SBT划分,引入额外的DST/DCT变换,这六种方式未在VVC中使用。

考虑到实现因素,SBT划分后的TU宽或高超过32时,水平和垂直变换都强制采用DCT-2这样就与VVC的设计原则——DST-7/DCT-8只应用在不大于32x32的块,保持一致。

2、隐性变换划分

VVC中,变换尺寸可达到64X64,这种情况只支持DCT-2。最大的变换尺寸可在SPS中设置为32或64。如果CU的宽或高大于最大变换尺寸,则需要进行水平或垂直划分,直到满足最大尺寸。比如,128x64的CB对于32的最大变换尺寸而言,需要按照4x2划分为8个变换块。

通过transform_skip可以实现VVC的无损编码,但该模式支持最大尺寸为32x32。所以,在最大尺寸为32的情况下,CB尺寸超过32才可以实现无损编码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值