VVC/VTM的编码结构和块划分

本文参考了JVET-J1002:Algorithm description for Versatile Video Coding and Test Model 1 (VTM 1)

VVC的编码结构

VVC的编码结构和之前的标准相似,VVC有基于块的混合编码结构,包含了帧内、帧间的预测编码,以及变换编码和熵编码,下图展示了VVC编码的流程 。


VVC/VTM的编码结构和块划分_第1张图片

VVC块划分

图像将被划分成一系列的CTUs(coding tree units),在这里的CTU的概念和HEVC中是一致的,其中最大尺寸的亮度块在CTU中的尺寸是128×128,而最大的亮度变换块尺寸是64×64,一个CTU划分的例子:


VVC/VTM的编码结构和块划分_第2张图片

使用树形结构对CTUs进行划分

在HEVC中,编码树将会通过使用表示为编码树的四叉树结构将CTU分成CUs,以适应各种不同的局部特征。在叶子CU level使用帧间或帧内预测来决定是否对当前的图像区域进行编码。根据PU的划分类型每一个叶子CU可以进一步被划分成一个、两个或四个PUs。在一个PU内部,应用相同的预测过程,并且基于PU将相关信息发送到解码器。 在通过应用基于PU分裂类型的预测处理获得残余块之后,可以根据类似于CU的编码树的另一个四叉树结构将叶CU划分为变换单元(TU)。 HEVC结构的关键特征之一是它具有多个划分的概念,包括CU,PU和TU。
在VVC中,使用二叉树和三叉树的嵌套多类型树的四叉树分割结构取代了多个分区单元类型的概念,它消除了CU,PU和TU概念之间的鸿沟,除了对于最大变换长度尺寸太大的CU的需要,并且支持CU分区形状的更大灵活性。
首先,一个CTU被划分为四叉树结构,随后四叉树的叶子节点将被划分为多种类型的结构。如下图所示,有四种不同的划分类型:


VVC/VTM的编码结构和块划分_第3张图片

  • vertical binary splitting(SPLIT_BT_VER)
  • horizontal binary splitting(SPLIT_BT_HOR)
  • vertical ternary splitting(SPLIT_TT_VER)
  • horizontal ternary splitting(SPLIT_TT_HOR)

多类型的树形结构的叶子节点被称作为编码单元(CUs),并且除非CU的大小对于最大的变换长度来说太大了,否则将不再进行划分,对当前的分割进行预测和变换操作。这就意味着,在大多数情况下,CU、PU、TU在多类型的四叉树编码结构中拥有相同的尺寸,例外是在当最大支持变换的长度小于CU颜色分量的宽或高时。在VTM(Versatile Test Model)中,一个CU包含了一个亮度分量CB和两个色度CBs分量(除非视频是单色的,仅仅拥有一个颜色分量)。

在下图中显示了具有嵌套多类型四叉树编码结构的划分信息的信号机制。一个CTU被看作是树的根节点,首次划分时使用的是四叉树划分。每一个四叉树编码结构(如果足够大的话)将被继续嵌套的多类型树形结构继续划分。在多类型的树形结构中,第一个标志位(mmt_split_cu_flag)将被发送表明当前的节点是否需要继续划分,第二个标志(mmt_split_cu_vertical_flag)发送以表明划分的方向,第三个标志位(mmt_split_cu_binary_flag)被发送表明当前节点是被二分还是三分。基于mmt_split_cu_vertical_flag)mmt_split_cu_binary_flag的值,在下表中导出了多类型树形结构的划分模式。


VVC/VTM的编码结构和块划分_第4张图片

MttSplitMode mtt_split_cu_vertical_flag mtt_split_cu_binary_flag
SPLIT_TT_HOR 0 0
SPLIT_BT_HOR 0 1
SPLIT_TT_VER 1 0
SPLIT_BT_VER 1 1

在下图中展示了一个CTU使用嵌套的多类型树形编码结构划分为多个CUs,其中加粗的边表示的是四叉树划分,其他的表示的是多类型的树形划分。具有嵌套多类型树划分的四叉树提供由CU组成的内容自适应编码树结构。CU的大小可能和CTU一样大,也可能和4×4的亮度单元一样小,对于4:2:0的采样模式,最大的色度CB的大小为64×64最小的色度CB的大小为2×2
在VVC中,支持的最大的亮度TB大小是64×64,支持的最大的色度TB大小是32×32。当CB的宽或高大于小大的变换大小,CB将在水平和垂直方向被自动地划分,以达到TB尺寸的限制。


