AV1 变换编码
核心变换
AV1 变换用于预测残差的可分离的二维(2D)变换过程,以及支持的主要变换类型总结如下:
正向变换:首先对输入残差块的每个列进行一维(1D)垂直变换,然后对垂直变换的输出的每一行进行水平变换。
反向变换:首先对输入去量化系数块的每个行进行1D水平变换,然后对水平变换的输出的每个列进行垂直变换。
支持的变换类型:包括四种主要的变换类型:
- a) 离散余弦变换(DCT-2),有4点、8点、16点、32点和64点的版本。
- b) 非对称离散正弦变换(ADST),包括4点的DST-7和大于4点的DST-4,以及它们的翻转版本。
- c) 恒等变换(IDTs),有4点、8点、16点和32点的版本。
ADST的特殊说明:当变换大小为4点时,指的是DST-7;当变换大小大于4点时,指的是DST-4。
变换基底 :支持的变换类型的变换基底列在下表中
变换选择和信号
亮度色度分量在变换过程中的变换类型选择机制的总结如下:
变换类型选择:对于亮度分量,每个变换块可以从一组预定义的变换类型候选中选择一对水平和垂直变换。
信号传递:这种选择通常在比特流中明确信号传递,除非变换块的最大宽度或高度(max(W, H))等于64,在这种情况下,选择不进行信号传递。
变换块大小与候选集的关系:
- 当变换块的宽度或高度大于或等于32像素(max(W, H) ≥ 32)时,变换类型候选集取决于预测模式,并根据下表确定。
- 当变换块的宽度和高度都小于32像素(max(W, H) < 32)时,变换类型候选集同样取决于预测模式,但依据的是下表确定。
预测模式的影响:变换类型的选择依赖于预测模式,这意味着不同的预测模式可能对应不同的变换类型候选集,从而影响编码效率和图像质量。
变换类型候选集定义如下表 :
色度色分量在变换类型选择上的隐式过程,总结如下:
隐式选择过程:色度分量的变换类型选择不是通过比特流显式信号传递的,而是通过其他方式隐式决定。
内部预测残差:对于帧内预测残差,变换类型根据内部预测模式选择,具体的选择依据是下表中的规定。
间预测残差:对于帧间预测残差,变换类型不是独立选择的,而是根据对应亮度块(luma block)的变换类型选择来决定。
比特流中的信号传递:由于色度分量的变换类型选择是隐式的,因此在比特流中不需要对色度分量的变换类型进行信号传递。
下表提供了内部预测模式与变换类型之间的对应关系。
这种隐式选择机制简化了比特流中的数据量,因为色度分量的变换类型选择与亮度分量紧密相关,不需要额外的信号传递。
可以通过特定的优化减少大尺寸变换(例如64点变换)的计算成本,并介绍了DCT-2和ADST变换的实现方式。总结如下:
计算成本优化:为了降低大尺寸变换的计算成本,除了特定区域外,所有系数都会被清零。
保留区域:
- 对于64×64、64×32或32×64的DCT-DCT变换组合,只保留左上角的32×32象限的系数。
- 对于64×16的变换,只保留左侧的32×16区域的系数。
- 对于16×64的变换,只保留顶部的16×32区域的系数。
DCT-2和ADST的实现:DCT-2(一种离散余弦变换)和ADST(非对称离散正弦变换,包括DST-4和DST-7)都采用蝴蝶结构实现。
蝴蝶结构:蝴蝶结构包含多个阶段的蝴蝶运算,每个阶段的运算可以并行计算,然后按顺序串联进行。
参考文献:文中提到的[7]可能是指引用的文献或技术文档,提供了蝴蝶结构的详细信息。
这种优化方法可以显著减少不必要的计算,同时保持变换的有效性,特别是在处理大尺寸变换时。蝴蝶结构的使用则是一种高效的数学实现方式,广泛应用于各种变换算法中。
AV1 量化
AV1视频编码和解码过程中量化和去量化的详细步骤总结:
量化过程:
- 在编码器中,变换系数首先被量化。
- 量化后的系数经过熵编码后,通过比特流进行信号传递。
去量化过程:
- 在解码器中,从比特流解析出的系数被去量化。
- 去量化后的系数输入到逆变换过程中,以恢复出残差样本。
量化步长指定:
- 使用一个名为
base_q_idx
的语法元素在帧头中指定量化步长,它是一个8位的固定长度编码,用于指定亮度AC系数的量化步长,有效值范围是[0, 255]。亮度DC系数的量化:
- 相对于
base_q_idx
,亮度DC系数的量化步长差值(DeltaQYDc
)会被进一步信号传递。色度分量的量化:
- 如果存在多个色度平面,会信号传递一个标志
diff_uv_delta
,以指示是否应对Cb和Cr色度分量应用不同的量化步长。色度DC和AC系数的量化:
- 如果
diff_uv_delta
信号为0,只信号传递相对于base_q_idx
的色度DC(DeltaQUDc
)和AC(DeltaQUAc
)系数的差值。- 否则,会信号传递Cb和Cr DC(
DeltaQUDc
和DeltaQVDc
)以及AC(DeltaQUAc
和DeltaQVAc
)系数相对于base_q_idx
的差值。量化索引的计算:
- 解析出的差值(
DeltaQYDc
、DeltaQUAc
、DeltaQUDc
、DeltaQVAc
、DeltaQVDc
)将被加到base_q_idx
上,以得到量化索引。量化步长的映射:
- 量化索引根据适当的查找表映射到量化步长。
- 对于8位、10位和12位的内部比特深度,DC系数的映射由3×256查找表
Dc_Qlookup
指定,AC系数的映射由3×256查找表Ac_Qlookup
指定。查找表的使用:
- 查找表将量化索引映射到量化步长,确保不同比特深度的内部表示可以正确地量化和去量化。
图表说明:
- 图18和图19分别展示了DC和AC变换系数的量化索引到量化步长的映射关系。
这个流程确保了编码和解码过程中量化步长的一致性,并且允许对不同的系数应用不同的量化策略,以优化压缩效率和图像质量。去量化公式 :给定量化步长 Q~tstep~,输入的量化系数 f 通过以下公式进一步去量化得到输出的去量化系数 F:
其中,
sign
表示符号函数,%
表示取模运算,0xFF
表示十六进制的255。去量化常数
deNorm
:deNorm
是一个根据变换块面积大小确定的常数,用于调整去量化系数的幅度。
deNorm
的选择 :根据变换块的面积大小,不同变换块面积大小对应的deNorm
值:
- 当变换块面积小于512个样本时,
deNorm
为1。- 当变换块面积为512或1024个样本时,
deNorm
为2。- 当变换块面积大于1024个样本时,
deNorm
为4。无损编码模式:当量化索引为0时,使用量化步长为1进行量化,这是一种无损编码模式。
这种去量化方法确保了在解码过程中能够准确地恢复原始的变换系数,同时通过调整
deNorm
来适应不同大小的变换块,以保持去量化系数的动态范围和准确性。无损编码模式允许在特定情况下实现完全的数据恢复,尽管这可能会牺牲一些压缩效率。