多媒体通信技术基础
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第4章 视频数据的压缩编码

4.1 基于帧的视频编码

本节介绍基于帧的视频编码和解码。这类编、解码方法以视频帧为基本编码单元,综合利用了第3章中介绍的第一代压缩编码技术,并为多数现行的国际标准所采用。在4.1.1和4.1.2节中我们介绍基本的编、解码方法;在4.1.3~4.1.6节中介绍各种提高编码性能的优化技术;而4.1.7节则给出典型的编码码流的层次结构。

4.1.1 典型的编码器与解码器

一个典型的视频编码器和解码器方框图如图4-1所示,它包括具有运动补偿的帧间预测、DCT变换、量化、熵编码,以及与固定速率的信道相适配的速率控制等几个部分,用以在保证图像有满意的质量的前提下,最大限度地压缩码率。由于图4-1所示的编码器采用了多种压缩编码技术,所以常被称为混合(Hybrid)编码器

图4-1 典型的视频编码器和解码器

对视频图像的压缩编码通常是分块进行的。如图4-2(a)所示,将一帧图像首先分成若干条(Slice),或称,每条又分成许多块。对于4∶2∶0格式来说,亮度图像块所包含的像素数目一般为16×16,对应的色度块像素数为8×8。一个亮度块及其对应的两个色信号块构成一个基本处理单元,称为宏块(Macroblock),标为MB[见图4-2(b)]。每一条所包含的宏块数可以是不相同的,每一帧划分的条数也视具体应用而定。

现在来讨论编码器的基本工作原理。

图4-2 条与宏块

1.图像信号的预处理

图像信号的预处理过程如图4-3所示。

图4-3 图像信号的预处理

模拟R、G、B信号首先经过8比特或10比特的A/D变换变成数字信号,然后分别进行γ校正。根据2.2.4节介绍的内容将R、G、B信号转换成亮度信号和色差信号,并按(2-24)式至(2-26)式得到Y、Cr和Cb。我们在这里和以后都将Yd简称为Y。

由于人眼对色差信号高频分量的敏感程度比对亮度的低,在信号变换到Y、Cb和Cr空间之后可以用数字滤波器将Cb、Cr的带宽限制到Y信号带宽的1/2。然后对于4∶2∶0的格式,在垂直和水平方向上进行2∶1的抽取,这样得到的色信号矩阵的样点数只是Y矩阵的1/4。

2.运动估值/补偿

为了消除帧间冗余信息,编码器采用了具有运动补偿的帧间预测(见图4-1下部的虚线框)。在运动估值部分,当前帧的亮度图像bk被分成16×16的块,然后利用块匹配方法在参考帧中找到每个块bk(Z)的最佳匹配块,从而估计出每个块的位移矢量值。在匹配过程中,参考帧内的搜索范围根据不同的应用而定,例如可以取±128(H)×±32(V),这里的H和V分别表示垂直方向和水平方向。当参考帧为前一帧bk-1时,进行的是前向预测;参考帧为后一帧bk+1时,则进行的是后向预测。关于何时进行前向预测、何时进行后向预测,下面将要详细讨论。

利用每个块的位移矢量D,可以从参考帧得到经过运动补偿的当前块的预测值。在当前块和预测块的差值图像(或称为位移后的帧间差DFD)中,时间冗余信息已经大大减少,但还可能保留着空间冗余信息。为了降低空间冗余度,将在后续步骤中对DFD进行DCT变换和量化。运动估值中用到的参考帧是在经过反量化和反DCT恢复出之后,与(或)相加得到的。上述带有的符号表示该量引入了量化误差。同时,在3.5.2节中介绍块匹配方法时已经讲过,位移矢量必须伴随着DFD送到接收端,接收端才能从已接收帧中恢复出当前帧来。图中标出此支路直接进入熵编码模块。

按上述方法编码的块通常称为帧间编码块(Inter MB)。但是在有些情况下,如场景切换时,帧间预测误差很大,此时图像块可以不进行预测编码,而直接进行DCT变换和熵编码,这样的块称为帧内编码块(Intra MB)。在采用帧间预测编码的一幅图像中,如果某一块的预测误差很大,对该块也可以采用帧内编码。对于帧内编码块,可以看成其预测值为0。

3.DCT变换

在3.6节中讲过,图像经DCT变换以后,DCT系数之间的相关性已经很小,而且大部分能量集中在少数的系数上。只传送这部分系数给收端,既可以降低数据率,而又不至于使图像有明显的损伤。从原理上讲我们可以对整幅图像进行DCT变换,但由于图像各空间位置上细节的丰富程度不同,这种整体处理的方式效果不好。为此,采用了将宏块再分成8×8的子块、对每个子块进行DCT的办法。这种处理方法称为块DCT。位于细节丰富区的子块,可以保留较多的DCT系数;而细节不丰富的子块,则保留较少的系数。采用块DCT的办法不仅便于每个子块根据各自的图像特点进行独立处理,而且降低了运算量和对存储空间的要求。

对色信号的处理与上面讨论的对亮度信号的处理方法类似,只是对色信号Cb、Cr不做运动估值,而是直接使用同一宏块中的亮度块的位移矢量作为色信号子块的位移矢量。根据这些位移矢量对Cr和Cb进行具有运动补偿的帧间预测,然后对预测差值图像进行块DCT变换。

4.量化

在量化之前,所有的处理都没有涉及到信息的损失(除了在DCT变换中,系数值受有限字长影响而引入的舍入误差外),只是改变了对图像的表示方式而已,即将原来用R、G、B三个基色表示的图像信号,改用亮度/色度分量与其预测值之间的差值、运动矢量和空间频率分量等物理量来表示。在这些新的表示方式中,对图像质量影响大的信息集中到了少数的量上,以便于我们将这少数至关重要的量选择出来加以传送,达到降低数据率的目的。

