H.266/VVC技术学习54:划分

1 图片被划分为CTU

图片被分为一系列编码树单元(CTU)。 CTU的概念与HEVC的概念相同。对于具有三个色彩通道的图片,CTU由N×N个亮度像素通道,以及两个相应的色度像素通道。下图显示了将图片分为CTU的示例。
最大亮度CTU为128×128(但最大亮度变换块TU大小为64×64)。
在这里插入图片描述

2 图片被划分为SubPicture、Slice、Tile

2.1 Tile、SLice、SubPicture的概念

一幅Picture分为一个或多个Tile行和一个或多个Tile列。
Tile是矩形的:是一系列CTU,覆盖了图片的矩形区域。
Slice是连续的:可以由整数个完整的Tile,也可以由Tile里有整数个连续完整CTU行组成。
SubPicture是矩形且是连续的:包含一个或多个Slice,这些Slice共同覆盖了图片的矩形区域。
VVC支持两种分区模式,即光栅扫描(即从上到下从左到右)分区模式和矩形分区模式,将在后文提到。

下图显示了图片的Subpicture分区示例,其中图片被划分为28个尺寸不同的子图片。
在这里插入图片描述

2.2 光栅扫描分区模式

在光栅扫描分区模式下,一个Slice多个完整Tile,并且Tile以光栅扫描排列。
下图显示了光栅扫描分区的示例,其中图片被分为12个Tile和3个光栅扫描切片。
在这里插入图片描述

2.3 矩形分区模式

2、在矩形分区模式中,Slice或包含多个完整Tile,或只包含Tile的多个连续完整CTU行,此时Tile以栅格扫描顺序扫描矩形中的Slice。
下图显示了图片的矩形分区模式Slice或包含多个完整Tile的示例,将图片分为24个Tile(6列,4行)和9个矩形Slice。
在这里插入图片描述
下图显示了一个Slice只包含Tile的多个连续完整CTU行示例,该图片被分为4个Tile(2列,2行)和4个矩形Slice。
在这里插入图片描述

3 CTU以树形继续向下划分

3.1 HEVC的划分方式

在HEVC中, HEVC结构的关键特征之一是它具有多个分区概念,包括CU,PU和TU。
CTU可以以四叉树形式划分为CU:将CTU分解为CU,以适应各种局部特征,在CU级别上决定帧内或帧间预测对图片区域进行编码。
CU可进一步划分为1个,2个或4个PU:可以根据PU划分类型将每个叶子。在一个PU内部应用相同的预测过程,并将相关信息以PU为基础传输到解码器。
CU还可以四叉树形式划分为TU:在通过应用基于PU划分类型的预测过程获得了残差块之后,用以做变换的单位即TU。

3.2 VVC的划分方式

在VVC中,具有使用二叉和三叉划分结构的嵌套多类型树的四叉树替换了多个分区单元类型的概念,即,它删除了CU,PU和TU概念的区别(但CU对于变换长度过大的情况除外),并支持CU分区形状的更大灵活性,CU可以具有正方形或矩形形状。

1、编码树单元(CTU)首先由四叉树(也称为四叉树)结构划分。
2、然后,可以通过多类型树结构进一步划分四叉树叶子节点(即1划分后的块)。如图7所示,多类型树结构中有四种拆分类型:垂直二进制拆分(SPLIT_BT_VER),水平二进制拆分(SPLIT_BT_HOR),垂直三元拆分(SPLIT_TT_VER)和水平三元拆分(SPLIT_TT_HOR),如下图所示。
在这里插入图片描述
这样就得到了CU,除非CU对于最大变换长度而言太大,否则CU直接可用于预测和变换处理,而无需任何进一步到PU或TU的划分。这意味着,在大多数情况下,CU,PU和TU具有相同的块大小。

3.3 编解码方式

下图表示了具有嵌套的多类型树编码树结构的四叉树中的分区划分信息的信令机制:
在这里插入图片描述
1、编码树单元(CTU)被视为四叉树的根,并且首先被四叉树结构划分。
2、然后,每个四叉树的叶子节点(当块足够大时)会被一个多类型的树结构进一步划分,方式如下 :
①用信号发送第一个标志(mtt_split_cu_flag),以指示是否进一步对节点进行了分区;
②当进一步对节点进行分区时,会发信号通知第二个标志(mtt_split_cu_vertical_flag),以指示划分方向,
③然后发信号通知第三个标志(mtt_split_cu_binary_flag),以指示拆分是二叉树划分还是三叉树划分。
④根据mtt_split_cu_vertical_flag和mtt_split_cu_binary_flag的值,得出CU的多类型树分割模式(MttSplitMode),如下表所示。
在这里插入图片描述

3.4 示例