VVC/VTM的编码结构和块划分_第5张图片

以下参数由具有嵌套多类型树编码树方案的四叉树的SPS语法元素定义和指定:

  • CTU size:四叉树的根节点
  • MinQTSize:允许的最小的四叉树叶子节点的尺寸
  • MaxBtSize:允许的二叉树根节点的最大尺寸
  • MaxTtSize:允许的三叉树根节点的最大尺寸
  • MaxMttDepth:允许的从四叉树叶子中分割的多类型树的最大层次深度
  • MinBtSize:允许的最小二叉树叶子节点的尺寸
  • MinTTSize:允许的最小三叉树叶子节点的尺寸

[Ed. (JC): Currently, MaxTtSize is set sequal to MaxBtSize, and MinTtSize is set equal to MinBtSize]

下面举个例子:当采样格式为4:2:0的时,一个CTU的大小被设置为128×128的亮度分量和64×64的色度分量,MinQTSize被设置为16×16,MaxBtSizeMaxTtSize都被设置为64×64,MinBtSizeMinTtSize(对于宽和高)被设置为4×4,MaxMttDepth被设置为4。四叉树首先被被划分,生成四叉树的叶子节点,叶子节点的尺寸可能从16×16(MinQTSize)到128×128(CTU的尺寸)。如果叶子节点的大小是128×128,他将不会被划分为三叉树或者二叉树因为MaxBtSizeMaxTtSize的值是64×64。否则的话,四叉树的叶子节点能够更进一步地划分为多种类型的树。所以,此时的四叉树叶子节点同样作为多类型树的根节点,只是说其深度为(mmtDepth)0。当多类型树的深度达到了MaxMttDepth的时候,将不会被考虑继续划分。当多类型树的节点的宽度和MaxBtSize相等并且等于或小于2*MinTtSize时,不考虑进一步的水平划分。相似地,若多类型树的节点的高度和MinBtSize相等并且小于或等于2 * MinTtSize的时候,不考虑进一步的垂直划分。

限制多余的CU划分

嵌套的多类型四叉编码树结构提供了灵活的块划分方式。由于编码划分的多种类型,有可能不同的划分模式最终会得到相同的编码块结构。所以在VVC中,一些这样多余的模式将被避免发生。
在下图种展示了四叉树分割和两级二叉树分割之间的重复分割模式。 如图所示,两级连续二叉树分割可以产生与四叉树分割相同的编码块结构。 为了在这种情况下移除冗余,当允许使用四叉树分割父CU时,通过语法阻止针对第二分区的二叉树分割。 另一方面,对于在父级别不允许四叉树分割的情况,仍然可以使用模拟四叉树分割的连续二叉树分割。 更具体地说,在以下两种情况下,允许两级连续二叉树分割:

  • 如果四叉树叶子节点的块大小和MinQTSize相等,那么四叉树的划分将停止,并允许做进一步的多类型树划分
  • 如果多类型树的节点深度mmtDepth大于0(指的是多类型树的非根节点),那么四叉树划分将不被允许


VVC/VTM的编码结构和块划分_第6张图片

在下图示出了二叉树分裂和三元树分裂的冗余分裂模式。在一个方向上的两级连续二进制分裂可以具有与三元树分割相同的编码块结构,随后是中央分区的二叉树分割。 在这种情况下,通过语法防止三元树分割的中央分区的二叉树分割(在给定方向上)。 此限制适用于所有图片中的CU。


VVC/VTM的编码结构和块划分_第7张图片

在下图中,当相同的多类型树分割模式应用二叉树分割和三元树分割的不同排序时,发生冗余。 在这种情况下,语法阻止了为第二个分区分割的相应三元树。 此限制适用于P帧和B帧的CU。


VVC/VTM的编码结构和块划分_第8张图片

当如上所述禁止某些分割时,修改相应语法元素的信令以考虑禁止的情况。 例如,当识别出上图中的情况时(即,在某个方向上禁止对CU进行三元分割)时,不用信号通知指定分割是二进制分割还是三元分割的语法元素mtt_split_cu_binary_flag,而是由解码器推断为等于1。

你可能感兴趣的:(视频编码,VVC视频编码技术)