一、实验原理
1.JPEG简介
JPEG( Joint Photographic Experts Group)即联合图像专家组,是用于连续色调静态图像压缩的一种标准,文件后缀名为.jpg或.jpeg,是最常用的图像文件格式。其主要是采用预测编码(DPCM)、离散余弦变换(DCT)以及熵编码的联合编码方式,以去除冗余的图像和彩色数据,属于有损压缩格式,它能够将图像压缩在很小的储存空间,一定程度上会造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量降低,如果追求高品质图像,则不宜采用过高的压缩比例。
2.JPEG编解码原理
①零偏置(Level Offset)
对于灰度级是
2
n
的像素,通过减去
2
n-1
,将无符号的整数值变成有符号数
对于
n=8
,即将
0~255
的值域,通过减去
128
, 转换为值域在-128~127
之间的值
目的:使像素的绝对值出现
3
位
10
进制的概率大大减少
②DCT变换
对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,并作为两维离散余弦变换DCT的输入,实现去相关和能量集中,去除冗余信息,提高编码效率。
DCT变换使用下式计算:
![](https://i-blog.csdnimg.cn/blog_migrate/4c45151c2f9cace97a7180719303e923.png)
③量化
因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。
根据人眼的视觉特性(对低频敏感,对高频不太敏感)对低频分量采取较细的量化,对高频分量采取较粗的量化。
如果原始图象中细节丰富,则去掉的数据较多,反之,细节少的原始图象在压缩时去掉的数据少些。
④DC系数的差分编码
8×
8
图像块经过
DCT
变换之后得到的
DC
直流系数有两个特点:
- 系数的数值比较大
-
相邻 8 × 8 图像块的 DC 系数值变化不大:冗余
根据这个特点,JPEG
算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化
DC
系数的差值DIFF进行编码。
⑤AC系数的Z字扫描和游程编码
由于经过DCT变换后,系数大多集中在左上角,即低频分量区,因此采用Z字形按频率的高低顺序读出,可以出现很多连零的机会,可以使用游程编码。尤其是在最后,如果都是零,给出EOB(End of Block)即可。
JPEG中游程编码的规定为:
(run, level)
-
表示连续 run 个 0 ,后面跟值为 level 的系数
-
Run: 最多 15 个,用 4 位表示 RRRR
-
Level :类似DC, 分成 16 个类别,用 4位表示SSSS表示类别号,类内索引
-
对(RRRR, SSSS)联合用Huffman编码,对类内索引用定长码编码
⑥Huffman编码
对DC系数DPCM的结果和AC系数RLE的结果进行Huffman编码,分成类别,类似指数Golomb编码。
类别ID采用一元码编码,类内索引采用定长码编码。
共有亮度DC、亮度AC、色差DC、色差AC四张码表。
3.JPEG文件组织
①Segment 的组织形式
JPEG
在文件中以
Segment
的形式组织,它具有以下特点:
- 均以 0xFF 开始,后跟 1 byte 的 Marker 和 2 byte 的 Segment length(包含表示Length 本身所占用的 2 byte,不含“0xFF” + “Marker” 所占用的 2 byte);
- 采用 Motorola 序(相对于 Intel 序),即保存时高位在前,低位在后;