图9显示了一个具有四叉树和嵌套的多类型树编码块结构的CTU,它分为多个CU,其中粗体块边缘代表四叉树划分,其余边缘代表多类型树划分。 具有嵌套的多类型树分区的四叉树提供了一个包含CU的内容自适应编码树结构。
在这里插入图片描述
CU的大小:最大与CTU一样大,或者以亮度样本为单位小至4×4。 对于4:2:0色度格式,最大色度CU大小为64×64,最小色度CU大小为2×2。
在VVC中,支持的最大亮度变换块为64×64,支持的最大色度变换块为32×32。 当CU的宽度或高度大于最大变换宽度或高度时,CU会自动划分变换大小限制。

3.5 高层参数及限制

由SPS语法元素(cfg)为具有嵌套多类型树编码树方案的四叉树定义和指定以下参数:
– CTU size:四叉树的根节点大小
– MinQTSize:允许的最小四叉树叶节点大小
– MaxBtSize:允许的最大二叉树根节点大小
– MaxTtSize:允许的最大三叉树根节点大小
– MaxMttDepth:从四叉树叶中拆分出的多类型树的最大允许层次深度
– MinBtSize:允许的最小二叉树叶子节点大小
– MinTtSize:允许的最小三叉树叶子节点大小

在具有嵌套的多类型树编码树结构的四叉树的一个示例中,将CTU大小设置为128×128亮度样本,并使用两个相应的64×64块的4:2:0色度样本,将MinQTSize设置为16×16中,将MaxBtSize设置为128×128,将MaxTtSize设置为64×64,将MinBtSize和MinTtSize(对于宽度和高度)设置为4×4,并将MaxMttDepth设置为4。
首先将其应用于CTU以生成第四级树叶节点。四级树叶节点的大小可以从16×16(即MinQTSize)到128×128(即CTU大小)。如果叶子QT节点是128×128,则由于大小超过MaxBtSize和MaxTtSize(即64×64),因此不会被二叉树进一步拆分。否则,叶节点可能会被多类型树进一步划分。
因此,四叉树的叶子节点也是多类型树的根节点,它的多类型树深度(mttDepth)为0。当多类型树深度达到MaxMttDepth(即4)时,不再进行拆分。

当多类型树节点的宽度等于MinBtSize且小于或等于2×MinTtSize时,不再考虑进一步的水平分割。
当多型树节点的高度等于MinBtSize且小于或等于2×MinTtSize时,则不考虑进一步的垂直拆分。
为了在VVC硬件解码器中允许64×64亮度块和32×32色度流水线设计,当亮度编码块的宽度或高度大于64时,或色度编码块的宽度或高度大于32时,不允许TT划分。
如下图所示:
在这里插入图片描述

3.6 帧内的色度独立划分

编码树方案支持亮度和色度具有单独的块树结构的能力。 当前,对于P和B切片,一个CTU中的亮度CTB和色度CTB必须共享相同的编码树结构。 但是,对于I切片,亮度和色度可以具有单独的块树结构。 当应用单独的块树模式时,亮度CTB通过一种编码树结构被划分为多个亮度CU,并且色度CTB通过另一编码树结构被划分为多个色度CU。 这意味着I帧中的CU可能由亮度分量的编码块或两个色度分量的编码块组成,而P或B切片中的CU总是由所有三种颜色分量的编码块组成。

4 CU在图片边缘的划分

如在HEVC中所做的那样,当树节点块的一部分超过图像下边界或右边界时,迫使树节点块继续分割直到每个编码CU的所有样本都位于图像边界内。 要服从以下划分规则:
1、如果树节点块的一部分超过了底部和右侧图片边界:
如果块是QT节点,并且块的大小大于最小QT大小,则将强制使用四叉树划分;否则,将强制二叉树垂直划分。

2、如果树节点块的一部分超出了底部图片边界:
如果块是QT节点,并且块的大小大于最小QT大小,并且块的大小大于最大BT大小,则将强制使用四叉树划分;
如果该块是QT节点,并且该块的大小大于最小QT大小,并且该块的大小小于或等于最大BT大小,则将强制使用四叉树或二叉树水平划分。
–否则(该块是BTT节点,或者该块的大小小于或等于最小QT大小),则强制使用二叉树划分。

3、如果树节点块的一部分超出了正确的图片边界:
如果块是QT节点,并且块的大小大于最小QT大小,并且块的大小大于最大BT大小,则将强制使用四叉树划分;如果该块是QT节点,并且该块的大小大于最小QT大小,并且该块的大小小于或等于最大BT大小,则将强制使用QT拆分该块拆分模式或二叉树垂直划分;否则(该块是BTT节点,或者该块的大小小于或等于最小QT大小),则强制使用二叉树垂直划分。

5 CU冗余划分的限制

