论文部分内容阅读
摘 要:数据压缩(Data Compression),是指在一定的数据存储空间要求下,将相对庞大的原始数据,重组为满足前述空间要求的数据集合,使得从该数据集合中恢复出来的信息能够与原始数据相一致,或者能够获得与原始数据一样的使用品质。
关键词:无损压缩 有损压缩 LZW JPEG JPEG2000
压缩编码的理论基础是信息论。从信息论的角度看,信息定义为“用来消除不确定性的东西”。压缩是去掉信息中的冗余部分,也就是确定的或可推知的部分,用一种更接近信息本质的描述来代替原有冗余的描述。而信息之所以能够被压缩,是因为信息本身通常存在很大的冗余量,这些冗余量主要是由信息之间的相似性和可推知产生的。另一个原因是人的感官对信息之间的某些相似性并不敏感,去掉这部分冗余仍然不影响人们对信息的感知和理解。按是否压缩到信息熵,数据压缩方法被分为有损压缩算法和无损压缩算法两类。
无损压缩算法、无失真压缩算法,英文为 Lossless compression algorithms。无损压缩算法是为保留原始数据对象而设计的。在无损压缩中,数据在压缩和解压缩的过程中都不会被改变或损失。解压缩产生的数据是对原始数据的完整复制。
有损压缩算法,会造成一些信息熵的损失,只要这种损失被限制在可允许的范围内,有损压缩就是可接受的。经典的压缩编码方法通常有三种类型:预测编码、变换编码、统计编码。另外还有一些新的压缩方法:分形编码、小波变换图像压缩编码等。
由于计算机处理的信息是以二进制数的形式表示的,因此压缩软件就是把二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。为了有助于理解文件压缩,请您在脑海里想象一幅蓝天白云的图片。对于成千上万单调重复的蓝色像点而言,与其一个一个定义“蓝、蓝、蓝……”长长的一串颜色,还不如告诉电脑“从这个位置开始存储1117个蓝色像点”来得简洁,而且还能大大节约存储空间。这是一个非常简单的图像压缩的例子。其实,所有的计算机文件归根结底都是以“1”和“0”的形式存储的,和蓝色像点一样,只要通过合理的数学计算公式,文件的体积都能够被大大压缩以达到“数据无损稠密”的效果。如果丢失个别的数据也不会造成太大的影响,这时忽略它们是个好主意,这就是有损压缩。
最典型的无损压缩算法就是Lempel-Ziv-Welch (LZW),该算法主要应用有文本压缩、Gif图像压缩等等。LZW压缩算法是一种新颖的压缩方法,由Lemple、Ziv、Welch 三人共同创造,用他们的名字命名。它采用了一种先进的串表压缩,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图像文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确地建立这个串表,压缩或解压缩完成后,这个串表又被丢弃。
LZW算法中,首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文件中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。压缩完成后将串表丢弃。如“print”字符串,如果在压缩时用266表示,只要再次出现,均用266表示,并将“print”字符串存入串表中,在图像解码时遇到数字266,即可從串表中查出266所代表的字符串“print”,在解压缩时,串表可以根据压缩数据重新生成。
Zip就是对两种在计算机数据中重复的数据进行压缩。
第一种是短语形式的重复,即三个字节以上的重复。对于这种重复,Zip用两个数字:1.重复位置距当前压缩位置的距离;2.重复的长度,来表示这个重复。假设这两个数字各占一个字节,于是数据便得到了压缩,这很容易理解。
第二种重复为单字节的重复,一个字节只有256种可能的取值,所以这种重复是必然的。其中,某些字节出现次数可能较多,另一些则较少,在统计上有分布不均匀的倾向,这是容易理解的,比如一个 ASCII 文本文件中,某些符号可能很少用到,而字母和数字则使用较多,各字母的使用频率也是不一样的,据说字母 e 的使用概率最高;许多图片呈现深色调或浅色调,深色(或浅色)的像素使用较多(这里顺便提一下:Png 图片格式是一种无损压缩,其核心算法就是 Zip 算法,它和 Zip 格式的文件的主要区别在于:作为一种图片格式,它在文件头处存放了图片的大小、使用的颜色数等信息);上面提到的短语式压缩的结果也有这种倾向:重复倾向于出现在离当前压缩位置较近的地方,重复长度倾向于比较短(20字节以内)。这样,就有了压缩的可能:给 256 种字节取值重新编码,使出现较多的字节使用较短的编码,出现较少的字节使用较长的编码,这样一来,变短的字节相对于变长的字节更多,文件的总长度就会减少,并且,字节使用比例越不均匀,压缩比例就越大。
然而,对于图像压缩来说,一定的信息损失通常是可以接受的,原因主要有以下三点:
·人类视觉系统可以容忍很大的信息损失而不妨碍对场景内容的感知;
·在大多数情况下,压缩算法的数字输入本身是对真实场景的不完全描述;
·无损压缩通常不能够达到许多存储和分布应用的高压缩要求。
所以,我们产生了对图像的有损压缩JPEG图像。JPEG是联合图象专家组(Joint Picture Expert Group)的英文缩写,是国际标准化组织(ISO)和CCITT联合制定的静态图像的压缩编码标准。JPEG是目前压缩比最高的图像。
JPEG是采用变换编码进行信息压缩的。所谓变换编码是指,将给定的图像变换到另一个数据域(如频域)上,使得大量的信息能用较少的数据来表示,从而达到压缩的目的。变换编码有很多,如(1)离散傅立叶变换(Discrete Fourier Transform,简称DFT);(2)离散余弦变换(Discrete Cosine Transform,简称DCT);(3)离散哈达玛变换(Discrete Hadamard Transform,简称DHT)。
JPEG的压缩编码器的流程为:
我们将图像分为很多8×8的图像,而8×8的图像经过DCT变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT变换实际上是空间域的低通滤波器)。由于该低频分量包含了图像的主要信息(如亮度),而高频与之相比,就不那么重要了,所以我们可以忽略高频分量,从而达到压缩的目的。当然,将高频分量进行省略,也就是信息损失的根源。
JPEG 2000 与传统 JPEG 最大的不同,在于它放弃了 JPEG 所采用的以离散余弦转换(Discrete Cosine Transform) 为主的区块编码方式,而改采以小波转换(Wavelet transform) 为主的多解析编码方式。小波转换的主要目的是要将影像的频率成分抽取出来。
参考文献:
[1][美]萨洛蒙.数据压缩原理与应用(第二版).电子工业出版社,2003年9月.
[2][美]David S.TaubmanMichael W.Marcellin .JPEG2000 图像压缩基础、标准和实践.电子工业出版社,2004年4月.
[3]马平.数字图像处理和压缩.电子工业出版社,2007年4月.
关键词:无损压缩 有损压缩 LZW JPEG JPEG2000
压缩编码的理论基础是信息论。从信息论的角度看,信息定义为“用来消除不确定性的东西”。压缩是去掉信息中的冗余部分,也就是确定的或可推知的部分,用一种更接近信息本质的描述来代替原有冗余的描述。而信息之所以能够被压缩,是因为信息本身通常存在很大的冗余量,这些冗余量主要是由信息之间的相似性和可推知产生的。另一个原因是人的感官对信息之间的某些相似性并不敏感,去掉这部分冗余仍然不影响人们对信息的感知和理解。按是否压缩到信息熵,数据压缩方法被分为有损压缩算法和无损压缩算法两类。
无损压缩算法、无失真压缩算法,英文为 Lossless compression algorithms。无损压缩算法是为保留原始数据对象而设计的。在无损压缩中,数据在压缩和解压缩的过程中都不会被改变或损失。解压缩产生的数据是对原始数据的完整复制。
有损压缩算法,会造成一些信息熵的损失,只要这种损失被限制在可允许的范围内,有损压缩就是可接受的。经典的压缩编码方法通常有三种类型:预测编码、变换编码、统计编码。另外还有一些新的压缩方法:分形编码、小波变换图像压缩编码等。
由于计算机处理的信息是以二进制数的形式表示的,因此压缩软件就是把二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。为了有助于理解文件压缩,请您在脑海里想象一幅蓝天白云的图片。对于成千上万单调重复的蓝色像点而言,与其一个一个定义“蓝、蓝、蓝……”长长的一串颜色,还不如告诉电脑“从这个位置开始存储1117个蓝色像点”来得简洁,而且还能大大节约存储空间。这是一个非常简单的图像压缩的例子。其实,所有的计算机文件归根结底都是以“1”和“0”的形式存储的,和蓝色像点一样,只要通过合理的数学计算公式,文件的体积都能够被大大压缩以达到“数据无损稠密”的效果。如果丢失个别的数据也不会造成太大的影响,这时忽略它们是个好主意,这就是有损压缩。
最典型的无损压缩算法就是Lempel-Ziv-Welch (LZW),该算法主要应用有文本压缩、Gif图像压缩等等。LZW压缩算法是一种新颖的压缩方法,由Lemple、Ziv、Welch 三人共同创造,用他们的名字命名。它采用了一种先进的串表压缩,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图像文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确地建立这个串表,压缩或解压缩完成后,这个串表又被丢弃。
LZW算法中,首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文件中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。压缩完成后将串表丢弃。如“print”字符串,如果在压缩时用266表示,只要再次出现,均用266表示,并将“print”字符串存入串表中,在图像解码时遇到数字266,即可從串表中查出266所代表的字符串“print”,在解压缩时,串表可以根据压缩数据重新生成。
Zip就是对两种在计算机数据中重复的数据进行压缩。
第一种是短语形式的重复,即三个字节以上的重复。对于这种重复,Zip用两个数字:1.重复位置距当前压缩位置的距离;2.重复的长度,来表示这个重复。假设这两个数字各占一个字节,于是数据便得到了压缩,这很容易理解。
第二种重复为单字节的重复,一个字节只有256种可能的取值,所以这种重复是必然的。其中,某些字节出现次数可能较多,另一些则较少,在统计上有分布不均匀的倾向,这是容易理解的,比如一个 ASCII 文本文件中,某些符号可能很少用到,而字母和数字则使用较多,各字母的使用频率也是不一样的,据说字母 e 的使用概率最高;许多图片呈现深色调或浅色调,深色(或浅色)的像素使用较多(这里顺便提一下:Png 图片格式是一种无损压缩,其核心算法就是 Zip 算法,它和 Zip 格式的文件的主要区别在于:作为一种图片格式,它在文件头处存放了图片的大小、使用的颜色数等信息);上面提到的短语式压缩的结果也有这种倾向:重复倾向于出现在离当前压缩位置较近的地方,重复长度倾向于比较短(20字节以内)。这样,就有了压缩的可能:给 256 种字节取值重新编码,使出现较多的字节使用较短的编码,出现较少的字节使用较长的编码,这样一来,变短的字节相对于变长的字节更多,文件的总长度就会减少,并且,字节使用比例越不均匀,压缩比例就越大。
然而,对于图像压缩来说,一定的信息损失通常是可以接受的,原因主要有以下三点:
·人类视觉系统可以容忍很大的信息损失而不妨碍对场景内容的感知;
·在大多数情况下,压缩算法的数字输入本身是对真实场景的不完全描述;
·无损压缩通常不能够达到许多存储和分布应用的高压缩要求。
所以,我们产生了对图像的有损压缩JPEG图像。JPEG是联合图象专家组(Joint Picture Expert Group)的英文缩写,是国际标准化组织(ISO)和CCITT联合制定的静态图像的压缩编码标准。JPEG是目前压缩比最高的图像。
JPEG是采用变换编码进行信息压缩的。所谓变换编码是指,将给定的图像变换到另一个数据域(如频域)上,使得大量的信息能用较少的数据来表示,从而达到压缩的目的。变换编码有很多,如(1)离散傅立叶变换(Discrete Fourier Transform,简称DFT);(2)离散余弦变换(Discrete Cosine Transform,简称DCT);(3)离散哈达玛变换(Discrete Hadamard Transform,简称DHT)。
JPEG的压缩编码器的流程为:
我们将图像分为很多8×8的图像,而8×8的图像经过DCT变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT变换实际上是空间域的低通滤波器)。由于该低频分量包含了图像的主要信息(如亮度),而高频与之相比,就不那么重要了,所以我们可以忽略高频分量,从而达到压缩的目的。当然,将高频分量进行省略,也就是信息损失的根源。
JPEG 2000 与传统 JPEG 最大的不同,在于它放弃了 JPEG 所采用的以离散余弦转换(Discrete Cosine Transform) 为主的区块编码方式,而改采以小波转换(Wavelet transform) 为主的多解析编码方式。小波转换的主要目的是要将影像的频率成分抽取出来。
参考文献:
[1][美]萨洛蒙.数据压缩原理与应用(第二版).电子工业出版社,2003年9月.
[2][美]David S.TaubmanMichael W.Marcellin .JPEG2000 图像压缩基础、标准和实践.电子工业出版社,2004年4月.
[3]马平.数字图像处理和压缩.电子工业出版社,2007年4月.