前言
残差矩阵经过整数DCT变换后即需要对变换后的DCT系数进行量化操作。且注意:前期DCT变换
M
n
⋅
X
⋅
M
n
T
M_n·X·M_n^T
Mn⋅X⋅MnT已经优化成了整数DCT变换
C
f
⋅
X
⋅
C
f
T
⨂
S
f
Cf·X·Cf^T\bigotimes Sf
Cf⋅X⋅CfT⨂Sf,其中的
⨂
S
f
\bigotimes Sf
⨂Sf动作放到了量化的过程中实现。
规定
- QP是量化参数,是量化步长Qstep的编号,一共有52个
- Qstep为量化步长。Qstep越大,图像的压缩率越大,失真率越大;反之Qstep越小,图像压缩率越小,失真率越小
- 亮度块的QP最大值为52,而色度块规定最多只能有亮度块的80%,故QP最大值为39(明明52×0.8=41.6)
- QP+=6 -> Qstep*=2,即QP每增加6,Qstep就会翻一倍
- 编码器会根据图像的实际情况自动改变QP的值,进而改变Qstep
过程
- 一开始的量化操作是 Z i j = r o u n d ( Y i j Q s t e p ) Z_{ij}=round(\frac{Y_{ij}}{Qstep}) Zij=round(QstepYij),其中 Y i j Y_{ij} Yij为输入的DCT系数矩阵
- 加入整数DCT变换中的 ⨂ E f \bigotimes Ef ⨂Ef动作后,有 Z i j = r o u n d ( Y i j ⨂ E f Q s t e p ) Z_{ij}=round(Y_{ij}\bigotimes \frac{Ef}{Qstep}) Zij=round(Yij⨂QstepEf)
- 由于
1
Q
s
t
e
p
\frac{1}{Qstep}
Qstep1为除法运算,为了加速计算,我们将其简化为位移运算
令 M F = E f Q s t e p 2 q b i t s MF=\frac{Ef}{Qstep}2^{qbits} MF=QstepEf2qbits,其中 q b i t s = 15 + f l o o r ( Q P / 6 ) qbits=15+floor(QP/6) qbits=15+floor(QP/6)。我们绘制一张QP={0,1,2…51}
的MF表(Ef,Qstep和QP都已知,MF就已经确定了)。则 Y i j ⨂ E f Q s t e p = Y i j ⨂ M F 2 q b i t s Y_{ij}\bigotimes \frac{Ef}{Qstep}=Y_{ij}\bigotimes \frac{MF}{2^{qbits}} Yij⨂QstepEf=Yij⨂2qbitsMF,这样我们就将除法运算转换成了计算机容易处理的位移运算 Z i j = ( Y i j ⋅ M F + o f f s e t ) > > q b i t s Z_{ij}=(Y_{ij}·MF+offset)>>qbits Zij=(Yij⋅MF+offset)>>qbits,其中offset为偏移量,作用是改善恢复图像的视觉效果,例如对帧内预测图像块取 f = 2 q b i t s 3 f=\frac{2^{qbits}}{3} f=32qbits,对帧间预测图像块取 f = 2 q b i t s 6 f=\frac{2^{qbits}}{6} f=62qbits