wheatyang 发表于 2006-12-9 20:29

[求助]哪位好心人能帮我找找各种图象格式的压缩算法

<p>哪位好心人能帮我找找各种图象格式的压缩算法</p><p>我最近在做个论文,很难,我一点也不懂</p><p>求大家帮帮我了</p><p>我的邮箱是<a href="mailto:yangyang69528@163.com">yangyang69528@163.com</a></p><p>谢谢了!</p>

madio 发表于 2006-12-10 15:51

<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>&nbsp;</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/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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)定义为 <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/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>  实现了几种无损图像的压缩算法,尽管它们被应用于不同类型的图像,主要图像是取自一个3D人头医疗图像,不同的压缩图像得到不同的压缩比率,但是看起来,SLIC在医疗图像的压缩上超过其它方法,但并未在通用图像的压缩上取得优势。通过对各种效果的比较,SLIC可以作为一种医疗图像的压缩方法。 <br/></td></tr></tbody></table></p>
[此贴子已经被作者于2006-12-10 15:54:05编辑过]

madio 发表于 2006-12-10 15:55

<p>浅谈图像压缩算法<br/>余科亮&nbsp;&nbsp;&nbsp; 本文仅讨论静止图像的压缩基本算法,图像压缩的目的在于以较少的数据来表示图像以节约存储费用,或者传输时间和费用。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JPEG压缩算法可以用失真的压缩方式来处理图像,但失真的程度却是肉眼所无法辩认的。这也就是为什么JPEG会有如此满意的压缩比例的原因。&nbsp;&nbsp;&nbsp; 下面主要讨论,JPEG基本压缩法。<br/>&nbsp;&nbsp;&nbsp; 一.JPEG压缩过程</p><p>&nbsp;&nbsp;&nbsp; JPEG压缩分四个步骤实现:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.颜色模式转换及采样;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.DCT变换;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.量化;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.编码。&nbsp;&nbsp;&nbsp; 二.1.颜色模式转换及采样&nbsp;&nbsp;&nbsp; RGB色彩系统是我们最常用的表示颜色的方式。JPEG采用的是YCbCr色彩系统。想要用JPEG基本压缩法处理全彩色图像,得先把RGB颜色模式图像数据,转换为YCbCr颜色模式的数据。Y代表亮度,Cb和Cr则代表色度、饱和度。通过下列计算公式可完成数据转换。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y=0.2990R+0.5870G+0.1140B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cb=-0.1687R-0.3313G+0.5000B+128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cr=0.5000R-0.4187G-0.0813B+128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 人类的眼晴对低频的数据比对高频的数据具有更高的敏感度,事实上,人类的眼睛对亮度的改变也比对色彩的改变要敏感得多,也就是说Y成份的数据是比较重要的。既然Cb成份和Cr成份的数据比较相对不重要,就可以只取部分数据来处理。以增加压缩的比例。JPEG通常有两种采样方式:YUV411和YUV422,它们所代表的意义是Y、Cb和Cr三个成份的数据取样比例。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.DCT变换&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DCT变换的全称是离散余弦变换(Discrete Cosine Transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。&nbsp;&nbsp;&nbsp; 压缩时,将原始图像数据分成8*8数据单元矩阵,例如亮度值的第一个矩阵内容如下:<br/>&nbsp;&nbsp;&nbsp; JPEG将整个亮度矩阵与色度Cb矩阵,饱和度Cr矩阵,视为一个基本单元称作MCU。每个MCU所包含的矩阵数量不得超过10个。例如,行和列采样的比例皆为4:2:2,则每个MCU将包含四个亮度矩阵,一个色度矩阵及一个饱和度矩阵。&nbsp;&nbsp;&nbsp; 当图像数据分成一个8*8矩阵后,还必须将每个数值减去128,然后一一代入DCT变换公式中,即可达到DCT变换的目的。图像数据值必须减去128,是因为DCT转换公式所接受的数字范围是在-128到+127之间。&nbsp;&nbsp;&nbsp; DCT变换公式:<br/>x,y代表图像数据矩阵内某个数值的坐标位置f(x,y)代表图像数据矩阵内的数个数值u,v代表DCT变换后矩阵内某个数值的坐标位置F(u,v)代表DCT变换后矩阵内的某个数值&nbsp;&nbsp;&nbsp; u=0 且 v=0 c(u)c(v)=1/1.414&nbsp;&nbsp;&nbsp; u&gt;0 或 v&gt;0 c(u)c(v)=1&nbsp;&nbsp;&nbsp; 经过DCT变换后的矩阵数据自然数为频率系数,这些系数以F(0,0)的值最大,称为DC,其余的63个频率系数则多半是一些接近于0的正负浮点数,一概称之为AC。&nbsp;&nbsp;&nbsp; 3、量化&nbsp;&nbsp;&nbsp; 图像数据转换为频率系数后,还得接受一项量化程序,才能进入编码阶段。量化阶段需要两个8*8矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值,取得与商数最近的整数,即完成量化。&nbsp;&nbsp;&nbsp; 当频率系数经过量化后,将频率系数由浮点数转变为整数,这才便于执行最后的编码。不过,经过量化阶段后,所有数据只保留整数近似值,也就再度损失了一些数据内容,JPEG提供的量化表如下:</p><p>&nbsp;&nbsp;&nbsp; 4、编码&nbsp;&nbsp;&nbsp; Huffman编码无专利权问题,成为JPEG最常用的编码方式,Huffman编码通常是以完整的MCU来进行的。&nbsp;&nbsp;&nbsp; 编码时,每个矩阵数据的DC值与63个AC值,将分别使用不同的Huffman编码表,而亮度与色度也需要不同的Huffman编码表,所以一共需要四个编码表,才能顺利地完成JPEG编码工作。&nbsp;&nbsp;&nbsp; DC编码&nbsp;&nbsp;&nbsp; DC是彩采用差值脉冲编码调制的差值编码法,也就是在同一个图像分量中取得每个DC值与前一个DC值的差值来编码。DC采用差值脉冲编码的主要原因是由于在连续色调的图像中,其差值多半比原值小,对差值进行编码所需的位数,会比对原值进行编码所需的位数少许多。例如差值为5,它的二进制表示值为101,如果差值为-5,则先改为正整数5,再将其二进制转换成1的补数即可。所谓1的补数,就是将每个Bit若值为0,便改成1;Bit为1,则变成0。差值5应保留的位数为3,下表即列出差值所应保留的Bit数与差值内容的对照。<br/>&nbsp;&nbsp;&nbsp; 在差值前端另外加入一些差值的霍夫曼码值,例如亮度差值为5(101)的位数为3,则霍夫曼码值应该是100,两者连接在一起即为100101。下列两份表格分别是亮度和色度DC差值的编码表。根据这两份表格内容,即可为DC差值加上霍夫曼码值,完成DC的编码工作。<br/>&nbsp;&nbsp;&nbsp; AC编码&nbsp;&nbsp;&nbsp; AC编码方式与DC略有不同,在AC编码之前,首先得将63个AC值按Zig-zag排序,即按照下图箭头所指示的顺序串联起来。<br/>&nbsp;&nbsp;&nbsp; 63个AC值排列好的,将AC系数转换成中间符号,中间符号表示为RRRR/SSSS,RRRR是指第非零的AC之前,其值为0的AC个数,SSSS是指AC值所需的位数,AC系数的范围与SSSS的对应关系与DC差值Bits数与差值内容对照表相似。&nbsp;&nbsp;&nbsp; 如果连续为0的AC个数大于15,则用15/0来表示连续的16个0,15/0称为ZRL(Zero Rum Length),而(0/0)称为EOB(Enel of Block)用来表示其后所剩余的AC系数皆等于0,以中间符号值作为索引值,从相应的AC编码表中找出适当的霍夫曼码值,再与AC值相连即可。&nbsp;&nbsp;&nbsp; 例如某一组亮度的中间符为5/3,AC值为4,首先以5/3为索引值,从亮度AC的Huffman编码表中找到1111111110011110霍夫曼码值,于是加上原来100(4)即是用来取的Huffman编码1111111110011110100,表示AC值为4的前面有5个零。&nbsp;&nbsp;&nbsp; 由于亮度AC,色度AC霍夫曼编码表比较长,在此省略去,有兴趣者可参阅相关书籍。&nbsp;&nbsp;&nbsp; 实现上述四个步骤,即完成一幅图像的JPEG压缩。&nbsp;&nbsp;&nbsp; 参考资料 林福宗 《图像文件格式(上)——Windows 编程》,清华大学出版社,&nbsp;&nbsp;&nbsp; 1996年 李振辉、李仁各编著,《探索图像文件的奥秘》,清华大学出版社,1996年 黎洪松、成实译《JPEG静止数据压缩标准》,学苑出版社,1996年 </p>
[此贴子已经被作者于2006-12-10 15:56:27编辑过]
页: [1]
查看完整版本: [求助]哪位好心人能帮我找找各种图象格式的压缩算法