H.264/MPEG-4 Part 10 White Paper 译(四) Transform & Quantization

来源:互联网 发布:mac怎么放光盘 编辑:程序博客网 时间:2024/06/06 07:47

H.264/MPEG-4 Part 10 White Paper 译(四)

变换和量化

1.                  引言

联合视频工作组(JVT)正在定案一个新的自然视频图像编码(压缩)标准。新标准[1]被称为H.264或称作MPEG-4 Part 10、“高级视频编码(AVS)”。这篇文档描述了标准所定义或隐含的变换和量化过程。

 

每个残差宏块被传输,量化并编码。之前的标准如MPEG-1MPEG-2MPEG-4H.263使用了8X8离散余弦变换(DCT)作为基本变换。H.264的基本规范使用三种变换,采用何种变换取决于被编码的残差数据:(1)对宏块内部(以16X16模式预测)的亮度直流系数4X4数组进行变换。(2)对(任何宏块中的)色度直流系数2X2数组进行变换(3)对所有其它的4X4块的残差数据进行变换。如果使用了“自适应块大小变换”选项,则根据运动补偿块大小(4X88X48X816X8等等)选择更进一步的变换。

 

宏块中的数据以图Figure 1-1中所示顺序进行传输。如果宏块以16X16帧内模式编码,则标注为“-1”的块(包含每个4X4亮度块的直流系数)首先被传输。然后,亮度残差块0-15按所示顺序传输(16X16宏块内部直流系数被设为0)。块16和块17各自包含一个来自色度分量CbCr2X2排列。最后,色度残差块18-25(直流系数为0)被发送。

 

 

2.       4X4残差变换和量化(块0-15,18-25

在运动补偿预测和帧内预测后对4X4残差数据块(在Figure 1-1中标志为0-1518-25)使用这个变换。这个变换基于DCT但是有一些基本的区别:

(1)       它是一个整数变换(所有的操作可以用整数算术进行,没有降低精度)。

(2)       逆变换在H.264标准中已经被充分描述,如果这个描述被正确的继承,那么编码器与解码器之间不应该存在不匹配。

(3)       变换的核心部分是没有乘法的,即它只需进行加、减和移位。

(4)       一个缩放乘法(完整变换的一部分)被融入到量化器中(减少了总的乘法次数)。

 

变换和量化的整个过程可以使用16位整数算术来进行,并且每个系数只乘一次,没有降低精度。

2.1              4X4 DCT推出的整数变换

 

对一个输入阵列X进行4X4 DCT变换:

 

 

这里

 

 

这个矩阵乘法可以被分解成下面的等价形式(等式Equation 2-2)

 

 

 

CXC^T(CXC’)是一个“核心”2-D变换。E是一个比例因子矩阵,并且符号⊕(圆圈中实为X号)表示(CXC’)的每个元素与E中对应位置的比例因子相乘(用点乘代替矩阵乘法)。常量ab与之前值相等,d=c/b(近似于0.414).

 

为简化变换实现过程,d被近似成0.5。为了确保变换仍然正交,b也需要进行改变。所以

a=1/2   b=(2/5)^(1/2)   d=1/2

矩阵C的第2行和第4行和矩阵C’的第2列和第4列以一个2为比例因子缩放(乘以2)并且后缩放矩阵E也被按比例缩小来进行补偿。(这就避免了核心变换CXC’中乘1/2的运算,使得使用整数算术运算不会降低精度)。最终的变换变成:


 

这个变换是4X4 DCT变换的一个近似变换。因为改变了因子db,所以新的变换的输出不会与4X4 DCT变换完全相同。

 

逆变换的形式为:

 

 

这次,Y的每个系数与矩阵Ei中对应位置的合适加权因子相乘,以此来进行预缩放。注意矩阵CC’中的+/-1/2)因子;它们可以通过一个右移来实现并且不会造成明显的精度损失,因为Y已经经过了预缩放。

 

正变换和逆变换都是正交的,即T^-1(T(X))=X.

 

2.2                  量化

H.264使用了一个纯量量化器。它的定义和实现因为实际要求而变得复杂。它有以下要求:

1)避免除法和(或)浮点算术运算。

2)使上述的后缩放和预缩放矩阵EfEi中的因子统一。

 

基本的正变换量化器操作如下:

Zij = round(Yij/Qstep)

Yij是上述变换的一个系数,Qstep是量化步长,Zij是一个量化系数。

 