量化是编码器中唯一产生信息损失的地方。通过量化,保留下重要的DCT系数,将其数值进一步离散化,并将不重要的DCT系数量化到零。这是对数据进行压缩的很重要的一步。经过DCT变换后,系数之间的相关性已经很小,因此可以用各自独立的量化器分别进行量化。对于DC分量,由于帧内编码相邻块的直流分量之间有很强的相关性,因而相邻块的DC分量在采用DPCM后(见4.1.3节),用8比特均匀(最小熵)量化器量化。其他系数也采用均匀量化器,但对不同的DCT系数根据其重要程度的不同采用不同大小的量化台阶。例如,低频系数的量化台阶较小,而高频系数的量化台阶则选得比较大。实现对不同系数使用不同量化台阶的最简单的方法是,将每个系数除以不同的权值,然后统一地采用同一个量化器进行量化。权值的大小由人的视觉对该频率分量的敏感程度确定。8×8个权值构成一个矩阵,称为量化矩阵

图4-4(a)和(b)分别给出了帧内编码子块和帧间编码子块的量化矩阵的例子。对于只进行帧内编码的子块,DCT系数值对应于该图像块的空间频率谱,因此,图(a)所示量化矩阵中低频系数的权值较小,而高频系数的权值较大。而对于帧间编码的子块,由于帧间预测误差的DCT系数与原图像的空间频率谱关系很小,因而其直流和交流分量均采用相同的量化器量化。

图4-4 量化矩阵

5.从二维矩阵到一维序列的转换

DCT系数矩阵在量化之后已经变得很稀疏,相当多的系数已量化到零,只剩下低频系数和少数的高频系数。为了进行熵编码,我们将按图4-5(a)所示的之字形顺序,将二维的系数矩阵转化成一个一维的数据序列。图中所示的扫描顺序,首先经过低频再到高频。这样,重要的系数多数都集中在序列的开始。当扫描到高频区域遇到若干个零之后才有一个非零值时,为了记录该非零值的位置,该值前面的零的个数用游程编码表示。当剩下的所有系数均为零时,用符号EOB(End Of Block)来代表序列的截止。以这种方法可以将64个系数有效地排列成一个短序列,而每一个系数则用一个数组(run,level)来表示,其中run表示系数在矩阵中的位置,level表示它的值。例如,(3,-6)代表这个系数前面有3个零,它的值为-6。

图4-5 DCT系数的扫描顺序

对隔行扫描的图像进行编码时,由于相邻扫描行来自不同的场,如果在一场时间内物体的位置有明显的移动,垂直方向上的相关性会降低,导致该方向空间频率分量的幅值下降较慢,之字形的顺序就不是最佳的了。这时可以采用图4-5(b)所示的交替扫描方式,这种方式优先扫描了垂直方向的系数。

另一种处理办法是,为了增加垂直相关性,在做DCT之前,先取奇数场的8行,再取偶数场的8行,分别作8×8的DCT,这时仍可采用图(a)方式进行扫描。在解码时,经过IDCT以后再恢复正常的行顺序。

6.熵编码

已经在第3章中讲述过,熵编码是实现无损数据压缩的一种重要方法。可以采用霍夫曼编码,也可用采用算术编码来消除上面所形成的一维序列(包含DCT系数的位置和幅度信息)中的统计冗余信息,给序列中的每个符号指定一个码字,从而产生编码器输出的比特流。

从3.10节可知,无论是霍夫曼码还是算核编码,信源实际的概率模型必须与设计码表时所采用的模型相匹配,否则编码效率会显著降低。因此在一些国际标准中采用了自适应熵编码,即在编码过程中,根据图像相邻区域的已编码的数据,估计当前符号的概率分布,然后动态地更新码表;或者切换到符合当前分布的码表。在后一种情况下,编、解码器都有一组事先根据数据不同统计特性设计的码表。

在实际设计码表时,通常不是将一个DCT系数值看成一个符号,而是将游程编码后的组合(run,level)看成一个符号,给予一个码字,这样的码表有时称为二维霍夫曼表。在不同的国际标准中霍夫曼码表的具体形式有所不同。以H.263/MPEG4的DCT系数码表为例,该标准对出现频率较高的符号定义了VLC码表,而不常见的符号仍采用定长码表示。表4-1给出了它的VLC码表的前20个码字。该表是一个(last,run,level)的三维码表,last代表是否是序列的最后一个符号(last=1,“是”),run代表非零系数前面的零的个数,level代表该系数的绝对值,系数的正、负则由码字的最后一个比特s表示,0为正值,1为负值。

表4-1 VLC码表(部分)

7.去块效应滤波器

从3.9.5节可知,块DCT直流及低频分量的量化误差会导致重建图像上的块效应。除此之外,在分块进行具有运动补偿的帧间预测时,相邻宏块的预测块通常来自于参考帧中的不同(非相邻)位置,它们在空间上的不连续性,是造成块效应的另一个原因。为了降低块效应引起的视觉不快,可以用一个低通滤波器来对解码后的重建图像进行平滑,此滤波器称为去块效应滤波器(Deblocking filter)。在图4-1中,虚线所示的去块效应滤波器放在了解码器的预测环路之中;为了不失配,编码器环路中也有一个同样的滤波器。这样做的好处是,在提高解码图像主观视觉质量的同时,降低了参考图像块效应(不连续性)产生的残差,有利于压缩码率的降低。

8.速率控制

