<p><strong>可以在网上搜索到不少算法介绍,也有专门的书籍,我转过来两篇!</strong></p><p><strong></strong></p><p><strong>浅谈图像压缩算法<br/>余科亮 <table class="ubb" cellspacing="0"><tbody></tbody></table></strong></p><table class="ubb" cellspacing="0"><tbody></tbody></table><p></p><p><table cellspacing="1" width="99%" border="0"><tbody><tr><td align="center" width="100%" colspan="4"><b><font class="BHEAD" color="#333399">几种无损图像压缩方法的比较与研究<!--Element not supported - Type: 8 Name: #comment--></font></b></td></tr><tr><td width="100%" bgcolor="#bbbbbb" colspan="4" height="1"></td></tr><tr><td class="nava" align="center" width="25%"><p style="MARGIN-RIGHT: 10px;"><font face="Arial, Helvetica, sans-serif">作者:<!--Element not supported - Type: 8 Name: #comment-->吴达军 李 晔<!--Element not supported - Type: 8 Name: #comment--></font></p></td><td class="nava" align="center" width="25%"><font face="Arial, Helvetica, sans-serif"><!--Element not supported - Type: 8 Name: #comment--><!--Element not supported - Type: 8 Name: #comment--></font></td><td class="nava" align="center" width="35%"><font face="Arial, Helvetica, sans-serif"><!--Element not supported - Type: 8 Name: #comment--><!--Element not supported - Type: 8 Name: #comment--></font></td><td class="nava" align="center" width="15%"><font face="Arial"><script src="http://www.videostar.com/cgi-bin/wenzhang/count.cgi?id=149"></script> </font></td></tr><tr><td class="txt" width="100%" colspan="4"><!--Element not supported - Type: 8 Name: #comment-->【<font color="#0000ff">摘要</font>】 对几种无损图像压缩的方法进行了介绍、比较和分析、比较基于不同类型的图像数据,比较结果显示一种基于分片的无损编码(SLIC)方法(它属于一种区域扩散算法)在对医疗图像的压缩效果上比其它方法优越,但是它对一般通用图像的压缩效果并不是最好,这说明不同类型的图像体现不同类型的特征,针对不同类型的图像而采用相应的算法可以达到降低传输带宽和减少存储空间的效果。<br/>【<font color="#0000ff">关键词</font>】 图像压缩; 无损压缩; 有损压缩 <br/><font color="#800000">1 引言</font><br/> <br/> 近年来越来越多的研究人员注意到图像压缩的重要性,其主要原因就在于图像文件不仅占据内存空间,而且也占据大量的传输带宽,因此存储和传输前对图像进行压缩就成为必然?在对图像的直接操作之前,也需要解压缩。 <br/> 而压缩分为两类:有损压缩和无损压缩,有损压缩允许图像在压缩前和解压缩后有一定程度的不同。而对无损压缩而言,图像在压缩前和解压缩后应该完全一样,不允许有一位的差错。 <br/> 有损压缩应用于一般图像,如风景,人物照片,部分医疗图像等,如大家接触的JPEG图像格式一般都是有损压缩。有损压缩的压缩比很高,能达到10∶1,20∶1,甚至到40∶1,主要原因就在于原始图像的像素值可以用一些近似值代替,因为人眼对这些差距并不十分敏感,这也体现了一种对图像数据的精确性,存储空间和带宽占用的折中处理。 <br/> 无损压缩应用于认证签名图像处理和档案图像领域,医疗图像也逐步采用无损压缩方法,例如美国政府已颁布法律规定,在医疗处理中不再使用无损压缩,因为由于图像的不清晰而导致的医生误诊已经带来很多社会问题,而且医疗成像设备如CT,MRI等价格极其昂贵,图像的获取代价高昂,因此这些图像最好采取无损压缩。但无损图像的压缩比并不是很高,一般只有2∶1到4∶1。 <br/> 对压缩图像的质量评价主要有四种方法:均方差(MSE)、信噪比(SNR),主观评定(Subjective Rating)和诊断精确评定?Diagnostic Accuracy)。假设一幅压缩前图像表示为一向量A=(A<sub>0</sub>,A<sub>1</sub>,…A<sub>m-1</sub>),经过压缩的图像表示为B=(B<sub>0</sub>,B<sub>1</sub>,B<sub>m-1</sub>),d(A,B)表示为A,B之间的差距,平均差距D=E[d(A,B)]用来表示平均像素差距,通常d(A,B)定义为 <br/><center><img height="43" alt="" src="http://www.videostar.com/technology%20article/mpeg/images/g1-3.gif" width="225" border="0"/></center><br/>而D为A和B的均方差 <br/><center><img height="42" alt="" src="http://www.videostar.com/technology%20article/mpeg/images/g2-3.gif" width="214" border="0"/></center><br/>在图像压缩中,信噪比(SNR)通常为峰值对峰值(Peak-to-peak)信噪比(SNRp) <br/><center><img height="34" alt="" src="http://www.videostar.com/technology%20article/mpeg/images/g3-3.gif" width="100" border="0"/></center><br/>由于采用上述两种评定方法所得到的结果与人眼评定结果并不总是一致,主观评定也就成为不可缺少的方法。图像呈现给评定者,并让他们在1~5基础上打分。 <br/> 诊断精确性评定在医疗图像中作用很重要,尤其应用在医院外科仿真如屏幕诊断等。在一系列外科诊断方法中,最常见的是ROC(Receiver Operating Characteristic),这是一种统计分析,针对不同的任务决定哪些图像压缩效果更好或更差。 <br/> 除了上述提到的四种评定方法外,还可以采用另外两种方法来评价压缩方法:压缩效率和复杂度。压缩效率也经常被称为压缩比,它指的是原始图像数据与压缩图像数据的大小比率。复杂度反映了一种压缩方法的代价,它可以通过数据操作的数目来度量、如加、减,乘运算等。 <br/> 对于有损压缩方法的判定,上述六种方法都可以使用,但对于有损压缩而言,比较也就只能基于压缩效率和复杂度。 <br/> 本文旨在通过一组不同类型的图像(多为医疗图像)进行压缩,来比较哪一种效果更好些。文章的结构如下:第2节介绍一些图像压缩的背景知识;第3节提供一组无损图像方法:哈夫曼编码压缩,游长编码压缩,游长+哈夫曼编码压缩(R+H),算术编码压缩,LZW编码压缩,JPEG无损压缩以及SLIC压缩方法;第4节介绍了实验结果,并进行了一些阐述;第5节总结全文。 <br/><font color="#800000">2 图像压缩的原理</font><br/> <br/> 对图像进行压缩可以不损失过多的视觉信息,这里主要有三个原因。首先,由于相邻像素之间的相关性,图像包含相当高的空间冗余度。其次,由于图像中不同色彩组成部分的相关性,它也包含一定程度的色谱冗余度。第三,人类视觉系统也造成了某种程度的心理视觉冗余度,从理论的角度来看,应针对图像数据中的冗余信息获得尽可能高的压缩度。 <br/> 空间(统计)冗余度的存在主要在于:当所接触的图像中的像素值并非完全是随机的,它们体现了一定程度的渐进变化,人的心理视觉冗余度主要是由于人类视觉系统对某些空间频率并不敏感。<i><font color="#ff0000">典型的图像压缩系统主要由三部分组成</font></i>:变换部分(Transformer)、量化部分(Quatizer)、和编码部分(Coder)。 <br/> <font color="#0000ff">变换部分</font><br/> 它体现了输入原始图像和经过变换的图像之间的一一对应关系。变换也称为去除相关,它减少了图像中的冗余信息,与输入原始图像数据相比,变换后的图像数据提供了一种更易于压缩的图像数据表示形式。<br/> <font color="#0000ff">量化部分</font><br/> 量化部分把经过变换的图像数据作为输入进行处理后,会得到有限数目的一些符号。一般而言,这一步会带来信息的损失,而这也恰是有损压缩方法和无损压缩方法之间主要的区别。在无损压缩方法中,这一步骤并不存在,这是一个不可逆的过程,原因就在于这是多到一映射,存在有两种量化类型:标量量化与矢量量化,前者是在一个像素、一个像素的基础上量化,而后者对像素向量进行量化。<br/> <font color="#0000ff">编码部分</font><br/> 这是压缩过程中最后一个步骤。这个部分将经过变换的系数(量化或未量化)编码为二进制位流,这个部分可以采用固定长编码,或变动长度编码,前者对所有符号赋予等长的编码,而后者则对出现频率较高的符号分配较短的编码,变动长度编码也叫熵(Entropy)编码,它能把经过变换得到的图像系数(Coefficients)数据以较短的信息总长度来表示,因而在实际应用中,多采用此类编码方式,得到的图像系数(Coefficients)数据可以一个离散随机过程S来表示。不同的系数(Coefficients)值形成一个字母表A={A<sub>i</sub>| i=0,1,…N-1},A<sub>i</sub>称为字母表中的一个字符,每个A<sub>i</sub>出现的概率记为p(A<sub>i</sub>),那么此过程的熵H(S)可以用下列公式来表示。 <br/><center><img height="49" alt="" src="http://www.videostar.com/technology%20article/mpeg/images/g1-4.gif" width="178" border="0"/></center><br/>哈夫曼编码和算术编码为两种熵(Entropy)编码方式,虽然它们只代表上述三个步骤中的最后一个?但由于这种编码方式比定长编码能达到压缩数据的方式?它们当然也可以认为是无损压缩的方法。 <br/><font color="#800000">3 算法与实现</font><br/> <br/> <font color="#0000ff"> 哈夫曼编码</font><br/> 仙农的论文指出,存在一种对信息源编码方法,可以使编码长度与熵编码长度接近。仙农只是说明存在这样的一种算法:即对信息的编码有极限值——熵,他并未说明如何才能接近这个极限值。这个工作是由哈夫曼完成的。哈夫曼编码对由较高出现概率的符号使用较短编码,较低出现概率的符号使用较长的编码。<br/> <font color="#0000ff">游长编码</font><br/> 游长编码利用了图像中的重复像素值,例如,一图像中往往包含许多连续的相同像素。这个方法的主要思想就在于:使用一个起始像素代表具有相同值的一连续像素串,用一整数代表这个串的长度。在实际应用中,这种方法并非总能压缩数据。对于那些具有足够多的连续像素串的图像而言。这种方法可以压缩,然而对那些在图像局部区域像素值经常发生变化的图像,这种方法会增大图像。<br/> <font color="#0000ff">游长编码+哈夫曼编码</font><br/> 这意味着先对原始图像进行游长编码压缩,然后再对该压缩图像施用哈夫曼编码再压缩。有人认为这样一定会得到更高的压缩比率,实验结果显示在一些情况下,这种方法得到的压缩比并不如直接使用哈夫曼编码进行压缩。<br/><font color="#0000ff">算术编码</font><br/> 算术编码实际上是对具有变化长度的符号块分配变化长度的编码。在算术编码中有两个主要元素:每个符号的出现概率及区间?0,1)。通过例子进行描述?假设有4个符号00,01,10,11,相应的出现概率分别为0.1,0.3,0.4,0.2。对每个符号分配一概率区间结果为 <center><img alt="" src="http://www.videostar.com/technology%20article/mpeg/images/111.jpg" border="0"/></center><br/>假设有一条信息:01 11 00,在处理每个符号时?与这条信息相关的区间缩小为分配给该字符的那部分区间,随着处理的进行区间变得越来越小。可以通过下述例子进行说明。 <br/>[0,0.1)[0.1,0.4)[0.4?0.8)[0.8?1.0)<br/>01->区间 =[0.1,0.4)<br/> 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)<br/> 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)<br/> 然后这条信息可以编码为区间[0.34,0.346),是在?0.34,0.346)中的任何数。<br/><font color="#0000ff">LZW编码</font><br/>LZW是一种基于字典算法的压缩方法。虽然这种方法到70年代后期才出现,它主要与日常生活中的很多事物类似,如在一本字典中,一个单词唯一由该单词所在的页号以及本页中的次序号决定,这样假若一个人向他人介绍所指的单词时,他只需指明页码号及次序号即可。实际上这就是一种用地址来指代信息的方法。在图像压缩中,可以采用同样的方法。一个像素序列若经常出现的话,就可以表示为一个索引信息。<br/><font color="#0000ff">JPEG无损压缩模式</font><br/>JPEG标准(ISO/IEC IS 10918)定义了基于DCT的操作模式,这种模式是有损图像压缩。JPEG无损编码模式中定义了一个无损处理模式,它将一个预测过程与哈夫曼编码或算术编码相结合了。假设在一幅图像中,像素x的相邻像素a,b,c已经已知。问题就变成了如何预测x的像素值。预测可由下式给出,x的值用Px表示,可以用JPEG标准中所采用的8个方程式来进行预测。<br/>选择值 预测<br/> 0 No prediction<br/> 1 Px=a<br/> 2 Px=b<br/> 3 Px=c<br/> 4 Px=a+b-c<br/> 5 Px=a+?b-c?/2<br/> 6 Px=b+?a-c?/2<br/> 7 Px=?a+b?/2<br/>将像素的预测值与实际输入值的差距进行哈夫曼编码或算术编码就达到了压缩图像的目的。<br/>SLIC算法<br/>最近在IEEE期刊上有人提出了一种方法SLIC,这也是一种无损压缩的方法。其主要思想就<br/>是先将输入的图像分解为几个不同的部分,然后再用JBIG压缩这些部分,它是一种基于康拓结构的方法(1982,Kocher and Kunt<sup>[1]</sup>),但是SLIC克服了原先存在于此类方法中的一些缺点,它引出了一种区域扩散的概念。(1)通过这个方法得到了一个不连续性图,而不是以往的产生一个康拓集;(2)基于相邻的像素差,产生一个差错图像;(3)用JBIG来对上述两个数据集合进行压缩比较有效;(4)变换处理不仅出现在区域扩散过程中,也出现在JBIG算法中。<br/>图像在经过处理后分为三部分:差错图像数据部分,不连续索引图像数据部分和高位种子数据部分。前两个采用JBIG标准编码,第三部分不经压缩直接存储。 <br/><font color="#800000">4 试验结果及分析</font><br/> <br/>本小节的主要目的在于评价上述几种无损图像压缩算法的性能。它们被应用于16幅图像上,这组图像包含生活照片、超声波图像及医疗图像,医疗图像取自一个3D人头图像,所有图像的大小为256×256/512×512,8位像素。 <br/> 总的来说,SLIC方法的图像压缩比最好,JPEG,算术,哈夫曼,游长+哈夫曼,LZW编码逐次递减。<br/> 在对三幅图的处理上,LZW实际上没有压缩图像,反而增大了图像,主要原因就在于这些图像数据由于缺少足够的重复像素值,因为LZW使用12位的索引来代替图像的8位像素值。<br/> SLIC在对医疗图像的压缩方面,超过JPEG而称为最佳选择,但在图像Lenna(512×512)上,它的压缩比(4.9342)不如JPEG(4.6947)的好,这说明SLIC更适用于医疗图像,而并非一般图像。<br/> 对于游长+哈夫曼编码,有一点需要说明,尽管它对Lenna,Peper和超声波图像压缩效果比较好,它对于实验中采用的医疗图像压缩效果比仅采用哈夫曼编码效果差,这说明采用哈夫曼编码也可以得到很好的压缩效果,而采用将游长和哈夫曼编码结合起来的方法并不能得到较高的压缩比。 <br/><font color="#800000">5 结论</font><br/> <br/> 实现了几种无损图像的压缩算法,尽管它们被应用于不同类型的图像,主要图像是取自一个3D人头医疗图像,不同的压缩图像得到不同的压缩比率,但是看起来,SLIC在医疗图像的压缩上超过其它方法,但并未在通用图像的压缩上取得优势。通过对各种效果的比较,SLIC可以作为一种医疗图像的压缩方法。 <br/></td></tr></tbody></table></p>
[此贴子已经被作者于2006-12-10 15:54:05编辑过] |