第十四章 图象压缩
目录
1. 引言
2. 无损压缩
2.1 行程编码(RLE)
2.2 LZW编码
2.3 Huffman编码
3. 有损压缩
3.1 量化
3.2 预测编码
3.3DCT编码
3.4 其它变换编码
作业
1. 引言
图象压缩是通过删除图象数据中冗余的或者不必要的部分来减小图象数据量的技术,压缩过程就是编码过程,解压缩过程就是解码过程。压缩技术分为无损压缩和有损压缩,前者在解码时可以精确地恢复原图象,没有任何损失;后者在解码时只能近似原图象,不能无失真地恢复原图象。
按照信息论,设有一个无记忆的信源,它产生消息的概率是已知的,记为
,则信息量定义为:
可见越是不可能出现的消息,它的出现对信息的贡献量越大:
· 一个消息出现的可能性越小,其信息量就越多;
· 而消息出现的可能性越大,其信息量就越少。
熵:信源的平均信息量称为“熵”(entropy),即
上式取以2为底的对数时,单位为比特(bits):
根据Shannon(香农)无噪声编码定理,对于熵为H的信号源,对其进行无失真编码所可能达到的最低比特数为,这里
为一任意小的正数,因此可能达到的最大压缩比为:
其中B是原始图象的平均比特率,且定义压缩比为:
2.无损压缩
无损压缩是一般的数据压缩方法,适用于普通的数据文件(不必是图象),有基于码表的技术和基于统计的技术两类。基于码表的技术生成的文件包含的是定长码(通常是12至16位),每个码代表原文件中数据的一个特定序列。基于统计的技术通过用较短的代码代表频繁出现的字符,用较长的代码代表不常出现的字符,从而实现数据压缩。无损的图象压缩方法通常只能获得1~5倍的压缩率。
2.1 行程编码(RLE)
在一个逐行存储的图象中,具有相同灰度值的一些象素组成的序列称为一个行程。在编码时,对于每个行程只存储一个灰度值的码,再紧跟着存储这个行程的长度。这种按照行程进行的编码被称为行程编码(Run Length Encoding)。
行程编码对于仅包含很少几个灰度级的图像,特别是二值图象,比较有效。
参见:Design of Utach RLE Format
2.2 LZW编码
LZW编码是由Lemple和Ziv提出并经Welch扩充而形成的无损压缩专利技术。在对文件进行编码时,需要生成特定字符序列的表以及对应的代码。每当表中没有的字符串出现时,就把它与其代码一道存储起来。这以后当该串再次出现时,只存储其代码。实际上,字符串表是在压缩过程中动态生成的,而且由于解压缩算法可以从压缩文件中重构字符串表,因而字符串表也不必存储。
参见:LZW compression(..\Readings\chapter14\lzw.htm)
LZW expression(..\Readings\chapter14\lzwexp.htm)
2.3 Huffman编码
Huffman编码是50年代提出的一种基于统计的无损编码方法,它利用变长的码来使冗余量达到最小。通过一个二叉树来编码,使常出现的字符用较短的码代表,不常出现的字符用较长的码代表。静态Huffman编码使用一棵依据字符出现的概率事先生成好的编码树进行编码。而动态Huffman编码需要在编码的过程中建立编码树。
由于Huffman编码所得到的平均码字长度可以接近信源的熵,因此在变长编码中是最佳的编码方法,故也称为熵编码。
`Huffman算法:
1. 对L个符号按其概率值P递减顺序排列,并作为一棵树的叶结点
2. 如果没有到根结点则
(1) 把两个概率值最小的结点合并成一个新结点并赋予其概率为两子结点概率之和;
(2) 对新结点到两个子结点的树枝分别赋值1和0
3. 从根结点开始到叶结点,将树枝上的值按顺序组成二进制值,则为该叶结点上符号的Huffman码字。
例如,
· 这种编码方法形成的码字是可辨别的,即一个码字不能成为另一码字的前缀
· Huffman编码对不同的信源其编码效率不同,适合于对概率分布不均匀的信源编码。
3. 有损压缩
为了获得较高的压缩比,常见的图象压缩算法,如变换编码压缩算法,涉及量化过程,因而都是有损的压缩算法,通常的压缩率范围为3~50。
3.1量化
将图象用较少的灰度级别来表示是最简单的减小数据量的方法,这种方法就是标量量化方法。更一般的情况是,针对连续量的采样过程,量化是用有限个状态来表示连续值。标量量化器Q(.)是一个函数,用有限个判决层和重构层
定义而成:
![]() |
矢量量化可定义成用有限个矢量状态表示一组矢量,每个矢量是一些连续值的采样。在图象压缩中,标量量化和矢量量化通常用于变换域内的图象表示。
3.2预测编码
预测编码根据数据在时间和空间上的相关性,根据统计模型利用已有样本对新样本进行预测,将样本的实际值与其预测值相减得到误差值,再对误差值进行编码。由于通常误差值比样本值小得多,因而可以达到数据压缩的效果。
模拟量到数字量的转换过程是脉冲编码调制过程PCM (pulsecode modulation),也称PCM编码。对于图象而言,直接以PCM编码,存储量很大。预测编码可以利用相邻象素之间的相关性,用前面已出现的象素值估计当前象素值,对实际值与估计值的差值进行编码。常用的一种线性预测编码方法是差分脉冲编码调制DPCM (differential pulse code modulation)。
线性预测形式如下:
![]() |
最佳线性预测选择系数使均方误差最小:
![]() |
最优解是如下方程的解:
![]() |
由于DCT变换与KL变换(KL变换完全消除了数据的相关性,是最佳的正交变换,因而也是理论上最优的压缩变换方法)最为接近(参见第十一章),DCT变换是图象压缩标准中常用的变换方法,如JPEG标准中将图象按照8x8分块利用DCT变换编码实现压缩。
详见:The JPEG Still Picture CompressionStandard(..\Readings\chapter14\jpg.pdf)
3.4 其它变换编码
变换方法是实现图象数据压缩的主要手段,其基本原理是首先通过变换将图象数据投影到另一特征空间,降低数据的相关性,使有效数据集中分布;再采用量化方法离散化,最后通过Huffman等无损压缩编码进一步压缩数据的存储量。3.3节的DCT是一种常用的变换域压缩方法,是JPEG,MPEGI-II等图象及视频信号压缩标准的算法基础。在实际采用DCT编码时,需要分块处理,各块单独变换编码,整体图象编码后再解压会出现块状人工效应,特别是当压缩比较大时非常明显,使图象失真。因此,为了获得更高的图象压缩比,人们提出了一些其它方法,如基于小波变换的图象压缩算法和基于分形的图象压缩算法等。
基于小波变换的图象压缩算法首先使用某种小波基函数将图象做小波变换,再根据四个通道的不同情况,分别量化编码,比如对低频频段(LL)采用较多的量化级别,而对中间频段(LH,RH)采用较少量化级别,对高频频段(HH)采用很少几个量化级别,这样根据重构时对复原信号的重要程度分别对待的方式可以有效地提高压缩比而又不产生明显的失真。由于小波变换不使用DCT变换方法中的固定大小的块分别编码的处理方法,而是通过整体的多级(通常用3-5个级别)变换方法实现,没有块状效应。小波变换可以获得10-50倍的压缩比而没有明显的失真。小波变换在静态图象压缩中的作用已经得到公认,为JPEG2000标准所采纳。
基于分形的图象压缩算法利用图象中的自相似性根据分形算法压缩图象,对一些典型图象如自然景物等在理论上可以获得非常高的压缩比,在实践中,由于存在着如何定义及度量自相似性等困难,目前还很难自动地获得不同分辨率下的有效的自相似性描述,一般需要针对具体图片进行人工干预,以便获得最佳的效果。因而作为一种通用图象压缩工具还有待研究。现在的分形压缩算法,需要按块为单位处理,通过迭代优化方法实现,比较复杂。目前有些系统性的研究[5],但还缺乏稳定的性能保障,没有被广泛采用。
参考文献
1. 钟玉琢,多媒体技术,(高级),清华大学出版社,1999。
2. P.K. Andleigh, K. Thakrar (徐光佑、史元春译), 多媒体系统设计,Prentice Hall, 1998.
3. Borko Furht, Stephen W.Smoliar, HongJiang Zhang, Video and image processing in multimedia systems,Kluwer Academic Publishers, Boston ,1995.
4. Vasudev Bhaskaran, KonstantinosKonstantinides, Image and video compression standards: algorithms andarchitectures, Kluwer Academic Publishers, Boston, 1995.
5. Ning Lu, Fractal imaging,Academic Press, San Diego,1997
6. 张春田,苏育挺,张静,数字图象压缩编码,清华大学出版社, 2006.1
作业
1. 阅读有关Jpeg压缩标准的相关文献,利用Jpeg的C源码在MS-VC6环境下实现图象的压缩存储(bmp转成jpeg)。
2. 编制利用小波变换实现图象压缩的程序。
返回主目录 返回本章目录
清华大学计算机系 艾海舟
最近修改时间:2001年7月19日
出处:http://media.cs.tsinghua.edu.cn/~ahz/digitalimageprocess/CourseImageProcess.html