由于编码的原因,例如熵编码产生的是变长码、帧内编码和帧间编码产生的数据量不同等,同时由于视频信号的统计特性不平稳,复杂度高的图像经压缩后所产生的数据量大,因此编码输出的比特流速率是变化的。为了在恒定比特率的信道上传送,需要在进入信道之前加一个缓冲器,用以对输出码流的速率进行平滑和控制。关于速率控制问题将在4.3节中做进一步的介绍。

在图4-1中还给出了解码器的功能方框图。解码是编码的逆过程,这里不再多述。

4.1.2 视频序列的编码

对一个视频图像序列进行压缩编码,需要用到帧间预测编码,因为它是消除时间冗余信息(即各帧图像之间的冗余信息)的一种有效方法,但在不同的应用中帧间预测的具体做法有所不同。由于后向或双向预测在解码显示时引入额外的延时,所以在实时性要求高的应用中,如可视电话和视频会议,一般不采用。在这些应用中,通常第一帧采用帧内编码,后继帧均采用前向预测编码。

在另外一些应用中,例如在数字电视广播中接收机刚开机或改换频道时,或在视频点播中接收机进行录像机式的快进、快退等操作时,需要从码流的某个中间点(不是序列的起始点)处开始解码,这称为随机接入(Random Access)。如果序列除第1帧外全部采用前向预测,此时会因为没有前一帧参考图像而不能解码。为了解决随机接入的问题,有必要隔一段时间传送一帧只采用帧内编码的图像作为参考图像,使得预测环路能在没有某一个参考帧时,迅速获得另一个参考帧,从而恢复到正常工作状态。图4-6(a)表示出这样一个图像序列,图中I帧表示帧内编码图像,P帧和B帧分别表示采用前向预测和双向预测的图像。P帧由与其相邻的前一个P帧或I帧来预测,B帧则由前、后相邻的I帧或P帧预测。在这类应用中,实时性要求不那么苛刻,因此可以使用B帧提高压缩比,但B帧一般不作为P帧和后续B帧的参考图像。两个I帧之间的图像构成一个组,称为GOP(Group Of Picture)。在一组图像中,P帧和B帧的数目可以根据实际应用的需要选择。

需要注意,在GOP中B帧既引起编码的延时,也引起解码的延时。如图4-6(a)所示的情况,只有在P4编码之后才能对B2进行编码,与输入序列相比,编码器引入了2帧(连续出现的B帧的个数)的延时。为了使解码器引入的延时最小,已编码的图像按如下顺序进行存储或传输:I1 P4 B2 B3 P8 B5 B6 B7…不难看出,要正确地解码和显示该序列图像,解码器需要存储2帧已解码的图像,而引入的延时为1帧。

图4-6 使用I帧、P帧和B帧编码的图像序列

当GOP以B帧为结束帧时[见图4-6(b)],最后的B帧的编、解码需要以下一个GOP的I帧作为参考帧,这样的GOP称为开GOP;当GOP以P帧为结束帧时[见图4-6(a)],不需要参考下一个GOP的I帧,这样的GOP称为闭GOP

4.1.3 帧内预测编码

本节介绍基于空间域预测编码的优化技术。

1.DC系数的帧内预测编码

每个8×8帧内编码块DCT系数中的DC分量代表了该块的平均灰度,而在空间域内图像的灰度是连续变化的,因此相邻块的DC分量之间存在相关性。利用空间邻域已编码块的DC分量对当前块的DC分量进行预测,然后对预测误差进行编码,可以降低DC系数所占用的比特数。

图4-7(a)给出了进行DC系数预测的相邻块与当前块的位置图。当前块X的DC系数可以直接由A块的DC系数预测,例如在MPEG-2中就采用了这种方法。更好的方式(如MPEG-4所采用)是按下式选择DC系数梯度变化较小的方向进行预测。

        If|DCA-DCB|<|DCB-DCC|

    从C预测X

  else

    从A预测X

一般取A或C的DC系数乘以一个小于1的权值作为块X的DC系数的预测值。

同理,空间相邻的帧内编码块的DCT系数的低频分量之间也存在着一定的相关性,因此,DCT系数矩阵的第一行和第一列也可以利用帧内预测编码来降低它们占用的比特数。图4-7(b)给出了低频AC系数(图中灰色位置)的预测关系。

图4-7 (a)DC系数的预测,(b)AC系数的预测

2.运动矢量的帧内预测编码

当图像中存在面积覆盖若干宏块的大物体时,空间相邻宏块的运动矢量之间存在着相关性,因此,对运动矢量采用帧内预测编码有利于降低传送运动矢量所需要的比特数。

图4-8给出当前块E和与其相邻块A、B和C的相对位置,其中(a)为进行运动估值的块大小相同(如都是16×16)时的情况。在有些国际标准中允许使用不同大小的块来进行运动估值(见4.1.4节),图(b)表示出E和邻域块大小不同时的一个例子。最简单的预测方法是用左邻域块的运动矢量MVA作为当前块E的运动矢量MVE的预测值;更好的方法如下式所示:

式中,下标x、y分别代表运动矢量在X和Y方向上的分量,median{·}代表取中值。如果当前块是16×8或8×16的,则分别按图(c)和(d)中箭头所示方向进行预测。最后,对当前运动矢量与预测值之差进行编码和传输。

图4-8 运动矢量预测中当前块与邻块的位置关系

3.图像的帧内预测编码

在4.1.1节中讲过,对于帧内编码的帧(或块)不做帧间预测,直接进行块DCT和熵编码。但实际上,图像在空域内的相关性是很强的,如果对于帧内编码模式,首先进行空间域预测编码,再作DCT和熵编码可以明显的提高编码效率。因此在某些国际标准(如H.264)中,增加了帧内预测编码的模式。

