目录
3.4变换块划分
在预测残差的变换编码过程中,预测残差编码块可进一步被划分为多个变换块。通过使用不同大小的变换块,预测残差块划分能够使变换基函数适应残差信号特有的空域和频率特性。具体来讲,由于较大尺寸的变换块允许对预测残差的频率成分进行更完整的分析,所以较大尺寸的变换块能够捕捉到更多关于预测残差的频率内容信息,即较大尺寸的变换块具有较高的频率分辨率。但是,较大尺寸的变换块代表了图像中更大的区域,这意味着其中的变换量化系数对块内的空间变化不太敏感,从而导致空间分辨率降低。相反,较小尺寸的变换块代表图像中的较小区域,使它们对块内的空域变化更敏感,从而产生更高的空间分辨率,因此较小尺寸的变换块提供更好的空域分辨率,但其频率分辨率较低。
所以,在平滑区域,由于相邻像素之间存在高度相关性,因此预测残差通常较小,并且残差的分布和相关性也表现出高度一致性。在这种情况下,变换模块需要对预测残差块进行完备的频率成分分析。由于较大尺寸的变换块具有较高的频率分辨率,所以较大尺寸的变换块往往会取得更好的压缩效率。然而,在包含物体边界的图像区域,预测残差在物体边界附近往往出现突变。在这种情况下,变换模块需要能够捕捉到这种空域中的边界残差突变,而较小尺寸的变换恰好对残差块内的空域变化更敏感,因此较小尺寸的变换块可能具有更好的率失真代价。
图 3-10 为使用 SVT-AV1 编码器产生的预测残差的变换块划分示意图,其中黑色方形框和矩形框表示编码块区域,放大的图片展示了对应的变换块划分方式。从中可见,在物体边界区域,编码块往往被划分为多个变换块。

图3-10预测残差的变换块划分示意图
为了充分挖掘不同形状编码块的预测残差的相关性,AV1 引入了不同形状和不同尺寸的变换块。AV1 支持的最大变换块尺寸是 64×64,最小变换块尺寸是 4×4。除了正方形变换块之外,AV1 还支持长宽比为 1:2、1:4、2:1 和 4:1 的矩形变换块。因此,AV1 的变换块尺寸包含:
- 正方形变换块:TX_64×64、TX_32×32,TX_16×16、TX_8×8、TX_4×4。
- 长宽比为 1:2 的变换块:TX_32×64、TX_16×32、TX_8×16、TX_4×8。
- 长宽比为 2:1 的变换块:TX_64×32、TX_32×16、TX_16×8、TX_8×4。
- 长宽比为 1:4 的变换块:TX_16×64、TX_8×32、TX_4×16。
- 长宽比为 4:1 的变换块:TX_64×16、TX_32×8、TX_16×4。
为了进一步捕捉预测残差的空域和频域特性,AV1 支持把变换块进一步划分为多个更小尺寸的变换块。在划分过程中,变换块的划分方式由变换块的形状决定。表 3-2 所示为变换块划分中相邻层之间的映射关系,即如何根据当前层变换块的形状和尺寸确定下一层变换块。
表 3-2 展示的变换块的划分规则可描述如下:
- 如果当前变换块是正方形变换块,则该变换块将被划分为 4 个正方形变换块。
- 如果当前变换块是长宽比为 1:2 或 2:1 的矩形变换块,则该变换块将被划分为 2 个正方形变换块。
- 如果当前变换块是长宽比为 1:4 或 4:1 的矩形变换块,则该变换块将被划分为 2 个长宽比为 1:2 或 2:1 的矩形变换块。
变换块划分以初始变换块为划分起点,划分深度最多可达两层;而初始变换块由编码块的尺寸决定。具体来讲:
- 如果编码块的尺寸小于或等于 64×64,则初始变换块与编码块相同。
- 如果编码块尺寸大于 64×64(如 128×128、128×64、64×128),则把 64×64 变换块作为初始变换块,即 128×128、128×64 或 64×128 编码块被强制划分成多个 64×64 变换块,这一步划分不需要编码任何语法元素。
表3-2变换块划分中相邻层之间的映射关系
| 当前层的变换块 | 当前层变换块的大小 | 下一层的变换块 | 下一层变换块的大小 |
| TX_4×4 | 4×4 | — | — |
| TX_8×8 | 8×8 | TX_4×4 | 4×4 |
| TX_16×16 | 16×16 | TX_8×8 | 8×8 |
| TX_32×32 | 32×32 | TX_16×16 | 16×16 |
| TX_64×64 | 64×64 | TX_32×32 | 32×32 |
| TX_4×8 | 4×8 | TX_4×4 | 4×4 |
| TX_8×4 | 8×4 | TX_4×4 | 4×4 |
| TX_8×16 | 8×16 | TX_8×8 | 8×8 |
| TX_16×8 | 16×8 | TX_8×8 | 8×8 |
| TX_16×32 | 16×32 | TX_16×16 | 16×16 |
| TX_32×16 | 32×16 | TX_16×16 | 16×16 |
| TX_32×64 | 32×64 | TX_32×32 | 32×32 |
| TX_64×32 | 64×32 | TX_32×32 | 32×32 |
| TX_4×16 | 4×16 | TX_4×8 | 4×8 |
| TX_16×4 | 16×4 | TX_8×4 | 8×4 |
| TX_8×32 | 8×32 | TX_8×16 | 8×16 |
| TX_32×8 | 32×8 | TX_16×8 | 16×8 |
| TX_16×64 | 16×64 | TX_16×32 | 16×32 |
| TX_64×16 | 64×16 | TX_32×16 | 32×16 |
在 AV1 标准中,帧间编码块和帧内编码块采用不同的变换块划分方法,以适应它们各自的预测残差统计特性。具体来讲,对于帧内编码块的亮度分量,AV1 要求划分得到的所有变换块尺寸必须相同。帧内预测编码块的变换块划分方式如图 3-11 所示。

