数字化后的视频和音频等媒体信息具有海量性,与当前计算机所提供的计算机存储资源和网络带宽之间有很大差距,这样对多媒体信息的存储造成很大困难。因此,多媒体信息以压缩的形式进行存储和传播成为必要,同时因为多媒体数据之间存在大量冗余现象,如空间冗余、时间冗余、结构冗余、知识冗余、视觉冗余、图像区域的相同性冗余和纹理统计冗余,使得多媒体数据压缩成为可能。本章主要介绍了数据压缩的基本原理和方法,以及数据压缩的编码原理和压缩标准。第7章多媒体压缩技术7.1数据压缩的基本原理和方法根据多媒体不同的表现形式和不同场合以及质量方面的应用需求,必须有针对性地进行设计。而各种压缩方法应该符合一定范围内的性能指标,以满足实际应用的领域的需要。7.1.1数据压缩方法的分类数据压缩技术自从1948年提出以来,经过50多年的发展。根据解码后的数据与压缩之前的原始数据是否完全一致,可以分为无损压缩编码和有损压缩编码。无损压缩编码具有可恢复性和可逆性。该编码在压缩时不丢失任何数据,即把所有的数据都作为比特序列,解压后的数据与原始数据完全一致。有损压缩编码不具有可恢复性和可逆性,该编码在压缩时舍弃冗余的数据,例如人眼较难分辨的颜色或人耳难以分辨的方向源信号,实际取决于初始信号的类型、信号的相关性以及语义等内容。这些被舍去的信息值是无法再找回的,所以还原后的数据与原始数据存在差异。统计编码:属于无失真编码。根据信源符号出现概率的分布特性进行编码,让概率大的信源符号用短码字表示,让概率小的信源符号用长码字表示,从而去除数据之间的冗余而达到压缩的目的。预测编码:根据离散信号之间存在一定的相关性特点,利用前面的一个或多个信号对下一个信号进行预测,然后对实际值和预测值的差值进行编码。如果所有的信源符号出现的概率相同,则说明平均信息量最大,也就不存在信源的冗余。根据数据压缩的原理可以分为:统计编码、预测编码、变换编码、分析-合成编码和其他编码。变换编码:属于有失真的编码。变换编码是将原始数据从初始空间或时间域进行数学变换,变换为更适合于压缩的抽象域。关键的是要寻找一个最佳变换,使信息中最重要的部分易于识别。变换本身是可逆的无损的,为了取得更好的效果,忽略了一些编码位数较长的系数而成为了有损编码。变换编码一般经过变换、变换域采样和量化三个步骤分析/合成编码:是基于某种模型的编码方法,这些模型可以是声道模型、语音模型、人体模型等。通过分析模型的具体特征,确定与之匹配的编码。其他编码方法常见的有:混合编码(HybridCoding)、矢量量化(VectorQuantize,VQ)、LZW算法等。还有近年来新出现的编码方法:人工神经元网络(ArtificialNeuralNetwork,ANN)算法、分形(Fractal)算法、小波(Wavelet)算法、基于对象(Object-Based)的算法、基于模型(Model-Based)的算法等。7.1.2数据压缩的性能指标衡量一种数据压缩技术的重要性能指标有压缩比、压缩速度、压缩质量和计算量。压缩比压缩比是指原始数据量和压缩后数据量的比值。有损压缩有很高的压缩比采用不同的压缩编码可得到不同的压缩比。无损压缩能实现的压缩比,一般只有数倍,而且与被压缩的对象有关。文字、图像普遍采用无损压缩。例如,MPGE是一种包含音频和图像在内的压缩技术,利用MPEG-1、MPEG-2、MPEG-4三个方案,对音频的感知编码中,MPEG-1方案的音频压缩比是1:4,MPEG-2方案的音频压缩比是1:6…1:8,MPEG-4方案的音频压缩比是1:10…1:12。但是MPEG对图像的压缩算法,所提供的压缩比可以高达200:1。利用JPEG也可以有多种图像的压缩比,甚至可以减小到原图像的百分之一(压缩比100:1)。压缩速度压缩速度指编码或解码的快慢程度。不同的应用场合,对压缩速度要求是不同的。对于一个压缩系统而言,有对称压缩和非对称压缩之分。所谓对称压缩,就是压缩和解压缩都需要实时进行的。例如:电视会议的图形传输。非对称压缩常常在解压缩方面要求是实时的,但压缩可以不是实时的。例如,多媒体CD-ROM的制作过程可以不是实时的,但解压缩必须是实时的,否则用户看到的就不是连续的图像。压缩质量压缩质量是指压缩以后对媒体的感知效果。有损压缩才可能影响人对媒体的感知效果。压缩质量的好坏与压缩算法、数据内容和压缩比有密切的关系。例如,使用JPEG编码时,当压缩比为20:1时,能看到图像稍微有点变化,当压缩比大于20:1时,一般图像质量开始变坏。但使用MPEG编码时,可以得到很好的数据压缩而依然保持CD声音质量的原样。在较高的压缩比下,也能获得较好的图像质量。计算量图像数据压缩需要进行大量计算,从目前的技术来看,压缩的计算量比解压缩计算量要大,例如动态图象的压缩编码计算量约为解压缩的计算量的4倍。7.2统计编码统计编码属于一种无失真的编码,具体实现的方法有多种,包括行程编码、LZW编码、Huffman编码、算术编码。本节在介绍了统计编码的基本思想之后,为读者引见LZW编码、Huffman编码、算术编码等几种实现方法。统计编码又称熵编码。根据信息论的原理,我们可以找到最佳的压缩编码方法,数据压缩的理论极限是信息熵。也就是说,信息中可能存在着冗余信息,要去除信息的冗余部分,使编码后单位数据量等于其信息源的熵,就达到了压缩极限。信息论指出,如果一个事件(例如收到一个信号)有n个等可能性的结局,那么结局未出现前的不确定程度H与n的自然对数成正比,即有:H=Clnn(C为常数)如果一个消息有10个可能的结果,不确定程度就是Cln10。当人们收到这个消息后,就消除了这种“不确定”性。这样,一个消息中所含有的信息量,就用表示有多少个不确定程度的H来定义,申农(香农)把这个不确定程度H称为信息熵。信息论认为信源中存在的冗余度来自于信源本身的相关性和信源概率分布的不均匀性。熵编码要解决的问题,是如何利用信息熵理论减少数据在存储和传输中的冗余度。也就是要找到去除信源的相关性和概率分布的不均匀性的方法。事件间的统计特性与熵有这样的关系。事件发生的概率越小,则其熵值越大,表示信息量越大,而发生的概率越大,则其熵值越小。统计编码就是根据信源符号出现概率的分布特性而进行工作的。统计编码需要在信源符号和码字之间确定严格的一一对应关系,以便准确无误地在先原来信源,同时使平均码长尽量小。统计编码对于出现概率比较高的数据分配短码,而对那些出现概率比较低的数据则分配长码。该方法使总数据量降低,达到数据压缩的目的。常用的统计编码有LZW编码、Huffman编码和算术编码。7.2.2LZW编码LZW(LempelZivWelch)压缩编码是一种压缩效率较高的无损数据压缩技术。1977年,两位以色列教授Lempel和Ziv提出了查找冗余字符和用较短的符号标记替代冗余字符的概念,称为Lempel-Ziv压缩技术。1985年,美国人Welch将Lempel-Ziv压缩技术从概念发展到实际运用阶段,因而被命名为“LempelZivWelch”压缩技术,简称“LZW”技术。LZW被广泛用于图像压缩领域。LZW压缩基本原理LZW压缩的基本原理是:LZW压缩把每一个第一次出现的字符串用一个数值来编码,在还原程序中再将这个数值还成原来的字符串。转换表是在压缩或解压缩过程中动态生成的表,该转换表只在进行压缩或解压缩过程中需要,一旦压缩或解压缩结束,该表将不再起任何作用。压缩过程生成的转换表,记录了代码和数据的对应关系,并且只用于压缩过程。在解压缩过程中,LZW压缩编码会生成另一个用于解压缩的转换表,该表与压缩时产生的转换表完全相同,数据以严格对应的无损方式被还原。例如用数值0x100代替字符串“abccddeee”这样每当出现该字符串时,都用0x100代替。把数据流中复杂的数据用简单的代码来表示,就起到了压缩的作用。并把代码和数据的对应关系建立一个转换表,又叫“字符串表”或“编码对照表”。LZW压缩的特点LZW压缩技术的处理过程比其他压缩过程复杂,但过程完全可逆。对于简单图像和平滑且噪音小的信号源具有较高的压缩比,并且有较高的压缩和解压缩速度。对机器硬件条件要求不高。LZW压缩技术可压缩任何类型和格式的数据。对于任意宽度和像素位长度的图像,都具有稳定的压缩过程。常用于GIF格式的图像压缩,其平均压缩比在2:1以上,最高压缩比可达到3:1。LZW压缩技术还可以被用于文本程序等数据压缩领域,对于数据流中连续重复出现的字节和字串,LZW压缩技术具有很高的压缩比。值得注意的是,规则数据具有可预测性,即从一个数据可预测到下一个将可能是什么数据。但LZW压缩技术对于可预测性不大的数据具有较好的处理效果7.2.3Huffman编码Huffman(哈夫曼)编码是统计编码的一种,属于无损压缩编码。该编码是在1952年为文本文件建立的,编码方法简单且有效,因而得到广泛的应用。现在已经派生出很多变体。Huffman编码基本原理Huffman编码的基本原理是用较短的代码代替出现概率较高的数据,用较长的代码代替出现概率较低的数据,所有代码都采用二进制码,其码的长度是可变的,且每个数据的代码各不相同。例如,对于原始数据序列A、B、C、E、D这五个字母,假定对应于每个字母出现的概率分别为0.30、0.25、0.22、0.15、和0.08,则可以编码为A(00)、B(01)、C(10)、(D110)、(D111),压缩后为000110110111。由此产生的全部信息的总码长将小于实际信息的符号长度,从而达到压缩的目的。整个编码过程实际上建立二叉树的过程,所以编码时需要对原始数据扫描两遍,第一遍扫描要精确地统计出原始数据中的每个值出现的频率,第二遍是通过合并最小概率来建立霍夫曼树,同时还要进行编码。由于需要对多层次的二叉树节点进行编码,因此数据压缩和还原速度都较慢。编码过程根据以上编码原理,Huffman编码的实际编码过程如下:1.将信源符号按照出现概率递减的顺序排列。2.将最小的两个概率进行相加合并,得到的结果作为新符号的出现的概率。3.重复进行1和2,直到概率的和值等于1。4.在进行消息概率合并运算时,可以对概率大的符号用编码0表示,概率小的符号用编码1表示。也可以相反表示,可以对概率大的符号用编码1表示,概率小的符号用编码0表示。5.最后,记录下从概率为1处开始到当前信源符号之间的0、1序列,从而得到每个符号的编码。设信号源为:x={x1,x2,x3,x4,x5}对应的概率为:p={0.30,0.25,0.22,0.15,0.08}则编码过程如图7-2所示,其中第一次将0.15和0.08概率进行合并,结果为0.23。继续此过程,历遍所有信号,直到概率和为1.0。当前信号源X1X2X3X4X5概率0.300.250.220.150.080.230.450.551.0000001111码字000110110111字长22233课后习题:设输入图像的灰度级{a1,a2,a3,a4,a5,a6}出现的概率分别是0.4、0.2、0.12、0.15、0.1、0.03。试进行哈夫曼编码,并计算平均码长、编码效率。Avg==0.30×2+0.25×2+0.22×2+0.15×3+0.08×3=2.0851iiipl计算该编码的平均字长为2.08,信息熵H(5)为1.6(假如常数C为1),那么编码效率约为77%。可见霍夫曼编码是一种效率较高的编码方案。但要指出的是,由于“0”和“1”的指定可以是任意的,所以上面所得到的编码不是唯一的。Huffman提出的这种编码也称为最佳变长码,其优点是编码的效率高,但这种编码依赖于源的统计特性,同时我们看到,Huffman编码只能通过查表的方法建立消息和码字之间的关系,所以如果消息数很大,需要存储的码表也需很大,从而会影响存储量、编码以及译码速度等各个方面的性能。7.2.4算术编码算术编码属于无损压缩的统计编码,常用于图像数据压缩标准(如JPEG,JBIG)中。算术编码基本原理算术编码的基本原理是将出现概率较多的“事件