根据3.5.1节可知,预测器系数的设计与图像信号的内容(统计特性)有关。为了适应不同的图像内容,通常给出一组不同的预测器。图4-9列出了几个例子。图中浅灰色块表示当前待预测像素,大写字母表示邻接的像素。图(a)定义了各像素的相对位置;图(b)用顶部像素分别预测当前块对应列的各像素;图(c)用A、D、I、L的均值预测当前块各像素;图(d)中像素由周边像素的加权和来预测,例如

显然,图(b)和图(d)分别适用于垂直方向和对角线方向相关性强的图像,而图(c)适用于灰度变化平坦的图像。类似地,相关的国际标准(如H.264)中还规定了其他一些预测器。

4.1.4 帧间预测编码的优化

在图4-1所示的混合编码器中,帧间预测编码对数据压缩起着至关重要的作用,因此对其进行改进,一直是近年来视频压缩编码研究的一个重要组成部分。下面简单介绍这些研究所获得的部分成果,它们已分别在不同的国际标准中被采用。

图4-9 亮度图像帧内预测的几个模式

1.隔行扫描图像的预测

当编码器的输入是隔行扫描的图像时,由于相邻扫描行来自不同的场,如果在一场时间内物体的位置有明显的移动,垂直方向上的相关性会降低。在这样的情况下,为了提高预测的准确性,可以采用以下的模式:

图4-10 场图像的场间预测

(1)用于场图像的场间预测

这种方式与帧间预测类似,只是被预测的宏块是从某一场图像(而不是帧图像)中取出的。如图4-10所示,P帧某一场的参考图像可以选择为该场图像的前一场,或者与之极性(即奇数场或偶数场)相同的前一场图像;而B帧某一场的参考图像则可以由其前一帧的任何一场与后一帧的任何一场构成。

(2)用于帧图像的场间预测

将帧图像中的宏块分成两个场宏块,两个场宏块分别由奇数场和偶数场的像素构成。对这两个场宏块分别进行场间运动估值。这样,对前向预测而言,每个帧宏块有两个运动矢量;对双向预测而言,每个帧宏块则有4个运动矢量。这种预测方式主要用于图像运动剧烈的情况。

2.帧间预测编码中几种特殊情况的处理

(1)不受限的运动矢量

对靠近图像边缘处的宏块进行运动估值时,其匹配块可能部分地落在参考图像之外(见图4-11)。为了降低预测误差,从而降低此时编码所需的比特数,可以将图像边界上的像素值简单线性外插到边界外(如图中阴影所示),编码效率会因此而略有提高。

图4-11 匹配块部分地落在参考图像之外的例子

(2)跳过模式

若当前编码块以参考图像中的同位块作为预测块时,其预测误差足够小(可以量化到零),则不传送当前块的任何编码信息,并称其为跳过(skip)块。在解码时,直接取参考图像中同位块作为跳过块的解码值。

(3)双向直接模式

在这种模式中,只传送预测误差,而不传送当前编码块的运动矢量,当前块的两个双向预测运动矢量通过已编码块的运动矢量推导出来。以图4-12所示的情况为例。设当前编码块位于B5帧,其后向参考帧P6中的同位块的运动矢量指向I1,且数值为MV=(+2.5,+5)。那么当前块的前向参考帧也为I1,其运动矢量按下式计算:

当前块的解码值则等于由MVF和MVB决定的双向预测值与预测误差之和。

图4-12 双向预测中的直接模式

3.运动估值的图像块大小

如3.5.2节所述,在块匹配方法中,将图像分块并将每一个块视为一个“运动物体”,对于图像结构和运动来说,这是一个相当粗糙的模型。如果一个块中包含若干个向不同方向运动的物体,则很难在参考帧中找到合适的匹配块。

根据图像内容的复杂程度选择不同大小和形状的块来进行运动估值,可以在一定程度上改善上述状况,减小预测误差,从而降低码率。因而在一些国际标准中除了16×16的块以外,还允许在运动估值中采用其他的分块方式。图4-13给出了H.264支持的各种分块模式,其中包括16×16、16×8、8×16和8×8的块;当选择8×8的块时,可以进一步细分为8×4,4×8和4×4,这常称为树结构的层次化块划分。值得注意的是,更细地划分块在可能降低预测误差的同时,增加了需要传输的运动矢量的个数(例如对4×4的前向预测,每个宏块有16个运动矢量)和匹配搜索的复杂程度;同时,所选择的是多大的块(块模式)也必须作为附加信息传送给解码器。

图4-13 分层划分的块模式

对一个图像宏块进行运动估值时,究竟划分为多大的块好呢?原则上说,需要对所有可划分的模式进行试探,看哪一种模式下所需的编码(预测误差、运动矢量和块模式等的编码)总比特数最少。由于图4-13所示的7种模式都在一个宏块之中,相互之间有很强的相关性,如何利用这些相关性就成为研究可变块大小的运动估值快速算法的基本出发点。一种思路是自下而上,先对最小块(4×4)进行运动估值,然后对小块的运动矢量进行分析,例如如果4个4×4块的运动矢量相似,则可合并为8×8的块;同时,4×4块的SAD值可以在进行大块的搜索时再利用。第二种思路是自上而下,先对最大块(16×16)进行运动估值,然后用大块的运动矢量对小块的位移进行预测,以减少搜索点的数目。考虑到太小的块容易产生误匹配,所得到的运动矢量不够可靠;而太大的块又容易包含多个向不同方向运动的物体,致使利用大块的运动矢量对小块的运动矢量进行预测不够准确,因此一些算法以8×8块为初始搜索块,然后采取向上合并和向下分裂的策略,以得到最佳的分块模式。4.1.5节将对进行模式选择的方法做更深入的讨论。

4.亚像素精度运动矢量估计

