图像压缩算法简洁说明

图像压缩算法简要说明

        图像压缩的目的是减少图像的不相关性和冗余性使得其能够以有效的形式存储或者传输。图像压缩分为有损压缩和无损压缩,无损图像压缩常用于档案资料、医学、工程制图、剪贴画和漫画。有损图像压缩,对于低比特流的传输条件下常使用。有损图像压缩对于那些可以牺牲少许的图像质量而希望获得低比特传输的图像具有很广泛的应用。


近年来越来越多的研究人员注意到图像压缩的重要性,其主要原因就在于图像文件不仅占据内存空间,而且也占据大量的传输带宽,因此存储和传输前对图像进行压缩就成为必然在对图像的直接操作之前,也需要解压缩。
  而压缩分为两类:有损压缩和无损压缩,有损压缩允许图像在压缩前和解压缩后有一定程度的不同。而对无损压缩而言,图像在压缩前和解压缩后应该完全一样,不允许有一位的差错。


有损压缩应用于一般图像,如风景,人物照片,部分医疗图像等,如大家接触的JPEG图像格式一般都是有损压缩。有损压缩的压缩比很高,能达到10∶1,20∶1,甚至到40∶1,主要原因就在于原始图像的像素值可以用一些近似值代替,因为人眼对这些差距并不十分敏感,这也体现了一种对图像数据的精确性,存储空间和带宽占用的折中处理。
  无损压缩应用于认证签名图像处理和档案图像领域,医疗图像也逐步采用无损压缩方法,例如美国政府已颁布法律规定,在医疗处理中不再使用无损压缩,因为由于图像的不清晰而导致的医生误诊已经带来很多社会问题,而且医疗成像设备如CT,MRI等价格极其昂贵,图像的获取代价高昂,因此这些图像最好采取无损压缩。但无损图像的压缩比并不是很高,一般只有2∶1到4∶1。
  对压缩图像的质量评价主要有四种方法:均方差(MSE)、信噪比(SNR),主观评定(Subjective Rating)和诊断精确评定Diagnostic Accuracy)。假设一幅压缩前图像表示为一向量A=(A0,A1,…Am-1),经过压缩的图像表示为B=(B0,B1,Bm-1),d(A,B)表示为A,B之间的差距,平均差距D=E[d(A,B)]用来表示平均像素差距,通常d(A,B)定义为

而D为A和B的均方差

在图像压缩中,信噪比(SNR)通常为峰值对峰值(Peak-to-peak)信噪比(SNRp)

由于采用上述两种评定方法所得到的结果与人眼评定结果并不总是一致,主观评定也就成为不可缺少的方法。图像呈现给评定者,并让他们在1~5基础上打分。
  诊断精确性评定在医疗图像中作用很重要,尤其应用在医院外科仿真如屏幕诊断等。在一系列外科诊断方法中,最常见的是ROC(Receiver Operating Characteristic),这是一种统计分析,针对不同的任务决定哪些图像压缩效果更好或更差。
  除了上述提到的四种评定方法外,还可以采用另外两种方法来评价压缩方法:压缩效率和复杂度。压缩效率也经常被称为压缩比,它指的是原始图像数据与压缩图像数据的大小比率。复杂度反映了一种压缩方法的代价,它可以通过数据操作的数目来度量、如加、减,乘运算等。
  对于有损压缩方法的判定,上述六种方法都可以使用,但对于有损压缩而言,比较也就只能基于压缩效率和复杂度。

