当前位置: 首页 > news >正文

av1编码--超级块、编码块概念

目录

3.1 超级块和编码块

与 H.264/AVC、H.265/HEVC 和 VP9 相似,AV1 标准也遵循着以像素块为单位的预测 + 变换的混合编码框架。在这种框架下,输入图像首先被分割成一系列互不重叠的像素块。然后,每个像素块通过使用帧内预测模式或帧间预测模式来进行预测。在帧内预测或帧间预测中,原始像素块与其预测块之间的差值形成预测残差。预测残差经过变换、量化、熵编码形成码流输出。同时,变换量化后的预测残差进行反量化、反变换,与预测块相加即可得到像素块的重构值。当整帧中的所有像素块编码完成之后,整帧的重构像素值经过环路滤波器去除块效应,存储在解码图像缓冲区中用于后续帧进行帧间预测。 图3-1所示为AV1标准使用的混合编码框架,其中包含了AV1引入的高效灵活的编码块划分方案。

图3-1 AV1标准使用的混合编码框架

在 AV1 的块划分方案中,输入的视频帧首先被分割成尺寸相同、互不重叠的正方形块,这些正方形块通常被称为超级块(Super Block, SB)。超级块是第一层块划分结构的根节点。然后,沿着编码树结构,利用四叉树和多形态划分方式,超级块可以进一步被划分为不同大小和不同形状的编码块(Coding Block, CB)。在 AV1 中,编码块是进行帧内预测或帧间预测的基本单元。换句话说,编码器需要决定每个编码块是采用帧内预测还是帧间预测。当编码块采用帧内预测时,编码器需要为该编码块确定最优的帧内预测模式。当编码块采用帧间预测模式时,编码器需要为该编码块确定其最优运动信息,如运动向量和参考帧索引等信息。

在编码块级别对预测残差进行变换编码时,AV1 引入了预测残差块划分方案,以充分挖掘预测残差之间的空域相关性。也就是说,在预测残差的变换编码过程中,为了充分去除预测残差之间的空域相关性,AV1 允许预测残差编码块被进一步划分为多个变换块(Transform Block, TB)

本章深入探讨了 AV1 标准的块划分技术。3.1 节阐述了如何将图像分割成超级块,并将这些超级块进一步划分为编码块。3.2 节和 3.3 节讨论了与块划分相关的一些特定规则,这些规则的制定旨在简化硬件设计,降低其复杂性。3.3 节和 3.4 节介绍了如何把预测残差编码块进一步划分为多个变换块的过程。

3.1 超级块和编码块

随着硬件处理能力的大幅提升,AV1 标准得以采用一系列先进的编码技术。AV1 标准的制定特别考虑了高分辨率和超高分辨率视频编码需求的日益增长。为了更高效地处理高分辨率视频,AV1 支持使用较大的编码块尺寸,这有助于提高运动补偿和变换编码的性能。同时,为了更精细地捕捉图像的细节,AV1 也支持使用较小的块尺寸,以更好地适应图像的局部特征。AV1 通过引入一种基于四叉树和多形态的编码块划分机制,允许对编码块进行多种形状的划分。这种灵活的划分方式使得 AV1 能够根据图像的具体内容,自适应地将图像划分为大小合适的编码块。这种基于内容的自适应块划分机制,使得 AV1 在保持编码效率的同时能够更好地捕捉图像的细节,从而在高分辨率和超高分辨率视频编码方面表现出色。

与 H.264/AVC 中的宏块(MacroBlock, MB)以及 H.265/HEVC 中的编码树单元(Coding Tree Unit, CTU)类似,超级块是尺寸固定的正方形块。尺寸固定是指在一个视频序列中,所有视频帧的超级块尺寸是相同的。AV1 允许用户根据需求配置超级块的尺寸,超级块的尺寸可以是128×12864×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