图3-11帧内预测编码块的变换块划分方式
从图 3-11 中可见,每一层划分生成的所有变换块的尺寸都相同。为了表示帧内编码块的变换块划分过程,AV1 编码器使用编码语法元素tx_depth来表示变换块划分深度,tx_depth取值为 0、1 或 2。这里需要注意的是,对于帧内编码块,当tx_depth=2 时,即需要做两层变换块划分,为了保证每个变换块具有相同的块大小,第一层划分产生的每个变换块都需要继续划分。例如对于一个 32×16 的编码块,第一层的变换块划分把 32×16 编码块分割成 2 个 16×16 变换块,第二层的变换块划分继续把每个 16×16 变换块分割成 4 个 8×8 的变换块,即共生成 8 个 8×8 变换块。
对于帧间编码块的亮度分量,它的每个变换块的尺寸可以不相同。因此,第一层划分产生的每个变换块可以独立地进行第二层划分。帧间预测编码块的变换块划分方式如图 3-12 所示,其中 R 表示继续划分的变换块。从中可见,帧间编码块中的每个变换块都可以选择继续划分或不再继续划分。换句话说,每个变换块仅仅根据自身的统计信息来决定是否继续划分,而不依赖于其他变换块。即使同一层的其他变换块没有继续划分,当前变换块也可以选择继续划分。这也是帧间编码块的变换块划分与帧内编码块的变换块划分的不同之处。为了表示帧间编码块的变换块划分过程,AV1 编码器需要为每个变换块编码语法元素txfm_split来表示当前变换块是否继续划分,txfm_split取值为 0 或 1。其中 0 表示不再继续划分,1 表示继续划分。

图3-12 帧间预测编码块的变换块划分方式
这里需要注意的是,只有当整个编码块包含非零变换量化系数时,AV1 才需要编码语法元素tx_depth或者txfm_split,以指明变换块的划分方式。如果整个编码块中的变换量化系数都是 0,则不需要编码语法元素tx_depth或者txfm_split。为了标识编码块是否包含非零变换量化系数,AV1 标准文档定义了语法元素skip。skip等于 0 表示当前编码块可能包含非零变换量化系数,skip等于 1 表示当前变换块不包含非零变换量化系数。因此,在 AV1 中,只有当语法元素skip等于 0 时,才需要编码语法元素tx_depth或者txfm_split;当skip等于 1 时,表示整个编码块中的变换量化系数都是 0,此时,不需要编码语法元素tx_depth或者txfm_split。
另外,色度分量的变换块一般不会被继续划分,即色度变换块与相应的色度编码块相同。但是,如果色度编码块的宽度 W 或高度 H 大于 32,该色度编码块会被强制划分成min(W, 32)x min(H,32)变换块,这一步划分不需要编码任何语法元素。

96

被折叠的 条评论
为什么被折叠?