标准支持的量化步长有52种,量化步长根据量化参数QP建立索引。每个量化参数对应的量化步长的值如表Table 2-1所示。注意QP每增加6,量化步长约增加一倍;QP每增加1,量化步长增加12.5%.各种各样的量化步长使得编码器可以精确,灵活的在比特率和质量之间权衡。亮度和色度的QP值可能不同,虽然两个参数的变化范围都是0-51,但QPChroma是从QPy中得来的,QPcQPy小,QPy的值大于30。一个用户定义的QPyQPc之间的偏移量或许可以从一个图像参数集中得到。

后缩放因子a^2,ab/2b^2/4Equation 2-3)是正量化器的一部分。首先,输入块X经过变换产生一个系数未经缩放的块W=CXC’。然后,每个系数Wij被量化并且缩放(在单一操作中)。

 

PF根据位置(i,j)来决定是为a^2,ab/2 或是b^2/4(如式Equation 2-3所示):

--------------------------------------------

Position                            PF

--------------------------------------------

(0,0),(2,0),(0,2),(2,2)             a^2

(1,1),(1,3),(3,1),(3,3)             b^2/4

其它                                ab/2

------------------------------------------------------------------

因子(PF/Qstep)在H.264参考模型程序[3]中的实现方法是乘以MF(一个乘法因子)再进行一次右移,这样就避免了除法操作。

 

 

这里MF/2^qbits=PF/Qstep,qbits=15+floor(QP/6)

用整数算术,Equation 2-6可以用下述方法实现:

 

 

在这里>>代表二进值右移。在参考模型程序中,f在帧内块中等于2^qbits/3,在帧间块中等于2^qbits/6.

 

例:

QP=4,则Qstep=1.0

(i,j)=(0,0),PF=a^2=0.25

qbits=15,2^qbits=32768

MF/2^qbits=PF/Qstep,MF=32768 X 0.25/1=8192

根据QP和系数位置(i,j)值,MF的一组值(每组6个)如表Table 2-2所示:

 

 

 

 

Table 2-2 Multiplication Factor MF

 

Positions

Positions

 

QP

(0,0),(2,0),(2,2),(0,2)

(1,1),(1,3),(3,1),(3,3)

Other positions

0

13107

5243

8066

1

11916

4660

7490

2

10082

4194

6554

3

9362

3647

5825

4

8192

3355

5243

5

7282

2893

4559

表中第二列和第三列(因子为b^2/4ab/2的位置)的值对Equaton 2-6的结果做了些小的修改(因为只有逆量化过程被标准化,所以为提高解码器的可感质量而改变一个前置量化器是可以接受的)。

 

QP>5的时候,MF因子保持不变(以6为周期重复上表)但是QP每增加6,除数2^qbits增加一倍。例如,当6<=QP<=11时,qbits=1612<=QP<=17时,qbits=17等等。

 

 

2.3                  改变标度(逆量化)

逆量化操作如下:

 

Y’ij = Zij.Qstep

Equation 2-8

 

逆变换中的预缩放因子(矩阵Ei,对应于系数位置值分别为a^2,abb^2)也是这个操作的一部分,同时增加了一个为64的常量比例系数来避免舍入错误。

 

W’ij = Zij.Qstep.PF.64

Equation 2-9

 

比例系数W’ij随后使用“核心”逆变换(Ci’WCi: Equation 2-4)进行变换。逆变换的输出值被除以64来除去比例因子(这可以通过一次加法和一次右移来实现)。

 

H.264标准没有直接指明QstepPF,而0<=QP<=5时每个系数位置的参数V=Qstep.PF.64)被定义。逆量化操作为:

 

W’ij = Zij.Vij.2^floor(QP/6)

Equation 2-10

 

例:

QP=3,则Qstep=0.875,2^floor(Qp/6)=1

(i,j)=(1,2),PF=ab=0.3162

V=(Qstep.PF.64)=0.875X0.3162X65 =18(近似值)

W’ij=Zij X 18 X 1

 

0<=QP<=5V的值在标准中的定义如下表:

Table 2-3 Rescaling factor V

 

 

Positions

Positions

 

QP

(0,0),(2,0),(2,2),(0,2)

(1,1),(1,3),(3,1),(3,3)

Other positions

0

10

16

13

1

11

18

14

2

13

20

16

3

14

23

18

4

16

25

20

5

18

29

23

Equation 2-10中的因子2^floor(QP/6)使得重缩放输出以2为因子递增,QP每增加6,输出增加一倍。

 

3        4X4亮度DC系数变换和量化(只在16X16 帧内模式中使用)