2 图像压缩的原理
  对图像进行压缩可以不损失过多的视觉信息,这里主要有三个原因。首先,由于相邻像素之间的相关性,图像包含相当高的空间冗余度。其次,由于图像中不同色彩组成部分的相关性,它也包含一定程度的色谱冗余度。第三,人类视觉系统也造成了某种程度的心理视觉冗余度,从理论的角度来看,应针对图像数据中的冗余信息获得尽可能高的压缩度。
  空间(统计)冗余度的存在主要在于:当所接触的图像中的像素值并非完全是随机的,它们体现了一定程度的渐进变化,人的心理视觉冗余度主要是由于人类视觉系统对某些空间频率并不敏感。典型的图像压缩系统主要由三部分组成:变换部分(Transformer)、量化部分(Quatizer)、和编码部分(Coder)。
  变换部分
  它体现了输入原始图像和经过变换的图像之间的一一对应关系。变换也称为去除相关,它减少了图像中的冗余信息,与输入原始图像数据相比,变换后的图像数据提供了一种更易于压缩的图像数据表示形式。
  量化部分
  量化部分把经过变换的图像数据作为输入进行处理后,会得到有限数目的一些符号。一般而言,这一步会带来信息的损失,而这也恰是有损压缩方法和无损压缩方法之间主要的区别。在无损压缩方法中,这一步骤并不存在,这是一个不可逆的过程,原因就在于这是多到一映射,存在有两种量化类型:标量量化与矢量量化,前者是在一个像素、一个像素的基础上量化,而后者对像素向量进行量化。
  编码部分
  这是压缩过程中最后一个步骤。这个部分将经过变换的系数(量化或未量化)编码为二进制位流,这个部分可以采用固定长编码,或变动长度编码,前者对所有符号赋予等长的编码,而后者则对出现频率较高的符号分配较短的编码,变动长度编码也叫熵(Entropy)编码,它能把经过变换得到的图像系数(Coefficients)数据以较短的信息总长度来表示,因而在实际应用中,多采用此类编码方式,得到的图像系数(Coefficients)数据可以一个离散随机过程S来表示。不同的系数(Coefficients)值形成一个字母表A={Ai| i=0,1,…N-1},Ai称为字母表中的一个字符,每个Ai出现的概率记为p(Ai),那么此过程的熵H(S)可以用下列公式来表示。


哈夫曼编码和算术编码为两种熵(Entropy)编码方式,虽然它们只代表上述三个步骤中的最后一个但由于这种编码方式比定长编码能达到压缩数据的方式它们当然也可以认为是无损压缩的方法。
3 算法与实现
  哈夫曼编码
  仙农的论文指出,存在一种对信息源编码方法,可以使编码长度与熵编码长度接近。仙农只是说明存在这样的一种算法:即对信息的编码有极限值——熵,他并未说明如何才能接近这个极限值。这个工作是由哈夫曼完成的。哈夫曼编码对由较高出现概率的符号使用较短编码,较低出现概率的符号使用较长的编码。
  游长编码
  游长编码利用了图像中的重复像素值,例如,一图像中往往包含许多连续的相同像素。这个方法的主要思想就在于:使用一个起始像素代表具有相同值的一连续像素串,用一整数代表这个串的长度。在实际应用中,这种方法并非总能压缩数据。对于那些具有足够多的连续像素串的图像而言。这种方法可以压缩,然而对那些在图像局部区域像素值经常发生变化的图像,这种方法会增大图像。
  游长编码+哈夫曼编码
  这意味着先对原始图像进行游长编码压缩,然后再对该压缩图像施用哈夫曼编码再压缩。有人认为这样一定会得到更高的压缩比率,实验结果显示在一些情况下,这种方法得到的压缩比并不如直接使用哈夫曼编码进行压缩。
算术编码
  算术编码实际上是对具有变化长度的符号块分配变化长度的编码。在算术编码中有两个主要元素:每个符号的出现概率及区间0,1)。通过例子进行描述假设有4个符号00,01,10,11,相应的出现概率分别为0.1,0.3,0.4,0.2。对每个符号分配一概率区间结果为

假设有一条信息:01 11 00,在处理每个符号时与这条信息相关的区间缩小为分配给该字符的那部分区间,随着处理的进行区间变得越来越小。可以通过下述例子进行说明。
[0,0.1)[0.1,0.4)[0.40.8)[0.81.0)
01->区间 =[0.1,0.4)
  11->区间 =[0.1+(0.4-0.1)×0.8,0.1+(0.4-0.1)×1.0) =[0.1+0.24,0.1+0.3) =[0.34,0.4)
  00->区间 = [0.34+(0.4-0.34)×0,0.34+ (0.4-0.34)×0.1) =[0.340.34+0.006) = [0.34,0.346)
  然后这条信息可以编码为区间[0.34,0.346),是在0.34,0.346)中的任何数。
