H264-变换和量化

在早期的标准中,不同的处理步骤之间有明显的边界,对原始数据(或者残差)进行域变换,然后进行量化降低系数的精度,但是在H264中边界却不明显。为了消除浮点数DCT变换造成的误差累计,使用整数DCT变换,并且将放大系数移到量化阶段进行。

在DCT变换当中,存在有无理数系数。在不同精度的机器上的编码图像和解码图像之间,或者在同一个编码器的重建图像之间,会出现误差漂移和累计。h264通过下面的两个方法解决这个问题:

  • 使用核变换,是整数DCT变换,只需要使用整数和定点数运算
  • 使用最少的乘法优化量化操作

基本流程

h264标准中定义了反量化,反系数放大和反变换的过程,相应的正变换没有标准化,但是可以从标准中定义的操作中推导出来。
H264-变换和量化
基本变换是整数变换,整数变换是一种经过系数放大和整数近似的DCT变换,对44或者88的残差数据进行变换。直流系数变换使用哈达玛变换。最后经过系数放大和量化。解码端是这个过程的逆向过程。

H264-变换和量化

亮度分量变换过程

默认处理过程

H264-变换和量化
在除了下面两种情况下都使用默认处理过程。

  1. 16 × 16 Intra Prediction
  2. High profiles 8 × 8 整数变换

对1616 残差宏块内每一个44 子宏块做core transform Cf4,然后对每一个4*4宏块做Scaling和quantization Mf4,获得量化系数块,量化系数块在生成bitstream时使用标号的顺序。
H264-变换和量化
逆过程如上图所示。

Intra 16 × 16 mode

H264-变换和量化
如果宏块使用的是1616帧内预测模式,那么就是用上面的变换过程。使用另外的变换对44block中的直流系数进行变换。1616的残差数据经过划分成44block经过整数变换获得变换系数。从16个block中提取出DC系数组成新的44数据block,直流系数高度相关对这一部分进行重新编码能获得更好的效果,这里使用44哈达玛变换。变换后的DC系数和AC系数一起经过
经过放大和量化,在bitstream中传输顺序如标号所示。
逆过程如下图:
H264-变换和量化

色度分量变换过程

4:2:0 色度分量变换过程

色度分量4:2:0格式下,一个宏块16 * 16的亮度sample对应有一个8* 8个Cb数据的宏块和8 * 8 Cr数据的宏块。
H264-变换和量化
Cb Cr两个8 * 8大小的宏块,每一个划分为4个44大小的宏块,经过Cf4 整数变换,获得变换系数block,从两个88 大小的系数block中

相关文章:

  • 2022-12-23
  • 2021-05-09
  • 2021-10-11
  • 2021-09-13
  • 2021-06-20
  • 2021-08-19
猜你喜欢
  • 2021-05-05
  • 2022-01-07
  • 2021-07-08
  • 2021-11-25
  • 2021-09-23
  • 2021-04-19
  • 2022-12-23
相关资源
相似解决方案