在3.5.2节所介绍的运动估值中,当前帧和参考帧具有相同的空间分辨率,这样得到的当前块和它在参考帧中的匹配块之间的位移值是像素取样间隔的整数倍,或者说,所得到的运动矢量是整数像素精度的。很显然,物体的实际帧间位移与像素点的取样间隔之间并没有必然的联系。对实际位移进行更精细(亚像素精度)的估值,有可能进一步减小帧间预测误差从而降低码率。由于在进行亚像素(例如1/2像素、1/4像素等)精度的运动估值时,首先需要通过内插得到参考图像在亚像素位置上的数值,以便实现对当前块位移的更精细的匹配,因此对亚像素精度运动估值的研究,包括运动矢量的精度和参考图像的内插方法分别对降低预测误差的影响这样两个问题。

(1)运动矢量的精度对降低预测误差的影响

研究表明B.Girod,“Motion-compensating prediction with fractional-pel accuracy,”IEEE Trans.on Communications,Vol,41,No.4,1993,604-611,运动矢量从整像素精度提高到亚像素时,帧间预测误差有显著降低,但到了一定的“临界精度”之后,预测误差降低的可能性则减小。对一系列典型测试序列的实验表明B.Girod,“Motion-compensating prediction with fractional-pel accuracy,”IEEE Trans.on Communications,Vol,41,No.4,1993,604-611,当运动矢量的精度从整像素提高至1/8像素时,编码比特率的降低比较明显;当提高至1/16像素后,则无明显的进一步的改善。同时,具有小物体、或低信噪比的序列相对于大物体、或高信噪比的序列而言,提高运动估值精度的效果相对要差,这是因为如果一个块中包含向不同方向运动的物体,或者量化误差较大,都会对运动估值形成干扰,进一步提高精度则没有多大意义。

(2)内插滤波器对降低预测误差的影响

从概念上讲,只要如3.4.2节所述采用理想低通作为内插滤波器,就可以精确地恢复出参考图像在亚像素位置上的数值。但是实验表明,按照上述方法进行具有运动补偿的帧间预测,效果并不理想。这是因为输入信号中包含着摄像机噪声和其他信号成分,这些噪声不能被很好地预测从而保留在预测误差之中。研究者通过假设噪声的主要成分来源于输入信号中的混叠失真T.Wedi and H.G.Musmann,“Motion and aliasing compensated prediction for hybrid video coding,”IEEE Trans,on CSVT,Vol.13,NO.7,2003,577-586,从理论和实验上比较好地解释了上述问题。

为了分析的简单,我们只考虑一维的情况。假设t-1和t时刻的输入模拟图像信号分别为lt-1(x)和lt(x),二者分别取样后得到bt-1(xn)和bt(xn)。若lt-1(x)的频谱为Lt-1(ω),则bt-1(xn)的频谱为

式中,ωs为取样角频率;T为取样周期。不失一般性,令T=1,以忽略上式中的常数1/T。

假设在数据采集过程中,由于取样之前的限带滤波器不是一个理想的低通,没有在1/2的取样频率(但在1倍的取样频率)上将信号衰减到零,即

则取样后的离散信号bt-1(xn)的频谱Bt-1(ω)中存在混叠干扰。让我们只考虑该频谱的基带部分(见图4-14),

Bt-1(ω)=Lt-1(ω)+Lt-1(ω+ωs)+Lt-1(ω-ωs) (4-8)

假设lt(x)只是lt-1(x)平移了dx后的结果,即lt(x)=lt-1(x-dx),那么取样后的当前帧信号bt(xn)的频谱为

上式后两项代表Bt(ω)中的混叠成分。根据(4-7)式可知,这两个混叠项是互不重叠的(见图4-14),因此(4-9)式可化为

由(4-10)式可以看出,在基带内混叠项的位移dxa

(4-11)式表示混叠项位移dxa的大小与频率ω有关,同时dxa与图像本身的位移是相反方向的。由于运动补偿只能按照一个位移矢量进行,在对图像本身的运动进行补偿时,混叠项将遗留在预测误差之中,造成补偿效果的不理想。

图4-14 输入信号bt-1(xn)的频谱

下面我们来具体分析混叠失真对预测误差的影响。图4-15给出了具有运动补偿的预测器的一般框图。图中分别代表重建的前一帧参考图像和对当前帧的预测值,l′t-1(x)代表经内插滤波器h(x)得到的模拟参考图像,为运动矢量的估计值。在这里我们假设其估计值等于实际值,即=dx。最后一个模块对模拟信号以周期T=1进行再取样。

图4-15 具有运动补偿的帧间预测器一般框图

根据图4-15很容易得到频域内各信号间的关系式:

式中,H(ω)为内插滤波器的频率响应。如果内插滤波器是理想低通型,即

假设忽略量化误差,即参考图像等于原图像,那么根据(4-12)式和(4-15)式,L′t-1(ω)=Bt-1(ω),且在|ω|>ωs/2时,L′t-1(ω)=0。因此根据(4-8)式和(4-13)式,在基带中有:

根据(4-10)式和(4-16)式得到预测误差的频谱E(ω)为

上式表示在对图像进行理想的预测时,对混叠项的预测是不完善的。从(4-17)式看出,残留在预测误差中的混叠失真大小(绝对值)与位移量dx有关,在整像素位移(dx=0,±T,±2T,…)时,残留误差消失,而在半像素位移时最大。

为了减小预测误差中残存的混叠失真,我们必须修正预测信号((4-16)式),使其更接近于当前帧信号Bt(ω)[(4-10)式]。由于亚像素位移产生混叠残留误差,故而进行内插的滤波器h(x)(见图4-15)可以兼用来对预测信号中的混叠失真进行衰减。我们知道在最小均方误差准则下,对带有加性噪声的随机信号进行预测的最佳预测器是维纳(Wiener)滤波器,因此在国际标准中建议的内插滤波器是根据信号和噪声统计特性设计的维纳滤波器,它具有与一般低通类似的频谱形状,不同的是它考虑了混叠失真(噪声)的影响。实际上,(3-33)式就是H.264给出的一个6抽头的维纳滤波器;而双线性内插滤波器等效于长度为2的维纳滤波器。

