7.3 视频压缩

现在我们已经十分清楚,以非压缩格式处理多媒体信息是完全不可能的——它的数据量太大了,惟一的希望是有可能进行大比例的数据压缩。幸运的是,在过去几十年,大量的研究群体已经发明了许多压缩技术和算法,使多媒体传输成为可能。在下面几节中,我们将研究一些多媒体数据(特别是图像)的压缩方法,更多的细节请参见(Fluckiger,1995;Steinmetz和Nahrstedt,1995)。

所有的压缩系统都需要两个算法:一个用于在源端对数据进行压缩,另一个用于在目的端对数据进行解压缩。在文献中,这两个算法分别被称为编码(encoding)算法和解码(decoding)算法,我们在本书中也使用这样的术语。

这些算法具有某些不对称性,这一不对称性对于理解数据压缩是十分重要的。首先,对于许多应用而言,一个多媒体文档(比如说一部电影)只需要编码一次(当该文档存储在多媒体服务器上时),但是需要解码数千次(当该文档被客户观看时)。这一不对称性意味着,假若解码算法速度快并且不需要昂贵的硬件,那么编码算法速度慢并且需要昂贵的硬件也是可以接受的。从另一方面来说,对于诸如视频会议这样的实时多媒体而言,编码速度慢是不可接受的,在这样的场合,编码必须即时完成。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

第二个不对称性是编码/解码过程不必是100%可逆的。也就是说,当对一个文件进行压缩并进行传输,然后对其进行解压缩时,用户可以期望取回原始的文件,准确到最后一位。对于多媒体,这样的要求是不存在的。视频信号经过编码和解码之后与原始信号只存在轻微的差异通常就是可以接受的。当解码输出不与原始输入严格相等时,系统被称为是有损的(lossy)。所有用于多媒体的压缩系统都是有损的,因为这样可以获得更好的压缩效果。

7.3.1 JPEG标准

用于压缩连续色调静止图像(例如照片)的JPEG(Joint Photographic Experts Group,联合摄影专家组)标准是由摄影专家在ITU、ISO和IEC等其他标准组织的支持下开发出来的。JPEG标准对于多媒体而言是十分重要的,因为用于压缩运动图像的标准MPEG不过是分别对每一帧进行JPEG编码,再加上某些帧间压缩和运动补偿等额外的特征。JPEG定义在10918号国际标准中。它具有4种模式和许多选项,但是我们在这里只关心用于24位RGB视频的方法,并且省略了许多细节。

用JPEG对一幅图像进行编码的第一步是块预制。为明确起见,我们假设JPEG输入是一幅640×480的RGB图像,每个像素24位,如图7-6a所示。由于使用亮度和色度可以获得更好的压缩效果,所以从RGB值中计算出一个亮度信号和两个色度信号,对于NTSC制式,分别将其记作Y、I和Q,对于PAL制式,分别将其记作Y、U和V,两种制式的计算公式是不同的。下面我们将使用NTSC的符号,但是压缩算法是相同的。

对Y、I和Q构造不同的矩阵,每个矩阵其元素的取值范围在0到255之间。接下来,在I和Q矩阵中对由4个元素组成的方块进行平均,将矩阵缩小至320×240。这一缩小是有损的,但是眼睛几乎注意不到,因为眼睛对亮度比对色度更加敏感,然而这样做的结果是将数据压缩了2倍。现在将所有三个矩阵的每个元素减去128,从而将0置于取值范围的中间。最后将每个矩阵划分成8×8的块,Y矩阵有4800块,其他两个矩阵每个有1200块,如图7-6b所示。

阅读 ‧ 电子书库
图 7-6 a)RGB输入数据;b)块预制之后

JPEG的第2步是分别对7200块中的每一块应用DCT(离散余弦变换)。每一DCT的输出是一个8×8的DCT系数矩阵。DCT矩阵的(0,0)元素是块的平均值,其他元素表明每一空间频率存在多大的谱功率。对于熟悉傅立叶变换的读者而言,DCT则是一种二维的空间傅立叶变换。在理论上,DCT是无损的,但是在实践中由于使用浮点数和超越函数总要引入某些舍入误差,从而导致轻微的信息损失。通常这些元素随着到(0,0)元素距离的增加而迅速衰减,如图7-7b所示。

阅读 ‧ 电子书库
图 7-7 a)Y矩阵的一块;b)DCT系数

DCT完成之后,JPEG进入到第3步,称为量化(quantization),在量化过程中不重要的DCT系数将被去除。这一(有损)变换是通过将8×8 DCT矩阵中的每个元素除以取自一张表中的权值而实现的。如果所有权值都是1,那么该变换将不做任何事情。然而,如果权值随着离原点的距离而急剧增加,那么较高的空间频率将迅速衰落。

图7-8给出了这一步的一个例子,在图7-8中我们可以看到初始DCT矩阵、量化表和通过将每个DCT元素除以相应量化表元素所获得的结果。量化表中的值不是JPEG标准的一部分。每一应用必须提供自己的量化表,这样就给应用以控制自身压缩损失权衡的能力。

阅读 ‧ 电子书库
图 7-8 量化DCT系数的计算

第4步通过将每一块的(0,0)值(左上角元素)以它与前一块中相应元素相差的量替换而减小。由于这些元素是各自所在块的平均,它们应该变化得比较缓慢,所以采用差值可以将这些元素中的大部分缩减为较小的值。对于其他元素不计算差值。(0,0)值称为DC分量,其他值称为AC分量。

第5步是将64个元素线性化并且对线性化得到的列表进行行程长度编码。从左到右然后从上到下地对块进行扫描不能将零集中在一起,所以采用了Z字形的扫描模式,如图7-9所示。在本例中,Z字形模式最终在矩阵的尾部产生了38个连续的0,这一串0可以缩减为一个计数表明有38个0。

阅读 ‧ 电子书库
图 7-9 量化值传送的顺序

现在我们得到一个代表图像的数字列表(在变换空间中),第6步将采用Huffman编码对列表中的数字进行编码以用于存储或传输。

JPEG看来似乎十分复杂,这是因为它确实很复杂。尽管如此,由于它通常可以获得20:1或更好的压缩效果,所以获得广泛的应用。解码一幅JPEG图像需要反过来运行上述算法。JPEG大体上是对称的:解码一幅图像花费的时间与编码基本相同。