目的
掌握JPEG编解码系统的基本原理。
初步掌握复杂的数据压缩算法实现,并能根据理论分析需要实现所对应数据的输出。
JPEG文件结构框架
整个JPEG包含三个结构体,分为三个层次:帧、MCU、和存放DC、AC系数的霍夫曼码表。
JPEG编解码原理框图
JPEG编码的过程如上图所示。解码是编码的逆过程。
JPEG文件格式
- Segment 的组织形式
JPEG 在文件中以 Segment 的形式组织,它具有以下特点:
均以 0xFF 开始,后跟 1 byte 的 Marker 和 2 byte 的Segment length(包含表示 Length 本身所占用的 2 byte,不含“0xFF” + “Marker” 所占用的 2 byte);
采用 Motorola 序(相对于 Intel 序),即保存时高位在前,低位在后;
Data 部分中,0xFF 后若为 0x00,则跳过此字节不予处理; - JPEG的Segment Marker
实验步骤
- 逐步调试JPEG解码器程序。将输入的JPG文件进行解码,将输出文件保存为可供YUVViewer观看的YUV文件。
- 程序调试过程中,应做到:
理解程序设计的整体框架
理解三个结构体的设计目的:
• struct huffman_table
• struct component
• struct jdec_private
理解在视音频编解码调试中TRACE的目的和含义:
• 会打开和关闭TRACE
• 会根据自己的要求修改TRACE - 以txt文件输出所有的量化矩阵和所有的HUFFMAN码表。
- 输出DC图像并统计其概率分布。
- 输出某一个AC值图像并统计其概率分布。
JPEG的解码流程
- 读入文件相关信息
- 初步了解图像数据流结构
- 颜色分量单元的内部解码
- 直流系数额差分编码
- 反量化&反zig-zag编码
- 反离散余弦变换
调试过程
test.jpg(上图)
// An highlighted block
var foo = 'bar';