一、实验目的
- 掌握JPEG编解码系统的基本原理。
- 初步掌握复杂的数据压缩算法实现,并能根据理论分析需要实现所对应数据的输出。
二、JPEG原理分析
JPEG是一种针对数字图像的有损压缩标准方法,由于JPEG编码算法可以在提供较大的压缩比的同时,保持较好的显示质量,所以该算法逐渐成为最为熟知和广泛使用的数字图像格式和通用标准。JPEG标准本身并没有规定具体的颜色空间,只是对各分量分别进行编码,通常将高度相关RGB颜色空间转换到相关性较小的YUV颜色空间。
-
JPEG文件格式
Segment的组织形式
JPEG在文件中以Segment的形式组织 ,它具有以下特点:均以0xFF开始,后跟1byte的Marker和2byte的Segment length(包含表示Length本身所占用的2byte,不含0xFF+Marker所占用的2byte);
采用 Motorola序(相对于Intel序),即保存时高位在前,低位在后;
Data部分中,0xFF后若为0x00,则跳过此字节不予处理。
-
2.JPEG的编码
1)零偏置:对于灰度级为2^n 的像素,通过减去2^(n-1),将无符号整数变为有符号数,即值域变为正负对称。将绝对值大的数出现的概率大大减小,提高编码效率。
2)DCT变换:先将图像分为8×8的像块,如果图像的宽(高)不是8的整数倍,使用图像边缘像素填充,以不改变频谱分布。实现能量集中和去相关,降低空间冗余度。
3)量化:利用人眼视觉特性设计而成的矩阵量化DCT系数,减小视觉冗余。因为人眼对亮度信号比色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值;根据人眼对低频敏感,对高频不太敏感,对低频分量采取较细的量化,对高频分量采取较粗的量化。JPEG标准中采用中平型均匀量化,输入DCT系数,输出量化系数。
4)DC系数差分编码:8×8像块经过DCT后得到的DC系数有两个特点:
一是系数的值较大;二是相邻像块的DC系数存在相关性(即存在冗余)。
5)AC系数之字形扫描:由于经DCT变换后,系数大多数集中在左上角,即低频分量区,因此采用Z字形按频率的高低顺序读出,可以出现很多连零的机会。可以使用游程编码。尤其在最后,如果都是零,给出 EOB (End of Block)即可。
6)AC系数游程编码:当遇到很多连续的0时,为缩短数据长度,编码非零系数level和它之前0的个数run,(Run,level)。如:0,0,3,0,2,0,0,0,1–>游程编码:(2,3),(2,2),(3,1)
7)Huffman编码:对DC系数DPCM的结果和AC系数RLE的结果进行Huffman编码。
3.JPEG的解码
解码Huffman数据
解码DC差值
重构量化后的系数
DCT