



随着硬件处理能力的大幅提升,AV1标准得以采用一系列先进的编码技术。AV1标准的制定特别考虑了高分辨率和超高分辨率视频编码需求的日益增长。为了更高效地处理高分辨率视频,AV1支持使用较大的编码块尺寸,这有助于提高运动补偿和变换编码的性能。同时,为了更精细地捕捉图像的细节,AV1也支持使用较小的块尺寸,以更好地适应图像的局部特征。AV1通过引入一种基于四叉树和多形态的编码块划分机制,允许对编码块进行多种形状的划分。这种灵活的划分方式使得AV1能够根据图像的具体内容,自适应地将图像划分为大小合适的编码块。这种基于内容的自适应块划分机制,使得AV1在保持编码效率的同时能够更好地捕捉图像的细节,从而在高分辨率和超高分辨率视频编码方面表现出色。
与H.264/AVC中的宏块(MacroBlock,MB)以及H.265/HEVC中的编码树单元(Coding Tree Unit,CTU)类似,超级块是尺寸固定的正方形块。尺寸固定是指在一个视频序列中,所有视频帧的超级块尺寸是相同的。AV1允许用户根据需求配置超级块的尺寸,超级块的尺寸可以是128×128 或64×64亮度像素
。这里需要注意的是,超级块的尺寸通常以其包含的亮度像素个数来表示,但超级块的实际组成包括一个亮度像素块和两个色度像素块。在4:2:0色度采样格式中,色度分量的水平分辨率和垂直分辨率分别是亮度分量的一半。这意味着,对于一个尺寸是
N
×
N
的亮度像素块,其对应的色度像素块尺寸将会是(
N
/2)×(
N
/2)。
为了表示整个视频序列中的超级块尺寸,AV1引入了序列级语法元素use_128x128_superblock。当语法元素use_128x128_superblock等于1时,表示超级块的尺寸是128×128。当use_128x128_superblock等于0时,表示超级块的尺寸是64×64。为了阐释超级块的划分方法,图3-2提供了一个示例。该图展示了一张分辨率为832×480的图片被划分成两种不同尺寸的超级块:图3-2a是64×64亮度像素的超级块,图3-2b是128×128亮度像素的超级块。
为了充分地挖掘视频帧的局部纹理特征,AV1引入四叉树(QuadTree,QT)和多形态划分机制,以把每个超级块分割成尺寸合理、形状合适的编码块。类似于HEVC的预测单元(Prediction Unit,PU),AV1以编码块为基本单元来进行帧内和帧间预测。也就是说,在AV1中,每个编码块使用相同的帧内预测模式或者帧间预测参数(如运动向量、参考帧索引等)来告诉解码器如何生成当前编码块的亮度像素和色度像素的预测值。为了能够根据超级块的纹理特征,自适应地把超级块划分成合适的编码块,AV1引入了10种块划分模式,其取值及含义如表3-1所示。它们分别是:
❍PARTITION_NONE:不再继续划分。
❍PARTITION_SPLIT:四叉树划分。
❍PARTITION_HORZ、PARTITION_VERT:长宽比是1:2或者2:1的矩形划分。
❍PARTITION_HORZ_A、PARTITION_HORZ_B、PARTITION_VERT_A、PARTITION_VERT_B:T形划分。
❍PARTITION_HORZ_4、PARTITION_VERT_4:长宽比是1:4或者4:1的矩形划分。
图3-2 分辨率为832×480亮度像素的图片的超级块分割示例
图3-2 分辨率为832×480亮度像素的图片的超级块分割示例(续)
表3-1 划分模式的取值及其含义
(续)
图3-3所示为每种划分模式的分割方式。图3-4所示为不同尺寸的四叉树节点的候选划分模式,其中128×128是四叉树的根节点。
图3-3 AV1中划分模式的分割方式
在所有划分模式中,只有使用划分模式PARTITION_SPLIT产生的子块才允许被继续递归地划分。使用其他划分模式产生的子块不能再被进一步划分。这里需要注意的是,虽然T形分割也会产生正方形块,但是这些正方形块是不允许被进一步划分的,例如128×128超级块利用T形划分模式PARTITION_HORZ_B生成一个128×64块和两个64×64块,虽然这两个64×64块是正方形块,但是它们也无法被进一步划分。作为特例,在AV1中,尺寸为128×128和8×8的编码块不能使用长宽比为1:4和4:1的划分模式,尺寸为8×8的块不能使用T形划分。所以,在图3-4中,128×128块没有长宽比为1:4和4:1的划分模式,而8×8块没有长宽比为1:4和4:1的划分模式以及T形划分模式。为了描述方便,PARTITION_SPLIT也称为 递归四叉树划分模式 ,其余划分模式统称为 多形态划分模式 。
图3-4 AV1中不同尺寸的四叉树节点的候选划分模式
为了清晰地描述AV1的块划分过程,本书约定,使用划分模式PARTITION_SPLIT产生的正方形子块称为四叉树节点。每个四叉树节点均是正方形块。表3-1定义的划分模式是每个四叉树节点的候选划分模式。一个四叉树节点使用PARTITION_SPLIT生成的子块称为该四叉树节点的子节点。四叉树节点对应一个图像区域,而不是编码块。四叉树节点使用多形态划分模式生成的子块才是编码块。因此,每个四叉树节点利用其候选划分模式可以生成多个编码块。在图3-4中,128×128节点共有17个编码块,每个64×64/32×32/16×16四叉树节点有25个编码块,每个8×8四叉树节点共有5个编码块,每个4×4四叉树节点共有1个编码块。在这种情况下,当超级块的尺寸是128×128时,所有四叉树节点将产生总数量是4421的编码块。其计算方法如下:按照四叉树划分模式,根节点128×128可以划分成4个64×64节点,或者划分成16个32×32节点,或者划分成64个16×16节点,或者划分成256个8×8节点,或者是划分成1024个4×4节点。由于128×128节点共有17个编码块,图中索引是0~16的编码块;每个64×64/32×32/16×16节点有25个编码块,图中索引为0~24的编码块;每个8×8节点共有5个编码块,图中索引为0~4的编码块;每个4×4节点共有1个编码块,因此所有编码块的数量为17+4×25+16×25+64×25+256×5+1024×1=4421。
这里需要注意,由于PARTITION_SPLIT和T形划分均会产生正方形编码块,所以,在AV1块划分过程中,不同的编码块可能表示相同的图像区域,这种现象通常被称为块划分的编码块冗余,如图3-5所示。一个四叉树节点(或者图像块)首先利用PARTITION_SPLIT产生四个子节点,然后上方的两个子节点分别使用PARTITION_NONE生成编码块A0和B0。同一个四叉树节点利用水平T型划分PARTITION_HORZ_A生成编码块A1、B1和C1。显而易见,编码块A0和A1表示相同的图像区域;编码块B0和B1也表示相同的图像区域。在编码器设计中,人们通常利用编码块冗余现象来加速块划分搜索过程。比如,如果编码块A0/B0已经通过模式决策和运动估计找到了最优模式和运动信息,那么,编码块A1/B1可以直接复用A0/B0的最优模式和运动信息来加速A1/B1的块划分搜索过程。
图3-5 AV1块划分过程中的编码块冗余
在超级块的递归划分过程中,AV1使用语法元素partition表示每个四叉树节点的最优划分模式,其取值为表3-1中给出的划分模式值0~9。为了表示超级块的划分过程,编码器首先在四叉树根节点(即超级块层)编码一个partition语法元素,表示该节点是利用PARTITION_SPLIT模式被分割成四个子节点,还是利用多形态划分模式被分割成一个或多个编码块。如果根节点的语法元素partition等于PARTITION_SPLIT,则继续为每个子节点编码一个partition语法元素,表示当前子节点是利用PARTITION_SPLIT模式继续被分割成四个子节点,还是利用多形态划分模式继续被分割成一个或多个编码块。这种递归划分过程一直持续到所产生的子节点不能继续细分为止。在递归划分过程中,当子节点的尺寸等于4×4时,则不再为该节点编码任何划分语法元素,而是强制这些块不会被进一步划分。
超级块内部的编码块以深度优先编码顺序进行编码,编码过程从四叉树的根节点超级块开始,沿着树的深度方向进行,即从上层到下层,逐个访问每个节点。这意味着在访问完一个节点的所有子节点之前,不会跳转到兄弟节点。深度优先编码顺序的流程如下:
1)从根节点(通常是超级块)开始。
2)如果当前四叉树节点采用四叉树划分模式,则按照从左往右、从上往下的顺序,以深度优先顺序递归遍历其各个子节点。
3)否则,如果当前四叉树节点的尺寸等于4×4,则把当前四叉树节点视为一个编码块,并处理该编码块。处理完毕后,回溯至上一层节点,并继续遍历下一个兄弟四叉树节点。
4)否则,即当前四叉树节点采用多形态划分模式,则按照从左往右、从上往下的顺序处理各个编码块。当所有编码块都处理完毕,回溯到其父节点,并继续遍历下一个兄弟四叉树节点。
图3-6为超级块的划分过程示意图及树状结构,其中图3-6a是超级块的划分过程示意图,图3-6b是对应的树状结构。图3-6a中的数字是每个编码块按照深度优先编码顺序的索引。图3-6b中的SPLIT、HORZ_B、HORZ_A、VERT_4、VERT以及NONE分别表示PARTITION_SPLIT、PARTITION_HORZ_B、PARTITION_HORZ_A、PARTITION_VERT_4、PARTITION_VERT和PARTITION_NONE。图3-6b中叶子节点下面的数字对应图3-6a中的编码块索引号。
这种深度优先编码顺序确保了每个编码块在开始编码之前,当前编码块上方和左侧的所有编码块都已经完成编码,因此该编码块可以利用其上方和左侧的重构像素进行帧内预测,也可以利用上方和左侧编码块的编码参数(如运动向量、参考帧索引等)来预测当前编码块的编码参数。
图3-6 超级块的划分过程示意图以及对应的树状结构
图3-6 超级块的划分过程示意图以及对应的树状结构(续)