JPEG编码解码流程.docx

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

JPEG图片压缩算法流程详解

薛晓利

JPEG是JointPhotographicExportsGroup的英文缩写,中文称之为联合图像专家小组。该小组从属于ISO国际标准化组织,重要负责定制静态数字图像的编码方法,即所谓的JPEG算法。JPEG专家组开发了两种基本的压缩算法、两种熵编码方法、四种编码模式。如下所示:

压缩算法:

(1)有损的离散余弦变换DCT(DiscreteCosineTransform)

(2)无损的预测压缩技术;

熵编码方法:

(1)Huffman编码;

(2)算术编码;

编码模式:

(1)基于DCT的顺序模式:编码、解码通过一次扫描完毕;

(2)基于DCT的渐进模式:编码、解码需要多次扫描完毕,扫描效果由粗到精,逐级

递增;

(3)无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值;

(4)层次模式:图像在多个空间分辨率中进行编码,可以根据需要只对低分辨率数据做

解码,放弃高分辨率信息;

在实际应用中,JPEG图像编码算法使用的大多是离散余弦变换、Huffman编码、顺序编码模式。这样的方式,被人们称为JPEG的基本系统。这里介绍的JPEG编码算法的流程,也

是针对基本系统而言。

基本系统的JPEG压缩编码算法一共分为11个环节:颜色模式转换、采样、分块、离散余弦变换(DCT)、Zigzag扫描排序、量化、DC系数的差分脉冲调制编码、DC系数的

中间格式计算、AC系数的游程长度编码、AC系数的中间格式计算、熵编码。下面,将一一

介绍这11个环节的具体原理和计算过程。

(1)颜色模式转换

JPEG采用的是YCrCb颜色空间,而BMP采用的是RGB颜色空间,要想对BMP图片进行压缩,一方面需要进行颜色空间的转换。YCrCb颜色空间中,Y代表亮度,Cr,Cb则代表色度和饱和度(也有人将Cb,Cr两者统称为色度),三者通常以Y,U,V来表达,即用U代表C

b,用V代表Cr。RGB和YCrCb之间的转换关系如下所示:

Y=0.299R+0.587G+0.114B

Cb=-0.1687R-0.3313G+0.5B+128

Cr=0.5R=0.418G-0.0813B+128

一般来说,C值(涉及CbCr)应当是一个有符号的数字,但这里通过加上128,使其变为8位

的无符号整数,从而方便数据的存储和计算。

R=Y+1.402(Cr-128)

G=Y-0.34414(Cb-128)-0.71414(Cr-128)

B=Y+1.772(Cb-128)

(2)采样

研究发现,人眼对亮度变换的敏感度要比对色彩变换的敏感度高出很多。因此,我们可以认为Y分量要比Cb,Cr分量重要的多。在BMP图片中,RGB三个分量各采用一个字节进行采样,也就是我们常听到的RGB888的模式;而JPEG图片中,通常采用两种采样方式:YUV411和YUV422,它们所代表的意义是Y,Cb,Cr三个分量的数据取样比例一般是4:1:1或者4:2:2(4:1:1含义就是:在2x2的单元中,本应分别有4个Y,4个U,4个V值,用12个字节进行存储。通过4:1:1采样解决后,每个单元中的值分别有4个Y、1个U、1个V,只要用6个字节就可以存储了)。这样的采样方式,虽然损失了一定的精度但也在人眼不太察觉到的范围内减小了数据的存储量。当然,JPEG格式里面也允许将每个点

的U,V值都记录下来;

(3)分块

由于后面的DCT变换是是对8x8的子块进行解决的,因此,在进行DCT变换之前必

须把源图象数据进行分块。源图象中每点的3个分量是交替出现的,先要把这3个分量分开,存放到3张表中去。然后由左及右,由上到下依次读取8x8的子块,存放在长度为64的表中,即可以进行DCT变换。注意,编码时,程序从源数据中读取一个8x8的数据块后,进

行DCT变换,量化,编码,然后再读取、解决下一个8*8的数据块。

JPEG编码是以每8x8个点为一个单位进行解决的.所以假如原始图片的长宽不是8的倍数,都需要先补成8的倍数,使其可以进行一块块的解决。将原始图像数据分为8*8的数据单元矩阵之后,还必须将每个数值减去128,然后一一带入DCT变换公式,即可达成DCT变换的目的。图像的数据值必须减去128,是由于DCT公式所接受的数字范围是-

您可能关注的文档

文档评论(0)

165720323137e88 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档