具有嵌套的多类型树编码块结构的四叉树提供了高度灵活的块分区结构。 由于支持多类型树的划分类型,不同的划分模式可能潜在地导致相同的编码块结构。 在VVC中,不允许使用其中一些冗余拆分模式。
下图说明了二叉树拆分和三叉树拆分的冗余拆分模式。
在这里插入图片描述
如上图所示,在一个方向上的两个级别的连续二进制拆分可能具有与三进制树拆分和中央分区的二叉树相同的编码块结构。 在这种情况下,语法会阻止三叉树划分的中央分区的二叉树划分(沿给定方向)。 此限制适用于所有图片中的CU。
当如上所述禁止拆分时,修改相应语法元素的信令以解决禁止情况。 例如,当识别出图11中的任何情况时(即,对于中央分区的CU禁止二进制拆分),语法元素mtt_split_cu_binary_flag未被指定,而是指定该拆分是二进制拆分还是三元拆分。 由解码器推断为等于0。

6 虚拟管道数据单元(VPDU)

虚拟流水线数据单元(VPDU)在图片中定义为非重叠单元。在硬件解码器中,连续的VPDU由多个流水线级同时处理。在大多数流水线阶段,VPDU的大小大致与缓冲区的大小成正比,因此保持VPDU的大小很小很重要。在大多数硬件解码器中,可以将VPDU大小设置为最大变换块(TB)大小。但是,在VVC中,三叉树(TT)和二叉树(BT)分区可能导致VPDU大小增加。

为了将VPDU大小保持为64x64亮度样本,在VTM中应用了以下规范性分区限制(带有语法信令修改):
–对于宽度或高度或宽度和高度均等于128的CU,不允许进行TT拆分。
–对于N≤64(即宽度等于128而高度小于128)的128xN CU,不允许水平二叉树划分。
–对于N≤64(即,高度等于128,宽度小于128)的Nx128 CU,不允许垂直二叉树划分。
如下图所示:
在这里插入图片描述

7 色度划分和预测限制

由于帧内图片中的色度独立划分与亮度CTU相比允许在色度CTU中应用不同的划分方式,因此双树引入了更长的编码管线,并且色度树中的QTBT MinQTSizeC值范围以及MinBtSizeY和MinTTSizeY允许较小的色度块,例如2x2、4x2和2x4。这在实际的解码器设计中提供了困难。此外,一些预测模式(例如CCLM,PLANAR和角度模式)需要相乘。为了减轻上述问题,在双树中限制小的色度块尺寸(2×2/2×4/4×2)作为划分限制
在典型的硬件视频编码器和解码器中,由于相邻内部块之间的样本处理数据相关性,当图片的内部块较小时,处理吞吐量会下降。帧内块的预测器生成需要来自相邻块的顶部和左侧边界重构样本。因此,必须逐块顺序地处理帧内预测。
在HEVC中,最小的内部CU是8x8亮度采样。最小帧内CU的亮度分量可以进一步拆分为四个4x4亮度帧内预测单元(Pus),但是最小帧内CU的色度分量无法进一步拆分。因此,在处理4x4色度帧内块或4x4亮度帧内块时,会发生最坏情况的硬件处理吞吐量。在VVC中,为了提高最坏情况的吞吐量,通过限制色度内部CB的分区,不允许色度内部CB小于16个色度样本。在单个编码树中,最小色度帧内预测单元(SCIPU)被定义为其色度块尺寸大于或等于16个色度采样并且具有至少一个小于64个色度采样的子亮度块的编码树节点。要求在每个SCIPU中,所有CB都是内部的,或者所有CB都是非内部的,即帧内或块内复制(IBC)。在非内部SCIPU的情况下,进一步要求非内部SCIPU的色度不得进一步分割,而SCIPU的亮度应允许进一步分割。这样,最小的色度帧内CB大小为16个色度样本,并删除了2x2、2x4和4x2的色度CB。另外,在非内部SCIPU的情况下,不应用色度缩放。在此,没有信号通知其他语法,并且可以通过SCIPU中的第一亮度CB的预测模式来得出SCIPU是否是非内部的。如果当前切片是I切片,或者当前SCIPU在进一步分割一次之后(其中VVC不允许内部4x4),则当前SCIPU在其中具有4x4亮度分区,则将SCIPU的类型推断为非内部。否则,在解析SCIPU中的Cus之前,通过一个标志指示SCIPU的类型(内部或非内部)。另外,通过考虑图片的宽度和高度为max(8,MinCbSizeY)的倍数,可以考虑对图片大小进行限制,以避免在图片的一角出现2x2 / 2x4 / 4x2内色度块。

猜你喜欢

转载自blog.csdn.net/weixin_42979679/article/details/103672587
今日推荐