量化是指将信号的连续取值(或大量可能的离散取值)映射为有限多个离散幅值的过程,实现信号取值多对一的映射。量化不可避免地引入失真。量化器可分为标量量化器和矢量量化器。目前主流的图像、视频编码标准都使用了标量量化器。
一、标量量化
1、基本原理
标量量化是将一个幅值连续的信号映射成若干个离散的符号,如图所示,将横轴即输入信号划分为M个互不相交的区间(图中M=9):
Iq=[tq,t(q+1) ),q=0,1,…,M-1
tq为区间端点,称为量化器的判定边界。
对于每个区间,分别取点x ̂q作为输出值,也称重建值。
图1 标量量化器示意图
该标量量化器可以可做图2的(a),还有另一种表现形式,如(b)所示,输入信号经量化后映射为某些用于表示重建值的索引号l。l经过反量化过程后得到重建值x ̂。
2、均匀量化
均匀标准量化是将输入值域划分为等间距的区间,每个区间的输出值为该区间的中点,区间的长度称为量化补偿,用△表示。
Δ=(b-a)/M
a,b分别为输入信号的最小值和最大值。M为重建个数。
量化器输出为
x ̂i=(ti+t(i+1))/2,i=0,1,…,M-1
ti=a+i∙Δ
量化误差主要由三种衡量准则:均方误差(MSE)、信噪比(SNR)和峰值信噪比(PSNR)。
对于均匀分布的输入信号,若用MSE准则,则有MSE=Δ^2/12。
3、Lloyd-Max量化器(最优标量量化器)
最优标量量化器的必要条件为
上述两个式子表明判定边界点应位于相邻的两个重建值的重点,某一区间的重建值应为区间的“质心”。通常以迭代的形式求解,即Lloyd-Max算法,步骤如下:
4、熵编码量化器
Lloyd-Max量化器是在给定重建值数目M的约束条件下,使量化失真最小,若采用定长编码,则每个量化输出值需要的比特位数为R=[log2M]。若采用不等长编码,有R≈H(x ̂i)≤log2M,当且仅当所有输出值等概时,等号成立。
对于H(x ̂i)<log2M时,Lloyd-Max量化器不是最优的。此时最优量化器应是在对熵的约束下使失真最小。
通过推到可得熵编码量化器的最优重建值以及区间的划分方式为:
可见,熵编码量化器的各区间重建值依然是“质心”,但边界在Lloyd-Max量化器的基础上引入一个偏差,边界会像概率小的重建值方向偏移。
二、H.265/HEVC中的量化
1、量化
H.265/HEVC标准仅规定了反量化过程的实现方法,而将量化器的选择留给编码器自行决定。H.265/HEVC编码器可采用传统的标量量化方法,表示如下:
li=floor(ci/Qstep +f)
其中,ci表示DCT系数,Qstep表示量化步长,li为量化后的值,floor()表示向下取整。H.265/HEVC标准规定了52个量化步长,对应52个量化参数(QP),关系为
Qstep≈2^((QP-4)/6)
对于色差信号使用较大的量化步长会出现颜色漂移现象。因此H.265/HEVC标准将色差信号的量化参数限制为0-45;亮度信号QP小于30时,色差信号QP与前者相同;亮度信号QP为30-51时,二者对应关系如下表:
H.265/HEVC的量化公式为
对于I图像,f=1/3,对于P图像或B图像,f=1/6。
2、反量化
HEVC的反量化公式为
3、率失真优化量化(RDOQ)
在视频编码中量化器设计需要权衡失真与比特率,RDOQ就是这样的量化器。主要思想是将量化过程同RDO准则相结合,对于一个变换系数ci,给定多个可选的量化值li,k,并利用RDO准则选出一个最优的量化值,计算如下:
H.265/HEVC的官方测试编码器HM使用了RDOQ。主要的步骤如下:
(1)确定当前TU每个系数的可选量化值。用下式对当前TU的所有系数进行预量化。
|li |=round(|ci |/Qstep )
(2)利用RDO准则确定当前TU所有系数的最优量化值。按扫描顺序遍历当前TU所有系数,对于每一个系数,遍历其可选量化值,利用RDO准则确定每个系数的最优量化值。
(3)利用RDO准则确定当前TU每一个系数块组(CG)是否量化为全零组。
(4)利用RDO准则确定当前TU“最后一个非零系数”的位置。
4、量化参数
H.265/HEVC制定了灵活的QP控制机制,引入了量化组(QG)的概念,规定一个CTB可以包含一个或多个固定大小的QG,同一个QG内的所有含有非零系数的CU共享一个QP,不同的OG可以使用不同的QP
(1)QG的概念
QG是将一幅图像分成固定大小的正方形像素块,大小N由PPS指定,必须处于最大CU和最小CU之间。CU和QG没有固定的大小关系。
(2)QP的预测编码
H.265/HEVC中使用相邻已编码QG的信息来预测当前QG的QP,计算为:
predQP=(QPA+QPB+1)≫1
在某些情况A或B不存在的时候,进行特殊处理。
(3)CU层QP的解析
QP的解析需要QP的预测值和预测误差。
①预测QP(predQP)的获取
分两种情况:
当一个QG包含一个或多个CU时,该QG内所用CU都使用一个QP,即当前QG的预测QP;
当一个CU包含多个QG时,将该CU的第一个QG的预测QP作为当前CU的预测QP。
②QP预测误差(deltaQP)的解析
deltaQP表示QG层QP与其预测QP的差值,以CU为单元进行传递,只有非零系数的CU才会携带deltaQP的信息。解析也分两种情况:
当一个QG包含一个或多个CU时,deltaQP会在解码顺序的第一个含有非零系数的CU中传递;
当一个CU包含多个QG时,该CU只对应一个deltaQP,即该CU中第一个含有非零系数的QG所携带的deltaQP。
③QP的计算方法
slice层QP的计算需用用到初始QP(QPpps)以及slice层QP的偏移值(dQPslice),计算如下:
sliceQP= QPpps +dQPslice
亮度分量的QP计算如下:QPY=QPpps+dQPslice
两个色度分量的QPCb、QPCr计算如下:QPCb= QPY+pps_qp_offsetCb+slice_qp_offsetCb
QPCr= QPY+pps_qp_offsetCr+slice_qp_offsetCr
5、量化矩阵
量化矩阵是对不同位置的系数使用不同的量化步长。
(1)H.265/HEVC中的量化矩阵
H.265/HEVC的变换量化的过程如图2所示,量化矩阵作用于比例缩放的过程,其大小与TU相同。比例缩放过程中,变换后的DCT(或DST)系数将与量化矩阵中对应位置的系数相除,所得的结果作为量化模块的输入。
图3 H.265/HEVC的变换量化过程
H.265/HEVC标准允许使用两种形式的量化矩阵:默认量化矩阵和自定义量化矩阵。H.265/HEVC标准定义了44和88两种大小的默认量化矩阵,并规定了1616、3232量化矩阵可由88量化矩阵通过上采样得到,并且88分为帧内、帧间两种不同形式。
对于自定义量化矩阵,H.265/HEVC允许编码器根据不同的应用场合自行决定量化矩阵各元素的值,量化矩阵需要被写入码流传送至解码端,使用差分编码。