为了充分地挖掘视频帧的局部纹理特征,AV1 引入四叉树(QuadTree, QT)和多形态划分机制,以把每个超级块分割成尺寸合理、形状合适的编码块。类似于 HEVC 的预测单元(Prediction Unit, PU),AV1 以编码块为基本单元来进行帧内和帧间预测。也就是说,在 AV1 中,每个编码块使用相同的帧内预测模式或者帧间预测参数(如运动向量、参考帧索引等)来告诉解码器如何生成当前编码块的亮度像素和色度像素的预测值。 为了能够根据超级块的纹理特征,自适应地把超级块划分成合适的编码块,AV1 引入了 10 种块划分模式,它们分别是:

  • PARTITION_NONE:不再继续划分。
  • PARTITION_SPLIT:四叉树划分。
  • PARTITION_HORZPARTITION_VERT:长宽比是 1:2 或者 2:1 的矩形划分。
  • PARTITION_HORZ_APARTITION_HORZ_BPARTITION_VERT_APARTITION_VERT_B:T 形划分。
  • PARTITION_HORZ_4PARTITION_VERT_4:长宽比是 1:4 或者 4:1 的矩形划分。

a)把图片划分成尺寸为64x64的超级块

图3-2分辨率为832x480亮度像素的图片的超级块分割示例

b)把图片划分成尺寸为128x128的超级块

图3-2分辨率为832x480亮度像素的图片的超级块分割示例

表3-1 划分模式的取值及其含义

模式取值

划分模式

含义

0

PARTITION_NONE

不再继续划分,整个块作为一个编码块

1

PARTITION_HORZ

沿着水平方向,把块划分成 2 个N × (N/2)

的编码块

2

PARTITION_VERT

沿着竖直方向,把块划分成 2 个(N/2) × N

的编码块

3

PARTITION_SPLIT

使用四叉树划分模式把块划分成 4 个(N/2) × (N/2)

的编码块

4

PARTITION_HORZ_A

水平 T 形划分,把块划分成 3 个编码块,上方是 2 个(N/2) × (N/2)

的编码块,下方包含 1 个N × (N/2)

的编码块

5

PARTITION_HORZ_B

水平 T 形划分,把块划分成 3 个编码块,上方包含 1 个N × (N/2)

的编码块,下方包含 2 个(N/2) × (N/2)

的编码块

6

PARTITION_VERT_A

竖直 T 形划分,把块划分成 3 个编码块,左侧包含 2 个(N/2) × (N/2)

的编码块,右侧包含 1 个(N/2) × N

的编码块

7

PARTITION_VERT_B

竖直 T 形划分,把块划分成 3 个编码块,左侧包含 1 个(N/2) × N

的编码块,右侧包含 2 个(N/2) × (N/2)

的编码块

8

PARTITION_HORZ_4

沿着水平方向,把块划分成 4 个N × (N/4)

的编码块

9

PARTITION_VERT_4

沿着竖直方向,把块划分成 4 个(N/4) × N

的编码块

图3-3所示为每种划分模式的分割方式。图3-4所示为不同尺寸的四叉树节点的候选划分模式,其中128x128是四叉树的根节点。

图3-3 AV1中划分模式的分割方式

在所有划分模式中,只有使用划分模式PARTITION_SPLIT(四叉树)产生的子块才允许被继续递归地划分。使用其他划分模式(多形态)产生的子块不能再被进一步划分。 这里需要注意的是,虽然T形分割也会产生正方形块,但是这些正方形块是不允许被进一步划分的,例如128x128超级块利用T形划分模式PARTITION_HORZ_B生成一个128x64块和两个64x64块,虽然这两个64x64块是正方形块,但是它们也无法被进一步划分。作为特例,在AV1中,尺寸为128x128和8x8的编码块不能使用长宽比为1:4和4:1的划分模式,尺寸为8x8的块不能使用T形划分。所以,在图3-4中,128x128块没有长宽比1:4和4:1的划分模式,而8x8块没有长宽比为1:4和4:1的划分模式以及T形划分模式。为了描述方便,PARTITION_SPLIT也称为递归四叉树划分模式,其余划分模式统称为多形态划分模式。

图3-3 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时,则不再为该节点编码任何划分语法元素,而是强制这些块不会被进一步划分。

超级块内部的编码块以深度优先编码顺序进行编码,编码过程从四叉树的根节点超级块开始,沿着树的深度方向进行,即从上层到下层,逐个访问每个节点。这意味着在访问完一个节点的所有子节点之前,不会跳转到兄弟节点。深度优先编码顺序的流程如下:

  • 从根节点(通常是超级块)开始。
  • 如果当前四叉树节点采用四叉树划分模式,则按照从左往右、从上往下的顺序,以深度优先顺序递归遍历其各个子节点。
  • 否则,如果当前四叉树节点的尺寸等于4×4,则把当前四叉树节点视为一个编码块,并处理该编码块。处理完毕后,回溯至上一层节点,并继续遍历下一个兄弟四叉树节点。
  • 否则,即当前四叉树节点采用多形态划分模式,则按照从左往右、从上往下的顺序处理各个编码块。当所有编码块都处理完毕,回溯到其父节点,并继续遍历下一个兄弟四叉树节点。

图 3-6 为超级块的划分过程示意图及树状结构,其中图 3-6a 是超级块的划分过程示意图,图 3-6b 是对应的树状结构。图 3-6a 中的数字是每个编码块按照深度优先编码顺序的索引。图 3-6b 中的SPLITHORZ_BHORZ_AVERT_4VERT以及NONE分别表示PARTITION_SPLITPARTITION_HORZ_BPARTITION_HORZ_APARTITION_VERT_4PARTITION_VERTPARTITION_NONE。图 3-6b 中叶子节点下面的数字对应图 3-6a 中的编码块索引号。

这种深度优先编码顺序确保了每个编码块在开始编码之前,当前编码块上方和左侧的所有编码块都已经完成编码,因此该编码块可以利用其上方和左侧的重构像素进行帧内预测,也可以利用上方和左侧编码块的编码参数(如运动向量、参考帧索引等)来预测当前编码块的编码参数。

图3-6超级块的划分过程示意图以及对应的树状结构

图3-6 超级块的划分过程示意图以及对应的树状结构

http://www.jsqmd.com/news/889221/

相关文章:

  • Unity 2022+ 安卓打包进阶:深度定制你的Gradle配置(从模板文件到实战避坑)
  • 如何轻松突破30+文档平台限制:免费下载工具kill-doc完整指南
  • 使用Taotoken后API调用延迟与稳定性体验分享
  • GraphRAG:知识图谱赋能生成式AI,突破传统检索局限,实现精准多跳推理与可解释生成!
  • 工业机器人网络安全漏洞披露现状与应对策略
  • Transformer 入门梳理:为什么大模型几乎都绕不开 Attention
  • 2026年武汉微电影制作公司TOP5权威排行榜,哪家才是你的心头好? - 企业推荐官
  • 从零封装:基于el-tree与穿梭框的树形穿梭组件实践
  • ARM架构系统寄存器与TLB维护指令详解
  • 从LSI到PMC:主流阵列卡管理工具实战指南与运维场景解析
  • 嵌入式Linux驱动开发——GPIO 子系统架构深度解析
  • 中小团队如何利用 Taotoken 统一管理多个项目的 AI 模型成本
  • 2026 AI学习机推荐来了:智能小初高机型深度解析 - 博客万
  • 如何快速部署nomic-embed-text-v1:文本嵌入模型的完整指南
  • 3分钟上手!XXMI启动器:免费开源的多游戏模组管理终极方案
  • 2026最新五家龙港市黄金回收白银回收铂金回收彩金回收店铺靠谱回收门店推荐TOP5排行榜及联系方式推荐 - 前途无量YY
  • 3分钟掌握DeTikZify:从草图到专业科学图表的AI魔法
  • 2026最新五家龙井市黄金回收白银回收铂金回收彩金回收店铺靠谱回收门店推荐TOP5排行榜及联系方式推荐 - 前途无量YY
  • 终极Switch游戏安装指南:Awoo Installer完整使用教程
  • 如何构建一个完全离线的Windows实时语音识别系统
  • Next.js集成Replicate AI:轮询与Webhooks实战及性能优化指南
  • 如何3分钟实现9大网盘下载加速:LinkSwift直链解析工具完全指南
  • 2026性价比高的GEO优化服务商推荐:性价比排名与选型指南 - 速递信息
  • 破解90%完成悖论:从认知偏差到系统实践的项目交付指南
  • 2026英语学习机推荐怎么选?中小学大屏护眼款全面盘点 - 博客万
  • Thorium浏览器终极指南:为什么这个基于Chromium的性能怪兽值得立即尝试?
  • 揭秘华润万家购物卡变现攻略:这些技巧你一定要知道! - 团团收购物卡回收
  • 口播文案转Remotion科普视频实战记录
  • 从闲置到现金:华润万家购物卡变现最全攻略 - 团团收购物卡回收
  • 2026最新五家龙口市黄金回收白银回收铂金回收彩金回收店铺靠谱回收门店推荐TOP5排行榜及联系方式推荐 - 前途无量YY