jpeg标准

中国图像网 www.china-image/ 数字图像处理入门—图象压缩编码,JPEG 压缩编码标准 在介绍图象的压缩编码之前,先考虑一个问题:为什么要压缩?其实这个问题不用我回答,你也能想得到。 因为图象信息的数据量实在是太惊人了。举一个例子就明白了,一张 A4(210mm*297mm) 幅面的照片,若 用中等分辨率(300dpi)的扫描仪按真彩扫描,其数据量为多少?让我们来计算一下:共有(300*210/25.4)* (300*297/25.4)个像素,每个像素占 3 个字节,其数据量为 26M 字节,其数据量之大可见一斑了。 如今在 Internet 上,传统基于字符界面的应用逐渐被能够浏览图象信息的 WWW(World Wide Web)方式所取 代。WWW 尽管漂亮,但是也带来了一个问题:图象信息的数据量太大了,本来就已经非常紧张的网络带 宽变得更加不堪重负,使得 World Wide Web 变成了 World Wide Wait。 总之,大数据量的图象信息会给存储器的存储容量,通信干线信道的带宽,以及计算机的处理速度增加极 大的压力。 单纯*增加存储器容量, 提高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的, 这时就要考虑压缩。压缩的理论基础是信息论。从信息论的角度来看,压缩就是去掉信息中的冗余,即保 留不确定的信息,去掉确定的信息(可推知的) ,也就是用一种更接近信息本质的描述来代替原有冗余的描 述。这个本质的东西就是信息量(即不确定因素) 。 压缩可分为两大类,第一类压缩过程是可逆的,也就是说,从压缩后的图象能够完全恢复出原来的图象, 信息没有任何丢失,称为无损压缩;第二类压缩过程是不可逆的,无法完全恢复出原图象,信息有一定的 丢失,成为有损压缩。选择哪一类压缩,要折中考虑,尽管我们希望能够无损压缩,但是通常有损压缩的 压缩比(即原图象占的字节数与压缩后图象占的字节数之比,压缩比越大,说明压缩效率越高)比无损压 缩的高。 图象压缩一般是
通过改变图象的表示方式来达到,因此压缩和编码是分不开的。图象压缩的主要应用是图 象信息的传输和存储,可广泛地应用于广播电视,电视会议,计算机通讯,传真,多媒体系统,医学图象, 卫星图象等领域。 压缩编码的方法有很多,主要分成以下 4 大类:1.像素编码;2.预测编码;3.变换编码;4.其它方法。 所谓像素编码是指,编码时对每个像素单独处理,不考虑像素之间的相关性。在像素编码中常用的几种方 法有:1.脉冲编码调制(Pulse Code Modulation,PCM);2.熵编码(Entropy Coding) ;3.行程编码(Run Length Coding);4.位平面编码(Bit Plane Coding) 。这里面,我们要介绍的是熵编码中的哈夫曼(Huffman)编码, 行程编码(以读取.PCX 文件为例) 。 所谓预测编码是指,去掉相邻像素之间的相关性和冗余性,只对新的信息进行编码。举个简单的例子,因 为像素的灰度是连续的,所以在一片区域中,相邻像素之间灰度值的差别可能很小。如果我们只记录第一 个像素的灰度,其它像素的灰度都用它与前一个像素灰度之差来表示,就能起到压缩的目的。如 248,2, 1,0,1,3,实际上这 6 个像素的灰度是 248,250,251,251,252,255。表示 250 需要 8 个比特,而表 示 2 只需要两个比特,这样就实现了压缩。 常用的预测编码有Δ调制(Delta Modulation,简称 DM) ;微分预测编码(Differential Pulse Code Modulation, DPCM),具体的细节,我们就不详述了。 所谓变换编码是指,将给定的图象变换到另一个数据域(如频域)上,使得大量的信息能用较少的数据来 表示,从而达到压缩的目的。变换编码有很多,如 1.离散傅立叶变换(Discrete Fourier Transform,DFT);2. 离散余弦变换(Discrete Cosine Transform,DCT);3.离散哈达玛变换(Discrete Hadamard Transform,DHT)。 其它的编码方法也有很多,如混合编码(Hybird Coding) ,矢量量
化(Vector Quantize,VQ),LZW 算法。在 这里,我们只介绍 LZW 算法的大体思想。 值得注意的是,近些年来出现了很多新的压缩编码方法,如使用人工神经元网络(Artificial Neural Network, ANN)的压缩编码算法;分形(Fractl) ;小波(Wavelet);基于对象(Object -Based)的压缩编码算法;基于 模型(Model -Based)的压缩编码算法(应 用在 MPEG4 及未来的视频压缩编码标准中)。这些都超出了本讲 座的范围。 本讲的最后,我们将以 JPEG 压缩编码标准为例,看看上面的几种编码方法在实际的压缩编码中是怎样应 用的。
对比分析法中国图像网 www.china-image/
1. 哈夫曼(Huffman)编码 Huffman 编码是一种常用的压缩编码方法,是 Huffman 于 1952 年为压缩文本文件建立的。它的基本原理是 频繁使用的数据用较短的代码代替,较少使用的数据用较长的代码代替,每个数据的代码各不相同。这些 代码都是二进制码,且码的长度是可变的。举个例子:假设一个文件中出现了 8 种符号 S0,S1,S2,S3, S4,S5,S6,S7,那么每种符号要编码,至少需要 3 比特,假设编码成 000,001,010,011,100,101, 110 , 111 ( 称 做 码 字 )。 那 么 符 号 序 列 S0S1S7S0S1S6S2S2S3S4S5S0S0S1 编 码 后 变 成 000001111000001110010010011100101000000001,共用了 42 比特。我们发现 S0,S1,S2 这三个符号出现 的频率比较大,其它符号出现的频率比较小,如果我们采用一种编码方案使得 S0,S1,S2 的码字短,其 它符号的码字长,这样就能够减少占用的比特数。 例如,我们采用这样的编码方案:
S0 到 S7 的码字分别 01,11,101,0000,0001,0010,0011,100,那 么上述符号序列变成 011110001110011101101000000010010010111,共用了 39 比特,尽管有些码字如 S3, S4,S5,S6 变长了(由 3 位变成 4 位) ,但使用频繁的几个码字如 S0,S1 变短了,所以实现了压缩。 上述的编码是如何得到的呢?随意乱写是不行的。编码必须保证不能出现一个码字和另一个的前几位相同 的情况,比如说,如果 S0 的码字为 01,S2 的码字为 011,那么当序列中出现 011 时,你不知道是 S0 的码 字后面跟了个 1,还是完整的一个 S2 的码字。我们给出的编码能够保证这一点。 下面给出具体的 Huffman 编码算法。 1.首先统计出每个符号出现的频率,上例 S0 到 S7 的出现频率分别为 4/14,3/14,2/14,1/14,1/14,1/14, 1/14,1/14。 2.从左到右把上述频率按从小到大的顺序排列。 3.每一次选出最小的两个值,作为二*树的两个叶子节点,将和作为它们的根节点,这两个叶子节点不再参 与比较,新的根节点参与比较。 4.重复 3,直到最后得到和为 1 的根节点。 5.将形成的二*树的左节点标 0,右节点标 1。把从最上面的根节点到最下面的叶子节点途中遇到的 0,1 序列 串起来,就得到了各个符号的编码。 上面的例子用 Huffman 编码的过程如下图所示,其中圆圈中的数字是新节点产生的顺序。可见,我们上面 给出的编码就是这么得到的。
图 1. Huffman 编码的示意图 产生霍夫曼编码需要对原始数据扫描两遍,第一遍扫描要精确地统计出原始数据中,每个值出现的频率, 第二遍是建立霍夫曼树并进行编码,由于需要建立二*树并遍历二*树生成编码,因此数据压缩和还原速度 都较慢,但简单有效,因而得到广泛的应用。
石河子大学学报中国图像网 www.china-image/俊余
2.行程编码(Run Length Coding) 行 程 编 码 的 原 理 也 很 简 单 : 将 一 行 中 颜 值相同的相邻 像素用一个计 数值和该颜 值来代 替。例 如:aaabccccccddeee 可以表示为 3a1b6c2d3e。如果一幅图象是由很多块颜相同的大面积区域组成,那么采 用行程编码的压缩效率是惊人的。然而,该算法也导致了一个致命弱点,如果图象中每两个相邻点的颜 都不同,用这种算法不但不能压缩,反而数据量增加一倍。所以现在单纯采用行程编码的压缩算法用得并 不多,PCX 文件算是其中的一种. PCX 文件最早是 PC Paintbrush 软件所采用的一种文件格式,由于压缩比不高,现在用的并不是很多了。它 也是由头信息,调板,实际的图象数据三个部分组成。其中头信息的结构为: typedef struct{ char manufacturer; char version; char encoding; char bits_per_pixel; WORD xmin,ymin; WORD xmax,ymax; WORD hres; WORD vres; char palette[48]; char reserved; char colour_planes; WORD bytes_per_line; WORD palette_type; char filler[58]; } PCXHEAD; 其中值得注意的是以下几个数据:manufacturer 为 PCX 文件的标识,必须为 0x0a;xmin 为最小的 x 坐标, xmax 最大的 x 坐标,所以图象的宽度为 xmax-xmin+1,同样图象的高度为 ymax-yin+1;bytes_per_line 为 每个编码行所占的字节数,过一会儿详细介绍。 PCX 的调板在文件的最后。以 256 PCX 文件为例,倒数第 769 个字节为颜数的标识,256 时该字节 必须为 12,剩下的 768(256*3)为调板的 RGB 值。 为了讲起来方便,下面我们针对 256 PCX 文件,介绍一下它的解码过程。编码是解码的逆过程,有兴
趣 的读者可以试着自己来完成。 解码是以行为单位的,该行所占的字节数由 bytes_per_line 给定。为此,我们开一个大小为 bytes_per_line 的解码缓冲区。 一开始, 将缓冲区的所有内容清零。 从文件中读出一个字节 C, C>0xc0, 若 说明是行程 (Run Length)信息,即 C 的低 6 位表示后面连续的字节个数(所以最多 63 个连续颜相同的像素,若还有颜 相同的像素,将在下一个行程处理) ,文件的下一个字节就是实际的图象数据(即该颜在调板中的索引 值) ;若 C<0xc0,则表示 C 是实际的图象数据。如此反复,直到这 bytes_per_line 个字节处理完,这一行的 解码完成。PCX 就是有若干个这样的解码行组成。 实现 256 PCX 文件解码的源程序 3. LZW 算法的大体思想 LZW 是一种比较复杂的压缩算法,其压缩效率也比较高。我们在这里只介绍一下它的基本原理:LZW 把 每一个第一次出现的字符串用一个数值来编码,在还原程序中再将这个数值还成原来的字符串。例如:用
中国图像网 www.china-image/ 数值 0x100 代替字符串"abccddeee",每当出现该字符串时,都用 0x100 代替,这样就起到了压缩的作用。 至于 0x100 与字符串的对应关系则是在压缩过程中动态生成的,而且这种对应关系隐含在压缩数据中,随 着解压缩的进行,这张编码表会从压缩数据中逐步得到恢复,后面的压缩数据再根据前面数据产生的对应关 系产生更多的对应关系,直到压缩文件结束为止。LZW 是无损的。GIF 文件采用了这种压缩算法。 要注意的是,LZW 算法由 Unisys 公司在美国申请了专利,要使用它首先要获得该公司的认可。 4.JPEG 压缩编码标准 JPEG 是联合图象专家
组(Joint Picture Expert Group)的英文缩写,是国际标准化组织(ISO)和 CCITT 联合 制定的静态图象的压缩编码标准。和相同图象质量的其它常用文件格式(如 GIF,TIFF,PCX)相比,JPEG 是目前静态图象中压缩比最高的。我们给出具体的数据来对比一下。例图采用 Windows95 目录下的 Clouds.bmp, 原图大小为 640*480, 。 256 用工具 SEA(version1.3)将其分别转成 24 位 BMP, 位 JPEG, 24 GIF(只能转成 256 )压缩格式,24 位 TIFF 压缩格式,24 位 TGA 压缩格式,得到的文件大小(以 字节为单位)分别为:921,654;17,707;177,152;923,044;768,136。可见 JPEG 比其它几种压缩比要高得 多,而图象质量都差不多(JPEG 处理的颜只有真彩和灰度图) 正是由于其高压缩比,使得 JPEG 被广 。 泛地应用于多媒体和网络程序中,例如 HTML 语法中选用的图象格式之一就是 JPEG(另一种是 GIF) ,这 是显然的,因为网络的带宽是非常宝贵的,选用一种高压缩比的文件格式是十分必要的。 JPEG 有几种模式,其中最常用的是基于 DCT 变换的顺序型模式,又称为基本系统(Baseline) ,以下都是 针对这种格式进行讨论。 JPEG 的压缩原理 JPEG 的压缩原理其实上面介绍的那些原理的综合,博采众家之长,这也正是 JPEG 有高压缩比的原因。其 编码器的流程为
图 3. 编码器流程 解码器基本上为上述过程的逆过程:
图 4. 解码器流程 8*8 的图象经过 DCT 变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT 变换实际上是空 间域的低通滤波器) 。由于该低频分量包含了图象的主要信息(如亮度) ,
明清小说研究
管理学精品课程而高频与之相比,就不那么重要 了,所以我们可以忽略高频分量,从而达到压缩的目的。如何将高频分量去掉,这就要用到量化,它是产 生信息损失的根源。这里的量化操作,就是将某一个值除以量化表中对应的值。由于量化表左上角的值较 小,右上角的值较大,这样就起到了保持低频分量,抑制高频分量的目的。 JPEG 使用的颜是 YUV 格式。我们提到过,Y 分量代表了亮度信息,UV 分量代表了差信息。相比而 言,Y 分量更重要一些。我们可以对 Y 采用细量化,对 UV 采用粗量化,可进一步提高压缩比。所以上面 所说的量化表通常有两张,一张是针对 Y 的;一张是针对 UV 的。 上面讲了,经过 DCT 变换后,低频分量集中在左上角,其中 F(0,0) (即第一行第一列元素)代表了直
中国图像网 www.china-image/ 流(DC)系数,即 8*8 子块的平均值,要对它单独编码。由于两个相邻的 8*8 子块的 DC 系数相差很小, 所以对它们采用差分编码 DPCM,可以提高压缩比,也就是说对相邻的子块 DC 系数的差值进行编码。8*8 的其它 63 个元素是交流(AC)系数,采用行程编码。这里出现一个问题:这 63 个系数应该按照怎么样的 顺序排列? 为了保证低频分量先出现,高频分量后出现,以增加行程中连续"0"的个数,这 63 个元素采用 了"之"字型(Zig-Zag)的排列方法,如下图所示:
图 5. Zig-Zag 这 63 个 AC 系数行程编码的码字用两个字节表示,如下图
图 6. 行程编码 上面,我们得到了 DC 码字和 AC 行程码字。为了进一步提高压缩比,需要对其再进
抗独特型抗体
行熵编码,这里选用 Huffman 编码,分成两步: (1) 熵编码的中间格式表示: 对于 AC 系数,有两个符号。符号 1:行程和尺寸,即上面的(RunLength,Size)(0,0)和(15,0)是 。 两个比较特殊的情况。 (0,0)表示块结束标志(EOB)(15,0)表示 ZRL,当行程长度超过 15 时,用增 , 加 ZRL 的个数来解决,所以最多有三个 ZRL(3*16+15=63) 。符号 2 为幅度值(Amplitude) 。 对于 DC 系数,也有两个符号。符号 1:尺寸(Size) ;符号 2 为幅度值(Amplitude) 。 (2) 熵编码: 对于 AC 系数,符号 1 和符号 2 分别进行编码。零行程长度超过 15 个时,有一个符(15,0) ,块结束时只 有一个符号(0,0) 对符号 1 进行 Hufffman 编码(亮度,差的 Huffman 码表不同) 。 。对符号 2:进行 变长整数 VLI 编码,举例来说:Size=6 时,Amplitude 的范围是-63~-32,以及 32~63,对绝对值相同,符 号相反的码字之间为反码关系。所以 AC 系数为 32 的码字为 100000,33 的码字为 100001,-32 的码字为

本文发布于:2024-09-22 17:29:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/315915.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:编码   压缩   图象   信息
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议