5.多参考帧预测

在对当前帧进行帧间编码时,通常采用前(或后)一帧作为它的参考图像,但在某些情况下,采用前面(或后面)若干帧中的某一帧作为参考可能会获得更好的预测效果(更低的预测误差)。这些情况包括:

(1)被遮挡和新暴露出的背景——背景被运动物体或阴影遮挡,当它重新暴露出来时,可能在它的前一(被遮挡)帧中找不到匹配部分,而在数帧之前它未被遮挡的帧中,可以得到良好的匹配;

(2)物体重复性的运动,或摄像机抖动、角度交替交换等,在这些情况下当前帧可能与数帧之前(或之后)的图像更具相似性;

(3)由于运动相对于取样栅格的变化、照明变化、噪声或其他原因,尽管在视觉上并不一定感觉数帧前(或后)的图像与当前帧更相像,但对某些宏块而言,却往往可以在数帧前(或后)的图像中找到比前一帧为参考的更好的匹配。

图4-16 多参考帧帧间预测

由此可见,采用多参考帧预测能够在一定程度上提高编码效率。图4-16给出了一个采用多参考帧预测的情况,当前帧中左边黑色块的参考块在前2帧中,而中间条纹块的参考块则在前面第4帧中(对于反向和双向预测亦类似)。此时,对于每个宏块而言,不仅要传送预测误差和运动矢量,还要传送其参考块所在的图像的位置。多参考帧帧间预测编码效率的提高是以加大运算量(需要在多帧中搜索匹配块)和存储容量(需要存储多个参考帧)为代价的,同时,编、解码器需要同步地管理参考帧缓存区也增加了复杂程度,但是并不加大播放延时。

4.1.5 基于率-失真优化的编码模式选择

在视频编码标准中,通常允许进行多种模式的编码,例如H.264支持前面介绍的各种模式的编码,即一个宏块在编码的时候,可以采用帧内编码或帧间编码,而帧内编码有图4-9举例的多种预测模式,帧间编码也可以采用图4-13所示的多种预测模式,那么究竟采用哪种模式好呢?最简单和原始的判断准则是最小化预测误差,如在3.5.3节中根据所给出的DFD值最小来选择前向、后向或双向预测模式。根据经验,预测误差小所需的编码比特数就少,但是上述准则并没有全面考虑一个宏块编码所需的总比特数。除了预测误差之外,运动矢量和编码模式(如帧内/帧间、块大小和多帧参考中的参考帧标号等)也需要占用一定的比特,在低码率的应用中,这部分开销尤为不可忽视。

根据3.3节介绍的率-失真理论,一个更为合理的编码模式选择准则是率-失真优化(Rate Distortion Optimization),简称RDO。假设信源样值(或宏块)集合(序列)为S=(S1,…,SK),Ik为编码Sk所用的模式,且Ik∈O,O为所有可选择的编码模式(包括量化器)的集合,那么在不考虑噪声的情况下,用于该信源序列的编码模式应该满足

其中I=(I1,…,IK),D(S,I)和R(S,I)分别为选择编码组合I时的总失真和总速率,RC为给定的速率限制值。引入拉格朗日参数λ≥0,(4-18)式的条件优化问题变为

其中J(S,I)称为代价函数

理论上讲,D(S,I)应该等于原始图像与解码重建图像的差值,R(S,I)包括量化后的预测误差(对帧内模式则是图像本身)的DCT系数、运动矢量和所选模式的标识符等编码所用的比特数之和。显然,(4-19)式是一个复杂的优化问题,再考虑到混合编码中,许多编码参数是经过空域或时域预测以其差值传送的,一个宏块参数的编码涉及到邻域或邻帧的其他宏块,这就使得问题更加复杂化。为此,研究者提出了多种简化方案来减少优化的搜索空间,以适应实际编码器设计的需要。

一个简单和被广泛接受的方案是假设失真和速率度量均为加性的,且仅依赖于每个宏块本身的编码参数的选择,则(4-19)式化为

式(4-20)中K为一帧宏块的个数,求和与求最小符号可以互换是因为对所有k,J(Sk,I)>0。从上式右端可知,优化问题可以针对每个宏块独立进行。因此对于每个宏块我们有:

其中Q代表给定的量化步长,O在不同标准中代表不同的集合,例如对于逐行扫描的P帧而言,在MPEG2中,O={Intra,Skip,Inter_16×16};在H.263/MPEG4中,O={Intra,Skip,Inter_16×16,Inter_8×8};在H.264中,O={Intra_4×4,Intra_16×16,Skip,Inter_16×16,Inter_16×8,Inter_8×16,Inter_8×8,Inter_8×4,Inter_4×8,Inter_4×4}。上式中的失真项

式中,Ak为当前宏块。由经变换和量化的系式,是前一帧同位块的变换和量化的预测误中的速率项RREC,对I使用的比特数;对Skip模式,为1个比特/宏块;而对In-ter模式,则为模式标识、参考帧标识、运动矢量和预测误差所使用的总比特数。图4-17表示出计算(4-21)式的率-失真代价(RD-cost)的流程。

图4-17 率-失真代价计算

由于帧间预测模式涉及运动补偿,因此我们将这一部分分成两个串行的优化问题来解决。对每一种帧间预测模式,首先忽略对预测误差进行编码(变换、量化和熵编码)的过程,只对帧间编码的各种模式进行速率约束下的运动估值,即找到最佳的运动矢量vopt使下列代价函数最小:

其中V代表所有可能的运动矢量的集合,RMOTION(Sk,v)代表采用v时,运动矢量编码所用的比特数;在多帧预测中,v=(vx,vy,vt),其中vt代表参考帧的标识。上式中的失真项为

其中S(x,y,t)和S′(x,y,t)分别为原始和预测的像素值。当p=1时,(4-24)式为SAD;p=2时,为平方误差和(SSD)。(4-23)式首先在整像素精度上求解,找到最佳的整像素精度运动矢量后,再在该像素周围的亚像素精度上进行搜索,直至找到满足(4-23)式的最佳运动矢量vopt。然后,按照图4-17所示的过程计算率-失真代价,与其他帧间预测模式和帧内模式一起进行模式选择。

在具体实现上述优化时,我们仍有如下问题需要解决:

(1)拉格朗日参数的选择

假设率-失真函数DREC(RREC)是凸的,那么(4-21)式的代价函数JMODE(RREC)=DREC(RREC)+λMODERREC也是凸的。令JMODE的一阶导数为零,则可得到J取最小值时

上式说明拉格朗日参数λMODE对应于率-失真函数的负斜率,因此可以从率-失真函数来确定λ。在假设足够高码率的条件下,可以得到熵约束量化器的率-失真函数的近似表达式和失真与Q之间的关系式,并通过实验确定其中的常数,从而得到如下的拉格朗日参数T.Wiegand and B.Girod,“Lagrange multiplier selection in hybrid video coding control,”ICIP,2001,542-545

其中QP为编码量化参数,在不同的标准中,QP与Q之间有不同的关系(例如表4-2)。在(4-24)式中,若DFD取SAD值,则λMOTION;若取SSD值,则λMOTION=λMODE。考虑到DREC和RREC都与量化步长Q有关,λMODE与QP有(4-26)式的依赖关系就是可以理解的了。

(2)快速模式选择算法

在进行(4-23)式和(4-21)式的优化时,运动矢量编码所需的比特数RMOTION可以通过VLC表迅速查出,但是要得到帧间或帧内预测误差经变换、量化(对所有可能的量化步长)和变长编码及运动矢量等所占用的比特数RREC,以及重建后产生的失真DREC,则需要针对每一种模式完成多次(多个QP)编码/解码的全过程,计算量是十分庞大的。因此,从基于率-失真优化的编码模式选择方法提出以来,对其快速算法的研究就一直是一个活跃的领域。这些快速算法的基本思想通常是:①根据图像在空间域与时间域上的特征或相关性和邻域已编码模块的信息,限定搜索模式的种类,或确定优先搜索的模式(或模式类别);②设定适当的阈值,当代价函数小于阈值时即认为达到最优,使搜索及早中止;或当代价函数大于某个阈值时,及早跳转到对其他模式的搜索。对快速算法有兴趣的读者可以参阅F.Pan,el al.,“Fast modedecision for intra prediction,”JVT-G013,2003 K.P.Lin,el al.,“Fast inter mode selection,”JVT-1020,2003 B.Jeon and J.Lee,“Fast mode decision for H.264,”JVT-J033,2003 J,Lee,el al.,“Fast mode decision for Bslice,”JVT-K021,2004

(3)根据预测误差对失真和速率进行估计

这也是简化模式选择计算复杂度的一种方法。例如利用一个大的训练数据集,得到以量化参数QP为参变量的DREC~DFD和RREC~DFD近似关系。这些关系可以表格的方式存储,在进行(4-21)式的优化时,通过查表而不必完成编解码的全过程就可以获得对应的失真和速率数值。

4.1.6 低计算复杂度的变换编码与量化

8×8DCT是大多数视频编码国际标准中采用的变换编码方式,但是DCT通过浮点计算完成,由于有限字长效应,且编码器和解码器的计算单元的精度可能不同,因此逆变换不一定能精确地重建变换前的数值,这称为编、解码变换的失配。失配造成解码图像质量一定程度上的降低。为了解决变换失配问题并降低变换的计算复杂度,在H.264中引入了一种4×4的正交变换。

1.4×4正交变换

我们首先从4×4DCT开始来推导这种低计算复杂度的4×4变换。根据(3-67)式得到以矩阵形式表示的4×4DCT如下式所示:

其中X、Y分别为像素矩阵和变换系数矩阵,A为变换矩阵。

将(4-27)式转化为

其中代表(CXCT)矩阵中的每个元素与E矩阵中的对应位置上的元素相乘,d=c/b。为了简化计算,令

我们可以验证(4-29)式中的变换C是正交的,但要保证它的基向量是归一化的,则需要将乘数矩阵E中的b改为

再将(4-29)式中C的第2和第4行和CT的第2和4列分别乘以2,以避免变换中的除2运算产生非整数,与此同时将E中对应的因子除2,则得到

由(4-32)式看到4×4变换CfXCfT只由整数加法、减法和移位(×2)操作完成。如果输入矩阵X的元素值在[-255,255](即8b)之内,变换系数值的范围最大可扩展62倍,因此整个变换操作可由16b的整数运算完成(除了极偶然的非正常输入之外)。最后与Ef相乘时需要对每个系数进行一次乘法,考虑到量化也涉及乘(除)法运算,我们可以将此合并到后面的量化过程中去,利用一次乘法完成。值得注意,虽然4×4变换CfXCfT可以由整数运算完成,但这是将它所需要的乘数部分移到量化中去而实现的,因此它不能称为严格意义上的整数变换。

