一、实验目的
掌握JPEG编解码系统的基本原理。初步掌握复杂的数据压缩算法实现,并能根据理论分析需要实现所对应数据的输出。
二、实验原理
1、JPEG编解码原理
(1)编码原理
零偏置(Level Offset):对于灰度级是的像素,通过减去,将无符号的整数值变成有符号数;对于n=8,即将0~255的值域,通过减去128,转换为值域在-128~127之间的值
DCT变换:对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,不足8×8的图像块,取边缘像素补齐,对每个块做DCT变换,直流系数在每个块的左上角,右下角的分量频率高。
DC系数的差分编码:8×8图像块经过DCT变换之后得到的DC直流系数(系数的数值比较大;相邻8×8图像块的DC系数值变化不大),JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数的差值DIFF进行Huffman编码
AC系数的Z字扫描:经DCT变换后,系数大多数集中在左上角,即低频分量区,因此采用Z字形按频率的高低顺序读出,可以出现很多连零的机会,使用游程编码。
(2)解码原理
解码Huffman数据→解码DC差值→重构量化后的系数→DCT逆变换→丢弃填充的行/列→反0偏置→对丢失的CbCr分量差值(下采样的逆过程)→YCbCr →RGB
2、JPEG文件格式
SOI,Start of Image,图像开始
APP0,Application,应用程序保留标记0
DQT,Define Quantization Table,定义量化表
SOF0,Start of Frame,帧图像开始
DHT,Define Huffman Table,定义哈夫曼表
SOS,Start of Scan,扫描开始 12字节
EOI , End of Image,图像结束 2字节
三、实验步骤
1、将输入的JPG文件进行解码,输出文件保存为YUV文件
2、用于存储霍夫曼码表
3、 存储当前有关解码的信息、DCT变换后的值;并指向量化表和DC、AC的Huffman表
4、用于存储JPEG图像的宽高、码流长度、数据流指针、量化表、Huffman码表,色彩空间转换等。
5、输出DC图像并统计其概率分布
概率分布图像