H.264 VS H.265 变换编码及量化过程分析(2)

量化是视频编码中产生失真的根本原因,它同时影响着编码质量和比特率。

Quantize原理

  1. Quantization parameter and step
  2. Quantization在编码中的应用
  3. Quantization在编码中的实现
  4. Quantization在编码中,不同系数采用的方案
  5. Quantization在编码中,优化方案
  6. Quantization在编码中,涉及的码流参数
  1. Quantize原理

 

量化是指将信号的连续取值,映射为有限多个离散幅值的过程,实现信号多对一的映射。量化器主要分标量量化器和矢量量化器,我们视频编码标准使用的是标量量化器。

标量量化器示意图

其中,为量化结果,即重建值。 

视频编码量化的作用

视频编码过程中,残差信号经过DCT/DST变换后,变换系数具有较大的动态范围,需要对变换系数作二步操作:

  1. 通过量化器,有效的减小信号取值空间,获得数据量压缩。
  2. 建立量化值缩放后被映射成表示重建值的索引号m,进一步减少编码数据。 m经反量化放大后,得重重建值。

 

                          Quantization parameter and step

关于量化步长及误差:

输入信号的最小值和最大值分别是a and b表示,重建值个数为M,则量化步长(Quantization Step)为:

 

 由上公式得,误差与量化步长的平方成正比。

 

优化方案:

给定重建值数目M的情况下,使量化失真最小,同时量化输出值所需比特最优,即量化输出值的熵约束下,使失真最小----率失真优化量化RDOQ

EG:取值概率大的量化重建值对应的量化区间增大,对应的重建值索引值少,可有效减少编码所需比特数。

EG:0值附近的系数概率较大,加宽以为0为中心的区间,可带来一定率失真性能的提高。

           

 

Quantization在编码中的应用

视频编码量化的实现:编码标准中规定了反量化过程的实现方式,量化器由编码器自行确定。

量化操作以TU为基本处理单元,对Y分量和UV分量分别量化,过程如下:

dij 为变换系数,QPstep为量化步长,lij为量化结果,f为舍入误差补偿系数。

 其中,量化步长QPstep视频标准(H264/265)中限定为52个数值:

 

QP与QPstep对应关系

  1. QP是量化参数,是量化步长的序号;
  2. QP每增加6,QPstep增加一倍;
  3. QP取值为0时代表最精细的量化,取值越大,量化越粗糙。
  4. 量化步长QPstep值范围在0.625~224,

 

Quantization在编码中的实现

  1. 为了避免浮点运算,将系数与量化步长做了一定程度的放大;
  2. 除法运算转换为移位运算,引入变量qbits以及MF;

考虑到定点DCT/DST的缩放因子,公式(1)可用下面的公式表示:

qbits=14+floor(QP/6)

其中: 

量化计算过程pseudo code:

if(mb_type == mb_I_16x16)  //AC

  {

    for(int k =0;k<16;k++)

    {

      int32_t level = coef[k+len_param];

      int64_t abs_level = (int64_t)abs(level);

      int32_t  sign;

      sign = (level < 0 ? -1 : 1);

      int32_t curr_quant_coeff = quant_coeff[0];

      level = (abs_level * curr_quant_coeff + QPConst ) >> siQbits;

      level *= sign;

      q_coef[k+len_param] = (coeff_t)(CLIP(-32768, 32767, level));

    }

  }

 

Quantization在编码中,不同系数采用的不同方案

1. 关于色度信号QP_C,为防止量化步长过大时引起重建图像漂移现象,将QP_C范围限定在在0~39。当色度QP_C取值与QP值由下表给出:(H264与H265,色度的对应关系略有不同)

2. 关于不同的帧类型,采用不同的偏移量,

 I slice,,P/B slice ,相对P/B 而言,I帧量化后,损失更少;

3. CHROMA中,DC/AC采用不同的量化方案;而LUMA中,DC/AC采用相同的量化方案。说明肉眼对颜色分量的细节不敏感。

CHROMA AC:

 

CHROMA DC:

level = (abs_level * curr_quant_coeff + 2*QPConst ) >> (siQbits+1);

4. DCT 尺寸不同,所用的量化方案不同

H264中,相对于DCT4x4而言,DCT8x8用到的f', qbits大于DCT4,显然DCT4x4采用的量化方案更精细。

   uint8_t siQbits    = transform8x8?(16+siQPper):(15+siQPper);

  int32_t QPConst=(block_type == CU_INTRA ? ((1<<siQbits)/3) : ((1<<siQbits)/6) ); 

Quantization在编码中,优化方案

 

蓝色圆点对应值,重建值可映射为x6orx5

 

率失真优化量化(Rate-Distortion Optimized Quantization,RDOQ),其主要将量化过程同率失真优化准则相结合,对于变换系数给定多个可选量化值,基于RDO准则从中选出最优量化值,公式如下: 

 

RDOQ过程:

  1. 基于量化步长对,当前TU所有系数进行预量化,并确定每个系数的可选量化值
  2. 利用RDO准则确定当前TU所有系数的最优量化值
  3. 4x4的系数块组,为一个CG(Coefficient Group), 确定当前TU每个CG是否可量化为全零组。确定方案为,全零CG的率失真代价与原率失真代价比较,如果代价小,则选全零CG为最优方案。
  4. 确定“最后一个非零系数”位置;基于RDO原则,将“最后一个预量化值大于2” 与“最后一个预量化值大于1” 之间的非零系数,当作最后一个非零系数,找出对应最小率失真代价的最后一个非零系数。

      

     PS. 其他相关优化方案

    量化过程优化,可有效抑制噪音;

    量化过程优化,可有效提升图像质量;

 

Quantization在编码中,涉及的码流参数

 

PredQP计算,

PPS/SLICE/MB:

 

 

 


版权声明:本文为biaobiao009原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。