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

Quantize原理
- Quantization parameter and step
- Quantization在编码中的应用
- Quantization在编码中的实现
- Quantization在编码中,不同系数采用的方案
- Quantization在编码中,优化方案
- Quantization在编码中,涉及的码流参数
- Quantize原理
量化是指将信号的连续取值,映射为有限多个离散幅值的过程,实现信号多对一的映射。量化器主要分标量量化器和矢量量化器,我们视频编码标准使用的是标量量化器。

标量量化器示意图
其中,
为量化结果,即重建值。
视频编码量化的作用
视频编码过程中,残差信号经过DCT/DST变换后,变换系数具有较大的动态范围,需要对变换系数作二步操作:
- 通过量化器,有效的减小信号取值空间,获得数据量压缩。
- 建立量化值缩放后被映射成表示重建值的索引号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
对应关系
- QP是量化参数,是量化步长的序号;
- QP每增加6,QPstep
增加一倍; - QP取值为0时代表最精细的量化,取值越大,量化越粗糙。
- 量化步长QPstep
值范围在0.625~224,
Quantization在编码中的实现
- 为了避免浮点运算,将系数与量化步长做了一定程度的放大;
- 除法运算转换为移位运算,引入变量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过程:
- 基于量化步长对,当前TU所有系数进行预量化,并确定每个系数的可选量化值。
- 利用RDO准则确定当前TU所有系数的最优量化值。
- 4x4的系数块组,为一个CG(Coefficient Group), 确定当前TU每个CG是否可量化为全零组。确定方案为,全零CG的率失真代价与原率失真代价比较,如果代价小,则选全零CG为最优方案。
- 确定“最后一个非零系数”位置;基于RDO原则,将“最后一个预量化值大于2” 与“最后一个预量化值大于1” 之间的非零系数,当作最后一个非零系数,找出对应最小率失真代价的最后一个非零系数。


PS. 其他相关优化方案
量化过程优化,可有效抑制噪音;
量化过程优化,可有效提升图像质量;
Quantization在编码中,涉及的码流参数

PredQP计算,![]()


PPS/SLICE/MB:
