书城计算机网络多媒体技术
13955600000013

第13章 多媒体数据压缩编码技术(6)

当选定某种预测算法后,利用前面的像素样点就可以预测当前样点。利用当前样点的真实值与预测值相减,便求出了差值。这个过程与前面已说明的差分脉冲编码过程是一样的。

但是,这里由预测器输出的差值还要进一步进行无失真(熵)编码,以便达到更好的压缩效果。通常所用的熵编码方法是哈夫曼编码或算术编码。

这种编码所使用的源图像数据样本精度有很大的灵活性,JPEG规定其每样本精度可为2~16bit。在开始进行无失真编码前,可有意地减少1位或多位输入样本值,从而可获得更大的数据压缩比,而重建图像的误差仍在允许的范围之内。

3.其他编码方法

JPEG还提出了其他编码方法。

1)基于DCT的累进编码运行方式

前面已经描述了基本的顺序编码方式,它是以DCT为核心实现压缩编码的。在顺序方式里通过一次扫描量化DCT系数实现压缩编码,而在累进方式下要进行多次扫描。

JPEG规定了两种累进编码方法。

(1)累进的频谱选择法

在此方法中,每次扫描时,在DCT之后仅选择某些频段内的系数进行编码并传送;然后再以累进的方式选择其他一些频带的系数进行编码、传送;这样累进进行,直至系数全都传送完。从接收数据的一端来看,在这种方式下,传送来的图像精度逐渐提高。

(2)逐次逼近法

这种编码方法是按位进行逼近,即首先扫描、编码某几个最高有效位并进行传送,而后再逐次扫描、编码较低和更低的DCT系数位。对DCT系数分批编码、分批传送后便可达到所要求的精度。

2)基于DCT分层编码方式

这种编码方式的基本步骤是:

①首先在低分辨率下获取源图像数据;

②利用基于DCT的顺序方式或累进方式,也可以采用无失真编码方式对此低分辨率图像进行编码;

③对编码后的图像进行译码并重构原始图像,然后利用插值方式使重构图像的分辨率提高一倍;

④在分辨率提高一倍的情况下重构图像,作为源图像的预测图像。求取源图像与预测图像的差值并对其进行编码;

⑤再以此差分编码重构图像,用插值使分辨率提高一倍,重复前面的过程直至达到某种精度要求。

以上就是JPEG标准中所采用的几种静态图像的编码方法。

3.5.3源图像数据

在图318中已表示过JPEG的编码过程,主要是三个大的侧面。前面已说明最重要的JPEG所规定的编码方法,现在简单介绍源图像数据。

1.单分量源图像数据

在单分量源图像数据中,认为源图像数据是仅具有灰度的单分量数据。源图像经采集数字化后就可以产生源图像数据。在有失真的基于DCT的编码中,每次取8×8个样本进行处理,而在无失真一维线性预测编码中,每次取一个样本进行处理。将一次处理的数据叫做一个数据单元(或数据单位)。

在单一分量的源图像数据的编码中,编码过程是一个数据单元接一个数据单元顺序进行的。

2.多分量源图像数据

除了单分量源图像数据外,今后遇到更多的是多分量源图像数据,其中彩色图像数据是最常见的一种,因此,JPEG的专家们更注重多分量源图像数据。JPEG规定了多分量源图像处理的两种方式:非交插方式和交插方式。

1)非交插方式

假定源图像由三个分量A、B、C组成,如图325所示。

图325源图像的三个分量

非交插方式处理就是先将A分量的所有数据处理(在这里就是JPEG编码)完后,再处理B分量的所有数据,最后再处理C分量。其处理顺序是A1,A2,…,An→B1,B2,…,Bn→C1,C2,…,Cn。

用非交插方式处理彩色图像并不好,因为在恢复图像时会使某一彩色先恢复,从而产生强的彩色。

2)交插方式

交插方式是对构成图像的各分量在处理过程中穿插进行处理。例如,处理完A分量的一个数据单元后,就去处理B分量的一个数据单元,再去处理C分量的一个数据单元。处理过程交插进行,图325所示的三个分量源图像数据的交插处理顺序是:A1,B1,C1;A2,B2,C2;…,An,Bn,Cn。

在交插处理不同分量的数据时,要调用不同的量化表和哈夫曼表。例如,处理亮度时,要调用亮度相对应的表,而当处理色差时,又需要调用色差所对应的表。

另外,在交插处理不同分量时,有可能遇到源图像各分量大小不同的情况。例如,在图325中,若分量B和分量C只有分量A的一半,也就是说A有n个数据单元,B和C只有n/2个数据单元,此时的交插处理可以按如下顺序进行:

A1A2B1C1→A3A4B2C2→…→An-1AnBn/2Cn/2

3.源图像数据的精度

JPEG规定,对于基本的DCT编码过程,每个数据样本的精度为8位(bit);对于扩展的DCT编码过程,数据样本的精度为8位或12位。很显然,采用12位数据精度进行编码必然要花费更多的处理时间。

对于无失真编码,JPEG标准规定,数据样本的精度为2位到16位。由用户根据自己的应用需要进行选择。

3.5.4压缩数据的数据格式

制定统一的数据格式是进行数据交换的先决条件。如果每个人都用自己专用的格式存储和传送数据,则存储的数据或传送到其他终端的数据很难为别人所理解,更无法使用。计算机网络的发展势不可当,这是不可逆转的发展趋势。要将JPEG标准处理的静态压缩图像数据经网络传向遥远的对方,使对方接收到已压缩的图像数据时能解释这些数据的结构,了解数据的细节,也必须有一定的数据格式才能解压缩恢复源图像。

即使要将已压缩的数据进行存储(例如,存储在硬磁盘中),也必须按一定的数据格式写在磁盘上并形成一个JPEG数据格式文件,这样,才能供自己或他人使用。

在本节开始就特别指出,JPEG标准的主要内容包括三部分:源图像数据、编码算法和已压缩数据的格式。现在,我们来解决最后一部分--JPEG的标准数据格式。JPEG数据格式的规定要涉及大量细节,因此,为简单起见,本书中只对其进行概要介绍。

1.一般(非分层)的JPEG数据格式

一般数据格式包括顺序DCT、累进DCT和无失真编码过程最后编码输出的数据格式。一般数据格式的结构如图326所示。

由图326可以看到,描述一幅已压缩图像的数据从图像数据的起始标识符SOI开始,它标志着压缩图像的起始。此后是一帧已压缩的图像数据,也就是一幅压缩图像的数据。最后是压缩图像的结束标识符EOI,表示一帧图像的结束。

一帧压缩数据的结构同样表示在图326上。一帧压缩数据包括开始的帧头和一次或多次扫描。帧头的前面可以附加一个或多个表说明,还可以附加其他具有标识符的段。在数据帧中,如果有定义线数的数据段DNL,则它必须放在第一次扫描之后。

最简单的情况是单色的顺序DCT方式,这种方式一次扫描即可完成对图像数据的压缩。对多分量的彩色图像,通常在扫描中采用交插方式。而对于累进的DCT方式,则完成一幅图像的压缩就需要多次扫描,而且当处理的是多分量图像时,每次扫描又需要交插进行,这些最终要体现在输出的数据帧中。

每次扫描的特征由扫描的数据结构来描述。每次扫描都包括扫描头和一个或多个熵编码段。与帧头前面类似,扫描头的前面可以有一个或多个表说明,还可以有各种具有标识符的段出现。如果扫描中有RSTm(重新启动)标识符(其中,m=1,2,…,N),则除最后一段熵编码外,其他各熵编码段后均有重新启动标识符,用来指定重新启动参数。扫描由熵编码段构成,熵编码段则由经压缩编码的最小编码单元组成。最小编码单元MCU这样定义:

①对于非交插图像数据,它就是一个数据单元,对DCT为8×8样本,对无失真编码为一个样本,这在前面已有说明;

②对于交插图像数据来说,它由来自各分量的多个数据单元构成,例如,对于图325,一个最小编码单元为AiBiCi。

熵编码段就是由这些经压缩编码--最后是熵编码的最小编码单元构成的。

以上仅从大的方面说明了一般(非分层)压缩数据的JPEG格式。至于细节,在图326中的每一部分都还有更加详细的描述。

2.分层方式的JPEG数据格式

JPEG规定分层编码方式的压缩数据格式如图327所示,图中的SOI、表说明、帧的概念以及EOI在上面的数据格式中已作了说明。

在分层方式中,一幅压缩图像数据要由许多帧构成。这一点,在前面编码的分层方式中也已作了说明。

在分层方式的数据格式里,需要附加DHP段和EXP段。DHP段用于定义分层级数;EXP段只有在水平或垂直方向上扩张参数时才会使用。JPEG对这些段有详细的定义。

当弄清楚不同数据格式的规定后,利用硬件或软件便可以形成JPEG数据格式的数据。现有的软件及硬件可为用户产生这些数据格式。3.6动态图像信号的处理

最常见的动态图像有电视图像、多媒体视频卡中采集与回放的每秒十几或几十帧画面的图像以及每秒几至十几帧的可视电话画面图像等。总之,动态图像要求几到几十帧画面进行变更,以便利用人眼的视觉暂留特性产生活动的图像。

3.6.1动态图像处理应考虑的问题

前面已经提到视频图像信号的特点中最重要的是数据量大,而动态图像信号就更加突出。例如,像比较简单的每帧352×240像素点,每个像素点16bit的图像,就有1.3Mb,因而每秒30帧,就构成高达40Mbps的数据量。因此,对动态图像,就当前技术来说,必须采取必要的数据压缩手段,否则,无论是对动态图像数据的存储还是传送,都将是不现实的。

1.帧间预测编码

前面已经提到,相邻图像帧间的时间冗余信息很大。有人作了统计,某电视图像的帧间变化部分平均约为总画面的5%,这说明帧间的数据压缩有很大的潜力。

帧间预测编码就是利用前一帧图像预测当前图像,并对当前图像与预测图像的差值进行编码的。由于两者基本相同,其差值必然很小,故可获得较大的压缩效率。帧间预测示意图如图328所示。

如图328所示,要对本帧的像素点X进行预测,可用本帧的a、b、c点进行空间预测,也可用前一帧的a′、b′、c′、d′、e′、f′点进行时间预测,亦可以将两者混合进行预测。若X点的预测值用X表示,则当前值就用X^表示。预测算法可有许多种,例如以下3种。

1)只进行空间预测

这种预测算法已在本章的图315中表述过。

2)帧间预测

帧间预测算法有:

X^=d′

X^=e′+c′2

X^=a′+e′+c′2b′+f′2

类似的帧间预测算法还可以写出很多。

3)帧内和帧间混合预测

帧内和帧间混合预测也有多种预测算法。例如:

X^=(a+d′)a′

X^=(d+c′)c

当采用上述某种算法时,由于很接近X,故ε=XX^就会很小,甚至为0。对差值ε进行编码,便可达到压缩的目的。

在此基础上,还可以考虑当画面活动不大时,用帧间预测;当画面变化剧烈时,采用帧内编码。两种预测方式分别适应两种不同的图像情况。

另外,由于在动态图像中一般图像的活动部分都比较小,因此,可以利用帧间预测的方法标出当前帧与前一帧变化大的部分,而仅对这些变化大的区域进行编码、存储或传送,这样就可有效地减少数据量。

2.运动补偿

前面所描述的帧间预测编码很容易理解,在大多数情况下也行之有效。但是,当图像画面剧烈变化时,例如,当摄像机快速移动时,就会使图像的分辨率大大降低,严重地影响图像的质量。

为了解决这个问题,科技人员提出了一种称为运动补偿的预测编码方法。这种编码方法的关键思路就是将动态图像理解成一幅静态图像和一幅动态图像的运动部分的叠加,因此,关键在于找出图像的运动部分。利用当前帧和前一帧对图像的运动进行估算,找出图像运动部分的移动规律,便可以对其进行预测。

运动矢量的估算方法有许多种,而且有许多人正在致力于运动矢量算法的研究。目前用得比较多的有块匹配算法、递归算法等。包括运动补偿的预测编码框图如图329所示。

图329包括运动补偿的预测编码框图

具有运动补偿的预测编码,用于动态图像的压缩已由硬件实现,并用于后面将要提到的动态图像压缩标准中。

运动补偿的简单原理可用图330来说明,图像的运动部分(阴影所示)由前一帧的x,y位置移动到x+dx,y+dy位置。这时,如果不考虑图像的运动,而用前一帧的x,y点与当前帧的x,y点求差,则由于图像已经移动而差值的幅度会很大。同样,当前帧x+dx,y+dy点与前一帧相对应点的差值同样很大。只有找到x+dx,y+dy,用它们的值与前一帧的x,y所决定的点求差值,才能获得好的结果。

如前所述,可利用块匹配算法求得图像移动到何处。将当前帧分成m×n的若干像素块,再用此图像块上下左右移动进行匹配,达到最佳匹配就算找到了帧间的移动位置。最佳匹配的准则有均方误差最小、平均两帧差最小等,还可以利用两帧间的归一化相关函数来进行最佳匹配。

接下来的问题是利用什么方法搜索匹配块,哪种方法速度快,运算量最小。匹配搜索方法有全搜索法、三步法、二维对数法、正交搜索法及共轭方向法等。其中,全搜索法最细致,但也最花时间,其他方法都是快速方法。

另外,当由于速率限制使得每秒传送的帧数较少时,在显示动态图像时,就会影响图像的质量。采用运动自适应帧间内插可以较好地解决这个问题。

对于运动图像的自适应帧间内插的原理,可用图331说明。在图331中,要在当前帧和前一帧中利用内插的方法构成内插帧。对于图像中的静止部分,是容易进行内插的。但对于运动部分(图331中的阴影部分),就不能用两图像的x,y点和的均值来形成内插值,而应当用两帧阴影部分进行计算来形成内插帧的阴影部分。

利用帧间内插,可消除图像的闪烁,保证运动图像的质量。

3.6.2H.261标准

H.261标准是为适应可视通信发展的需要,由CCITT制定并于1990年底正式批准的。该标准称为“视听业务速率为P×64kbps的视频编译码”,其中P=1,2,…,30。当P为1或2时,速率比较低,适用于QCIF分辨率格式,用于要求不高的可视电话。当采用P≥6的传输速率时,支持CIF分辨率格式,多用于电视会议。

1.H.261视频编码格式