H.266/VVC中的编码结构及块划分

将一帧图像划分成CTUs

VVC中一个视频帧被划分成许多CTU。CTU的概念和HEVC中相同。对于一个三通道的图像帧,一个CTU包含N×N个亮度样点及对应的两个色度样点块。即每个CTU的大小都相同。如下图所示:
在这里插入图片描述
VVC中亮度分量最大的CTU大小是128×128(HEVC是64×64)。需要注意VVC中最大的亮度变换块大小是64×64。

CTU的划分

在HEVC中,一个CTU通过四叉树结构划分成许多子CU,也被称为编码树(coding tree),这么做是为了针对不同的空间特性编码方式(帧内或帧间)能够做出调整。在子CU级决定是采用帧内编码(利用空间相关性)还是帧间编码(利用时间相关性)。

每个子CU可以被进一步划分成一个、两个或四个PU,取决于PU的划分类型。在一个PU内部的样点采用相同的预测方式,相关的预测结果也以PU为单位传输到解码端。在经过对PU的预测并得到残差信息后,一个子CU可以再被划分成若干个TU,这也是通过四叉树划分完成的。HEVC很关键的一个特性就是有多种划分概念:CU、PU和TU。

在VVC中没有了CU,PU和TU的概念,统一采用编码单元(coding unit,CU)的概念。除非是当前的编码块尺寸大于VVC所支持的最大变换的长度(也就是说这种情况下会对CU划分成TU)。同时采用内嵌多类型树的四叉树结构对CTU划分,支持更多形状的CU(除了方形还有矩形)。

CTU首先会进行四叉树划分,接着可以进一步使用多类型树划分(二叉、三叉)。多类型树结构共包含四种划分方式(见下图):竖直二叉划分(SPLIT_BT_VER),水平二叉划分(SPLIT_BT_HOR),竖直三叉划分(SPLIT_TT_VER),水平三叉划分(SPLIT_TT_HOR)。划分的子节点被称为CU。除非CU的尺寸大于最大变换所允许的长度,否则CU不会在预测和变换时被进一步划分成PU和TU。也就是说大多数情况下,CU、PU、TU的尺寸都一样。
在这里插入图片描述
下图解释了内嵌多类型树的四叉树结构划分机制。CTU首先被当作四叉树的根节点并进行划分。每一个四叉树的子节点都可以进一步通过多类型树(MTT)划分。首先通过标志(mtt_split_cu_flag)来表示是否会进行MTT划分。如果进一步划分,则通过标志(mtt_split_cu_vertical_flag)来表示划分的方向,并通过标志(mtt_split_cu_binary_flag)来表示是二叉划分还是三叉划分。上述两个标志就能确定MTT的划分类型。划分机制示意图如下:
在这里插入图片描述
由标志位得到MTT划分模式如下表:
在这里插入图片描述
下图是CTU划分成CU的示意图。边界加粗的块表示由四叉树划分得到,未加粗的表示由MTT划分得到。
在这里插入图片描述
内嵌MTT的四叉划分使得CU的形状更能适应图像的内容。CU的亮度分量尺寸最大可以和CTU尺寸相同,最小为4×4。如果是4:2:0的YUV序列,则色度分量的CB最大为64×64,最小为2×2。

在VVC中,亮度分量所支持的最大变换尺寸为64×64,色度分量所支持的最大变换尺寸为32×32。如果一个CB的尺寸超过限制,那么该CB会自动进行水平或(和)垂直划分以满足对应方向上变换尺寸的要求。

以下是SPS中有关内嵌MTT的四叉树划分相关的语法元素:

  • CTU size:四叉树根节点的尺寸
  • MinQTSize: 四叉树子节点所允许的最小尺寸
  • MaxBtSize: 二叉树根节点所允许的最大尺寸
  • MaxTtSize: 三叉树根节点所允许的最大尺寸
  • MaxMttDepth: 从一个四叉树子节点所能进行MTT划分的最大深度
  • MinBtSize: 二叉树子节点所允许的最小尺寸
  • MinTtSize: 三叉树子节点所允许的最小尺寸

接下来举例说明内嵌MTT的四叉树结构:
对于4:2:0的YUV序列,CTU的默认大小是128×128(即有一个128×128的亮度CTB和两个64×64的色度CTB),MinQTSize是16×16,MaxBtSize是128×128,MaxTtSize是64×64,MinBtSize和MinTtSize为4×4,MaxMttDepth是4。

首先CTU被四叉划分,四叉树的子节点的尺寸范围是从16×16 (MinQTSize) 到128×128 (CTU size)。如果四叉树子节点大小为128×128,那么它不会被进行二叉和三叉划分(因为超过了MaxBtSize和MaxTtSize,即64×64)。如果四叉树子节点大小不是128×128,那么四叉树子节点可以被进一步MTT划分,这种情况下,四叉树子节点也是MTT的根节点(mttDepth为0)。当MTT的划分深度到达MaxMttDepth(即4)的时候不会再有进一步划分。当MTT的节点宽度等于MinBtSize以及小于等于2 * MinTtSize时(个人理解这两个条件应该是分别用来限制是否再进行二叉划分和三叉划分的),也不会再进行水平划分。同理,当MTT子节点高度等于MinBtSize以及小于等于2 * MinTtSize时,不会再进行竖直划分。

同时为了VVC硬件解码器上64×64的亮度块和32×32的色度块能够实现管道设计,当亮度块的宽或高大于64时禁止进行三叉树(TT)划分。当色度块的宽或高大于32时也是禁止进行TT划分的。如下图:
在这里插入图片描述
在VTM3中,亮度分量和色度分量的块划分结构是可以不同的,现在(VTM4中),对于P slices和B slices,同一CTU中的亮度CTB和色度CTB必须有相同的划分结构,而I slices中的亮度和色度分量是可以有着独立的划分结构的。

当亮度和色度分量的划分结构不同时,亮度分量和色度分量使用两个编码树结构将CTB划分成CU。也就是说I slice中的CU可能仅包含一个亮度分量的CB,或者仅包含两个色度分量的CB。而P slice和 B slice中的CU始终会包含一个亮度分量的CB和两个色度分量的CB(对于三色彩分量的视频序列而言)。

发布了25 篇原创文章 · 获赞 46 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/huster1446/article/details/87907480