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的对数加 1c 按照表 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.exe2 为压缩后的数据加上 JPEG 文件头的程序 genjpg.exe3 解 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 Code0 1001 002 013 1014 1105 11106 1111,07 1111,108 1111,110表 3:DC 系数码表Value Code128~255 1000,0000~1111,1111 64~127 1000,000~1111,11132~63 1000,00~1111,1116~31 1000,0~1111,18~15 1000~11114~7 100~1112~3 10~111 10 —-1 0-2~-3 01~00-4~-7 011~000-8~-15 0111~0000-16~-31 01111~00000-32~-63 011111~000000-64~-127 0111111~0000000-128~-255 01111111~00000000 表 4:RunlengthLevel Code 0 1 11S2 0100S3 0010,1S4 0000,110S5 0010,0110S6 0010,0001S7 0000,0010,10S8 0000,0001,1110S9 0000,0001,1000S 10 0000,0001,0011S 11 0000,0001,0000S 12 0000,0000,1110S 13 0000,0000,1100,1S 14 0000,0000,1100,0S 15 0000,0000,1011,1S 160000,0000,0111,11S 17 0000,0000,0111,01S 18 0000,0000,0111,00S 190000,0000,0110,11S 20 0000,0000,0110,10S 21 0000,0000,0110,01S 220000,0000,0110,00S 23 0000,0000,0101,11S 24 0000,0000,0101,10S 250000,0000,0101,01S 26 0000,0000,0101,00S 27 0000,0000,0100,11S 280000,0000,0100,10S29 0000,0000,0100,01S 30 0000,0000,0100,00S 31 0000,0000,0011,000S 32 0000,0000,0010,111S 33 0000,0000,0010,110S 34 0000,0000,0010,101S 350000,0000,0010,100S 36 0000,0000,0010,010S 37 0000,0000,0010,010S 380000,0000,0010,001S 39 0000,0000,0010,000S1 1 011S2 0001,10S3 0010,1010S4 0000,0011,00S5 0000,0001,1011S6 0000,0000,1011,0S7 0000,0000,1010,1S8 0000,0000,0011,111S9 0000,0000,0011,110S 10 0000,0000,0011,101S 11 0000,0000,0011,100S 12 0000,0000,0011,011S 13 0000,0000,0011,010S 14 0000,0000,0011,001S 15 0000,0000,0001,0011S 16 0000,0000,0001,0010S 17 0000,0000,0001,0001S18 0000,0000,0001,0000S2 1 0101S2 0000,100S3 0000,0010,11S4 0000,0001,0100S5 0000,0000,1010,0S 3 1 0011,1S2 0010,0100S3 0000,0001,1100S4 0000,0000,1001,1S 4 1 0011,0S2 0000,0011,11S3 0000,0001,0010S 5 1 0001,11S2 0000,0010,01S3 0000,0000,1001,0S6 1 0001,01S2 0000,0001,1110S3 0000,0000,0001,0100S 7 1 0001,00S 2 0000,0001,0101S 8 1 0000,111S 2 0000,0001,0001S 9 1 0000,110S 2 0000,0000,1000,1S10 1 0010,0111S2 0000,0000,1000,0S11 1 0010,0011S2 0000,0000,0001,1010S12 1 0010,0010S2 0000,0000,0001,1001S13 1 0010,0000S2 0000,0000,0001,1000S14 1 0000,0011,10S2 0000,0000,0001,0110S15 1 0000,0011,01S2 0000,0000,0001,0110S16 1 0000,0010,00S2 0000,0000,0001,0101S 17 1 0000,0001,1111S 18 1 0000,0001,1010S 19 1 0000,0001,1001S 20 1 0000,0001,0111S 21 1 0000,0001,0110S 22 1 0000,0000,1111,1S 23 1 0000,0000,1111,0S 24 1 0000,0000,1110,1S 25 1 0000,0000,1110,0S 26 10000,0000,1101,1S 27 1 0000,0000,0001,1111S 28 1 0000,0000,0001,1110S 29 1 0000,0000,0001,1101S 30 1 0000,0000,0001,1100S 31 1 0000,0000,0001,1011S EOB 10esc 0000,10注:S 表示,当 Level 为正值时 S=0, Level 为负值时 S=1。