JPEG图像压缩实验.

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JPEG 静态图像压缩实验指导书

一、实验目的

1.了解多媒体通信中图像压缩技术

2.熟悉JPEG图像压缩编码过程

3.掌握二维DCT变换算法

二、实验原理

JPEG(Joint Photographic Experts Group) 是一个由ISO和ITU-T两个组织机构联合组成的一个图像专家小组,负责制定静态的数字图像数据压缩编码标准,这个专家组开发的算法称为JPEG算法,并且成为国际上通用的标准。JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。JPEG不仅适于静止图像的压缩,电视图像的帧内图像的压缩编码,也常采用此算法。

JPEG标准定义了多种工作模式,其中最基本的是基于8×8块的DCT顺序编码,将一帧图像分为8×8的块,然后按照从左至右、自上而下的顺序,对块进行DCT、量化和熵编码。其编、解码框图如下:

图1 基于DCT的顺序编码框图

DCT解码器

图2 基于DCT的顺序解压缩框图

JPEG压缩编码算法的主要计算步骤:

1)正向离散余弦变换(FDCT)。

2)量化(quantization)。

3)Z字形编码(zigzag scan)。

4)使用差分脉冲编码调制(differential pulse code modulation,DPCM)

对直流系数(DC)进行编码。

5)使用行程长度编码(run-length encoding,RLE)对交流系数(AC)进行

编码。

6)熵编码(entropy coding)。

三、实验内容

按照上述压缩过程实现一幅图像的压缩,生成符合JPEG标准的图像文件JPEG图像编码流程如下:

图3 JPEG图像编码流程

1.DCT变换

对8×8的图像数据块进行二维DCT的变换,把能量集中在少数几个系

数上,从而达到数据压缩的目的。:

DCT 变换公式:

DCT 反变换公式:

其中:

二维DCT 变换可以分解为行和列的一维DCT 变换的组合运算,也可将8×8的块分为更小的子块,直接对二维数据进行2维快速余弦变换。

2. 量化

量化表达式为:

其中 T(u ,v)是推荐的量化矩阵,详见附录1量化矩阵表

3. 熵编码

JPEG 标准中熵编码对直流DC 系数和交流AC 系数分别采用不同的压缩编码算法

1) DC 系数编码:

JEPG 把所有子块的DC 系数集合在一起,采用差分编码的方法

表示。编码步骤为:

a ) 将初始值设为128,对相邻块的DC 系数F(0,0)进行差分运算

b )将差分值改写为[size,value] (尺寸,幅值)的符号对。尺寸取2

的对数加1

c ) 按照表2、3对该符号对进行编码

2) AC 系数编码

AC 系数编码步骤为:

a ) 以块为单位,从AC01开始对块内的量化数据进行Z 形行程

扫描,记录两个非零值的大小和其间连续零的个数

b )将扫描结果改写为[RunLength ,level](行程、幅度)

的符号对,

其中RunLength代表该非零值和它前一个值之间0的个数,

以(EOB)表示块结束。

c)按照表3对上述的符号对进行编码。若符号在表中查不到对

应码字,用ESC码表示,然后按表4,5对RunLength和level

进行编码。

4.对编码后的图像数据进行解码,与原始图像数据进行比较。

四、实验要求

1.根据实验内容要求编写编解码程序,所用编程语言自选。可以参考实验

室提供的范例程序,并充分发挥你的创造性,写出有自己特色的程序。

2.生成JPEG格式的压缩文件,可用第三方软件打开,由指导教师验证通

3.实验完成后提交完整源程序,并在关键处加上详细批注。

4.撰写实验报告,实验报告要求详细介绍你实现的功能,设计思想,并根

据思考题进行分析。

五、样本程序说明

实验室提供一个BC编写的样本程序,供大家参考。见“JPEG实验”文件夹,各文件功能说明如下:

1)JPEG压缩程序:gendat.exe

2)为压缩后的数据加上JPEG文件头的程序genjpg.exe

3)解JEPG压缩程序extrdat.exe

其中:(1)的输入参量是需要生成的压缩文件的名字。

主程序流程为:

a)程序初始化,读取文件名称、原始图像数据等基本数据;

b)从AC.TAB和DC.TAB两个文件生成AC表和DC表,存入数组

c)以8×8为样本单位进行DCT变换

d)以8×8为样本单位进行量化

e)以8×8为样本单位进行Z形扫描

f)以8×8为样本单位进行熵编码

g)以8×8为样本单位进行解量化

h)以8×8为样本单位进行IDCT变换

请大家在参考上述程序的基础上,编写自己的JPEG压缩程序,利用(2)、

(3)程序检查自己的程序是否正确。

六、思考题

1.计算图像的压缩比,并比较原图像的效果

2.DCT变换、量化后,数据的范围是多少?有没有可能超出码表所给出的

幅值范围。

附录:JPEG图像压缩方法相关数据

表1:量化矩阵T ( U,V )

色差量化矩阵T(u,v)

亮度量化矩阵T(u,v)

表2:DC系数码表

Size Code

0 100

1 00

2 01

3 101

4 110

5 1110

6 1111,0

7 1111,10

8 1111,110

表3:DC系数码表

Value Code

128~255 1000,0000~1111,1111

64~127 1000,000~1111,111

32~63 1000,00~1111,11

16~31 1000,0~1111,1

相关文档
最新文档