如果宏块以16X16帧内预测模式编码(全部的16X16亮度分量根据邻近像素预测),每个4X4残留块首先经过上述的核心变换(CfXCf^T.然后每个4X4块的直流系数使用4X4 Hadamard变换进行再一次变换。

 

WD4X4直流系数块YD是变换后的块。输出系数YD(i,j)被除以2(四舍五入)

 

然后对输出系数YD(i,j)进行量化,产生一个量化的直流系数块:

 

|ZD(i,j)| = (|YD(i,j)|.MF(0,0) + 2f) >> (qbits+1)

sign(ZD(i,j)) = sign(YD(i,j))

Equation 3-2

 

其中,MFfqbits在之前定义,并且MF值和之前一样取决于它在4X4DC块中的位置(i,j

 

在解码器中,首先使用逆Hadamard变换,随后进行逆量化(注意顺序并没有像想像中那样进行反转)。

 

 

如果QP大于等于12,则逆量化过程如下:

 

W’D(i,j) = WQD(i,j).V(0,0).2floor(QP/6)-2

 

如果QP小于12,则逆量化过程如下:

 

W’D(i,j) = [WQD(i,j).V(0,0) + 21-floor(QP/6)]>>(2-floor(QP/6)

 

V定义同前。之后重建的直流系数W’D被分别插入到它们对应的4X4块中,并且每个4X4系数块使用核心DCT-based逆变换(Ci’W’Ci)。

 

在一个帧内编码宏块中,大部分能量集中在直流系数上,这个补充的变换起到对4X4亮度直流系数去相关的作用(即利用系数间的相关性)。

 

 

4.                  2X2色度直流系数变换和量化

宏块中的每个色度分量由44X4采样块组成。每个4X4块进行第2部分所述的变换。每个4X4系数块的直流系数被组合到一个2X2块(WD)并且在量化前进行进一步的变换。

 

 

2X2输出块YD的量化的实现如下:

 

|ZD(i,j)| = (|YD(i,j)|.MF(0,0) + 2f) >> (qbits+1)

sign(ZD(i,j)) = sign(YD(i,j))

Equation 4-2

其中MFfqbits定义如上文相同。

在解码过程中,在逆量化前进行逆变换:

 

 

QP大于等于6,则逆量化过实现如下:

W’D(i,j) = WQD(i,j).V(0.0).2^floor(QP/6)-1

QP小于6,则逆量化实现如下:

W’D(i,j) = [WQD(i,j).V(0,0) ]>>1

重建的系数分别替换到对应的4X4色度系数块中,然后做上文所述变换(Ci’W’Ci).和帧内亮度直流系数一样,这个补充的变换起到对2X2色度直流系数去相关的作用,以此来提高压缩效率。

5.                  完整的变换,量化,逆量化和逆变换过程

输入残留块X到输出残留块X’的整个过程如下所述,并在图Figure 5-1中描述。

编码:

1.输入:4X4残留块:      X

2. 正“核心”变换:          W=CfXCf’

(随后对色度直流系数或16X16帧内模式亮度直流系数进行进一步变换)

3.后缩放和量化:            Z=W.PF/(Qstep.2^qbits)

(对色度直流系数和16X16帧内模式亮度直流系数,此式做了修改)

解码:

(对色度直流系数和16X16帧内模式亮度直流系数做逆变换)

4.逆量化(融合了逆变换和预缩放):

              W’=Z.Qstep.PF.64

对色度直流系数和16X16帧内模式亮度直流系数,此式做了修改)

5.逆核心变换                   X’=Ci’W’Ci

6.后缩放:                       X’’=round(X’/64)

7.输出:4X4残留采样块:      X’’

 

 

 

例:(4X4亮度残留块,帧间模式):

QP=10

输入块X为:

 

 

核心变换的输出W为:

 


 

MF=819233555243(取决于系数位置)qbits=16。正量化器输出Z为:

 

 

V=16,2520(取决于系数位置),2^floor(QP/6)=2。逆量化输出W’为:


 

核心逆变换输出X’’ 64并取整后):

 

6.                  参考资料

1 ITU-T Rec. H.264 / ISO/IEC 11496-10, “Advanced Video Coding”, Final Committee Draft, Document JVTF100,December 2002

2 A. Hallapuro and M. Karczewicz, “Low complexity transform and quantization – Part 1: Basic

Implementation”, JVT document JVT-B038, February 2001

3 JVT Reference Software version 4.0, ftp://ftp.imtc-files.org/jvt-experts/reference_software/

 

原创粉丝点击