一.实验内容
1.编解码原理
编码过程如上图所示,解码是编码的逆过程。
1)零偏置
对于灰度级是2n的像素,通过减去2n-1,将无符号的整数值变成有符号数;
对于n=8,即将0~255的值域,通过减去128,转换为值域在-128~127之间的值,可以使像素的绝对值出现3位10进制的概率大大减少。
对于n=8,即将0~255的值域,通过减去128,转换为值域在-128~127之间的值,可以使像素的绝对值出现3位10进制的概率大大减少。
2)将图像按8*8(pixel)划分成MCU,再进行DCT变换,二维正反离散余弦变换的算式:
3) 因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。
根据人眼的视觉特性(对低频敏感,对高频不太敏感)对低频分量采取较细的量化,对高频分量采取较粗的量化;如果原始图象中细节丰富,则去掉的数据较多,量化后的系数与量化前差别;反之,细节少的原始图象在压缩时去掉的数据少些。
根据人眼的视觉特性(对低频敏感,对高频不太敏感)对低频分量采取较细的量化,对高频分量采取较粗的量化;如果原始图象中细节丰富,则去掉的数据较多,量化后的系数与量化前差别;反之,细节少的原始图象在压缩时去掉的数据少些。
4)按Z字形把量化后的数据读出,例:
5)游程编码
由于经DCT变换后,系数大多数集中在左上角,即低频分量区,因此采用Z字形按频率的高低顺序读出,可以出现很多连零的机会。可以使用游程编码。尤其在最后,如果都是零,给出EOB (End of Block)即可。
6)差分编码
8×8图像块经过DCT变换之后得到的DC直流系数有两个特点:系数的数值比较大和相邻8×8图像块的DC系数值变化不大,所以采用差分编码。
DC=8,上一DC=5,则DIFF=8-5=3,类别ID=2,类内索引=3,则码流=10011。
2.JPEG文件格式介绍
标记名称 |
全写 |
表示的意义 |
标记代码(固定值) |
SOI |
Start of Image |
图像开始 |
0xFFD8 |
APP0 |
Application |
应用程序保留标记0 |
0xFFE0 |
DQT |
Define Quantization Table |
定义量化表 |
0xFFDB |
SOF0 |
Start of Frame |
帧图像开始 |
0xFFC0 |
DHT |
Define Huffman Table |
定义哈夫曼表 |
0xFFC4 |
SOS |
Start of Scan |
扫描开始 12字节 |
0xFFDA |
EOI |
End of Image |
图像结束 |
0xFFD9 |
#APP0,Application,应用程序保留标记0
u 标记代码 2字节 固定值0xFFE0
u 包含9个具体字段:
① 数据长度 2字节 ①~⑨9个字段的总长度
即不包括标记代码,但包括本字段
② 标识符 5字节 固定值0x4A46494600,即字符串“JFIF0”
③ 版本号 2字节 一般是0x0102,表示JFIF的版本号1.2
可能会有其他数值代表其他版本
④ X和Y的密度单位 1字节 只有三个值可选
0:无单位;1:点数/英寸;2:点数/厘米
⑤ X方向像素密度 2字节 取值范围未知
⑥ Y方向像素密度 2字节 取值范围未知
⑦ 缩略图水平像素数目 1字节 取值范围未知
⑧ 缩略图垂直像素数目 1字节 取值范围未知
⑨ 缩略图RGB位图 长度可能是3的倍数 缩略图RGB位图数据
u 标记代码 2字节 固定值0xFFE0
u 包含9个具体字段:
① 数据长度 2字节 ①~⑨9个字段的总长度
即不包括标记代码,但包括本字段
② 标识符 5字节 固定值0x4A46494600,即字符串“JFIF0”
③ 版本号 2字节 一般是0x0102,表示JFIF的版本号1.2
可能会有其他数值代表其他版本
④ X和Y的密度单位 1字节 只有三个值可选
0:无单位;1:点数/英寸;2:点数/厘米
⑤ X方向像素密度 2字节 取值范围未知
⑥ Y方向像素密度 2字节 取值范围未知
⑦ 缩略图水平像素数目 1字节 取值范围未知
⑧ 缩略图垂直像素数目 1字节 取值范围未知
⑨ 缩略图RGB位图 长度可能是3的倍数 缩略图RGB位图数据
# DQT,Define Quantization Table,定义量化表
标记代码 2字节 固定值0xFFDB
包含9个具体字段:
① 数据长度 2字节 字段①和多个字段②的总长度
即不包括标记代码,但包括本字段
② 量化表 数据长度-2字节
a) 精度及量化表ID 1字节 高4位:精度,只有两个可选值
0:8位;1:16位
低4位:量化表ID,取值范围为0~3
b) 表项 (64×(精度+1))字节 例如8位精度的量化表
&nb
标记代码 2字节 固定值0xFFDB
包含9个具体字段:
① 数据长度 2字节 字段①和多个字段②的总长度
即不包括标记代码,但包括本字段
② 量化表 数据长度-2字节
a) 精度及量化表ID 1字节 高4位:精度,只有两个可选值
0:8位;1:16位
低4位:量化表ID,取值范围为0~3
b) 表项 (64×(精度+1))字节 例如8位精度的量化表
&nb