LZW编码
LZW是一种基于字典算法的压缩方法。虽然这种方法到70年代后期才出现,它主要与日常生活中的很多事物类似,如在一本字典中,一个单词唯一由该单词所在的页号以及本页中的次序号决定,这样假若一个人向他人介绍所指的单词时,他只需指明页码号及次序号即可。实际上这就是一种用地址来指代信息的方法。在图像压缩中,可以采用同样的方法。一个像素序列若经常出现的话,就可以表示为一个索引信息。
JPEG无损压缩模式
JPEG标准(ISO/IEC IS 10918)定义了基于DCT的操作模式,这种模式是有损图像压缩。JPEG无损编码模式中定义了一个无损处理模式,它将一个预测过程与哈夫曼编码或算术编码相结合了。假设在一幅图像中,像素x的相邻像素a,b,c已经已知。问题就变成了如何预测x的像素值。预测可由下式给出,x的值用Px表示,可以用JPEG标准中所采用的8个方程式来进行预测。
选择值 预测
    0  No prediction
    1  Px=a
   2  Px=b
   3  Px=c
   4  Px=a+b-c
   5  Px=a+b-c /2
   6  Px=b+a-c /2
  7  Px=a+b /2
将像素的预测值与实际输入值的差距进行哈夫曼编码或算术编码就达到了压缩图像的目的。
SLIC算法
最近在IEEE期刊上有人提出了一种方法SLIC,这也是一种无损压缩的方法。其主要思想就
是先将输入的图像分解为几个不同的部分,然后再用JBIG压缩这些部分,它是一种基于康拓结构的方法(1982,Kocher and Kunt[1]),但是SLIC克服了原先存在于此类方法中的一些缺点,它引出了一种区域扩散的概念。(1)通过这个方法得到了一个不连续性图,而不是以往的产生一个康拓集;(2)基于相邻的像素差,产生一个差错图像;(3)用JBIG来对上述两个数据集合进行压缩比较有效;(4)变换处理不仅出现在区域扩散过程中,也出现在JBIG算法中。
图像在经过处理后分为三部分:差错图像数据部分,不连续索引图像数据部分和高位种子数据部分。前两个采用JBIG标准编码,第三部分不经压缩直接存储。
4 试验结果及分析
本小节的主要目的在于评价上述几种无损图像压缩算法的性能。它们被应用于16幅图像上,这组图像包含生活照片、超声波图像及医疗图像,医疗图像取自一个3D人头图像,所有图像的大小为256×256/512×512,8位像素。
  总的来说,SLIC方法的图像压缩比最好,JPEG,算术,哈夫曼,游长+哈夫曼,LZW编码逐次递减。
  在对三幅图的处理上,LZW实际上没有压缩图像,反而增大了图像,主要原因就在于这些图像数据由于缺少足够的重复像素值,因为LZW使用12位的索引来代替图像的8位像素值。
  SLIC在对医疗图像的压缩方面,超过JPEG而称为最佳选择,但在图像Lenna(512×512)上,它的压缩比(4.9342)不如JPEG(4.6947)的好,这说明SLIC更适用于医疗图像,而并非一般图像。
  对于游长+哈夫曼编码,有一点需要说明,尽管它对Lenna,Peper和超声波图像压缩效果比较好,它对于实验中采用的医疗图像压缩效果比仅采用哈夫曼编码效果差,这说明采用哈夫曼编码也可以得到很好的压缩效果,而采用将游长和哈夫曼编码结合起来的方法并不能得到较高的压缩比。





本人现在研究VESA_DSC压缩算法,想借用此博客来和大家分享交流一下技术经验,慢慢一点点跟新内容吧,[email protected],我们做一个技术上的交流,先来一个简介:

视频电子标准协会(Video Electronics Standards Association, VESA)是由代表来自世界各地的、享有投票权利的140多家成员公司的董事会领导的非盈利国际组织,总部设立于加利福尼亚州的Milpitas,自1989年创立以来,一直致力于制订并推广显示相关标准。




相关文献:

1.无损数据压缩算法历史:http://blog.jobbole.com/77247/;

2.


相关内容推荐