(4-32)式的变换是一个正交变换,但由于b和d的变化(见(4-30)式和(4-31)式),它并不等于(4-27)式表示的DCT。它与DCT的性能相近。研究表明H.S.Malvar,el al.,“Low-complexity transform and quantization in H.264/AVC,”IEEE Trans.CSVT,Vol.13,No.7,2003,597-603,对于相关系数等于0.9的平稳高斯—马尔柯夫输入过程,(4-32)式的变换编码增益为5.38dB,而DCT的编码增益为5.39dB,0.01dB的增益差别不会造成可察觉的性能损失;对于预测误差而言,相关系数往往低于0.9,则编码增益的差别更小,可以忽略不计。

4×4的逆变换由下式给出:

由(4-33)式看出,变换系数首先乘以乘数矩阵Ei(与反量化一起进行),然后再进行反变换。为了减小动态范围的扩展,矩阵Ci和CTi的元素取为1和1/2,其中的除2运算可以由向右移位来完成。

2.整数运算的量化

基本的量化操作如下式所示:

式中,Yij和Zij分别为量化前、后的变换系数,Q为量化步长,f反映量化器死区宽度,floor(·)为取整。顺便指出,在实际应用中用“取整”代替“四舍五入”,往往能获得更好的主观图像质量。

在视频压缩的国际标准中,通常给出一定数量的可选的量化步长。例如表4-2为H.264规定的52种量化步长,表中QP为索引值,也称为量化参数,Q为量化步长的实际大小。

表4-2 H.264编码器的量化步长

将(4-32)式中的Ef结合进量化,(4-34)式变为

式中,Wij为经(CfXCTf)变换后的系数,PF为该系数对应位置上的乘数(a2,ab/2或者b2/4)。为了回避除法运算产生浮点数,可以将PF/Q乘以一个很大的数,然后再进行右移位操作,即令

其中:

q=15+floor(QP/6) (比特) (4-37)

根据(4-35)式和(4-36)式,量化过程可以由下式所示的整数运算完成:

其中代表二进制的右移位操作。如果将不同QP下对应于不同系数位置的MF值预先制成表,那么在对每一个变换系数进行量化时,查到该系数对应的MF值,只需一次乘法就可以同时完成量化和(4-32)式所要求的相乘两个运算,明显降低了计算的复杂度。式中f为常数,在H.264的参考模型软件中,对帧内和帧间编码模块f分别取1/3和1/6。

值得注意,表4-2表示出QP每增加6,量化步长增大1倍,这意味着MF减小1倍,因此在(4-37)式中QP每增加6,q增加1b。从(4-36)式看出,这使得我们只需要针对QP的前6个值制作MF表。对于QP>5的情况,可以周期性地重复使用该表。

基本的反量化过程由下式所示:

Yij=Zij·Q (4-39)

将(4-33)式所要求的相乘运算合并到反量化过程中,则得到

W′ij=Zij·Q·PF·64 (4-40)

其中PF为(4-33)式中Ei对应位置上的元素(即a2、ab或b2),乘以64是为了避免舍入误差。对W′ij进行(4-33)式的逆变换CTiWCi,再除以64(通过移位完成),则可获得重建的X值。为了简化运算,令V=(Q·PF·64),并像MF一样将前6个QP(0≤QP≤5)对应于不同系数位置的V值预先制成表,则(4-40)式变为

W′ij=Zij·Vij·2floor(QP/6) (4-41)

每个变换系数的反量化和(4-33)式要求的相乘也只需一次乘法完成。当QP>5时,V值表可以周期性地重复使用,因为由QP增大引起的Q所增大的倍数已由2floor(QP/6)表示。

顺便指出,对于16×16帧内编码的宏块,由于宏块中16个4×4变换后产生的DC系数之间存在较强的相关性,因此可以对由4×4个DC系数组成的矩阵再进行哈达玛(Hadamard)变换I.E.G.Richardson,H.264 and MPEG-4 Video Compression,John Wiley&Sons,2003,以进一步提高压缩编码的效率。

4.1.7 码流结构

如4.1.1节所述,视频序列是以帧为单位进行编码的;每一帧又被划分为条、宏块和块分别进行具有运动补偿的帧间预测和DCT编码,然后转换成一维的符号序列,经熵编码形成一串由0和1组成的码流。要使解码器能够从码流恢复出原来的视频序列,必须给出码流的各段与帧、条、宏块与块的对应关系,这通常是将码流按层次结构来组织,并在每个层次插入相应的头信息来完成的。图4-18给出了一个典型的码流层次结构图。

图4-18 典型的码流层次结构

在图4-18中,码流共分为6个层次:

(1)图像序列。序列头给出图像分辨率、宽高比、帧率和比特率等信息;

(2)图像组(GOP)。它是进行随机存取的单元,其头信息是可选的,包括GOP的开、闭等;

(3)图像。它是基本的编码单元,其头信息中记录着该帧的类型(I、P或B)、按帧或场编码及量化表等;

(4)(Slice)。一幅图像可以分成一个或多个条,在每条的开始,进行DPCM的参量(如MV和DC系数)的预测值都重新置到零(称为再同步),这可以防止解码时误差的传播。它是一帧中最大的可独立解码的单元,也称为再同步的单元。条的头信息包括条的起始位置,是否全部宏块为帧内编码等;

(5)宏块。它是进行运动补偿的基本单元,其头信息包括宏块的编码类型、MV个数等;

(6)。它是进行DCT的基本单元。

通常,国际标准并不对编码器的设计作限制,这给编码器的开发者留下了设计的余地。国际标准只规定已编码的码流必须遵循的句法(Syntax)、语义(Semantics)和一个标准解码器。所谓句法是指表述码流各层次信息的标识符的集合;语义则是句法中各符号所对应的定义。因此,只要一个厂家开发的编码器产生的码流符合国际标准,就能被其他厂家开发的标准解码器正确解码。