一、实验目的
掌握JPEG编解码系统的基本原理。初步掌握复杂的数据压缩算法实现,并能根据理论分析需要实现所对应数据的输出。
二、实验设备
安装Windows和Visual Studio软件的个人计算机
三、实验内容
1.jpeg解码原理
解码是编码的逆过程
2.jpeg文件格式
2.1Segment 的组织形式
JPEG 在文件中以 Segment 的形式组织,它具有以下特点:
· 均以 0xFF 开始,后跟 1 byte 的 Marker 和 2 byte 的 Segment length(包含表示Length 本身所占用的 2 byte,不含“0xFF” + “Marker” 所占用的 2 byte);
·采用 Motorola 序(相对于 Intel 序),即保存时高位在前,低位在后;
·Data部分中,0xFF后若为0x00,则跳过此字节不予处理;
2.2JPEG 的 Segment Marker
2.3jpeg解码流程
(1)读取文件
(2)解析segmentmarker:依次解析出SOI、APPO、DCT、SCF0、DHT、SOS、EOI
(3)依据每个分量的水平采样、垂直采样因子计算MCU(微控制单元,即RAM,即要开辟的图像内存?)的大小,并得到每个MCU中8*8宏块的个数。
(4)对每个MCU解码:对每个宏块进行huffman解码得到DCT系数,进行IDCT得到变换之前的数据。
(5)解析到EOI,解码结束
(6)将得到的Y、Cb、Cr转换成需要的色彩空间并保存。
四、编码过程
1、逐步调试JPEG解码器程序。将输入的JPG文件进行解码,将输出文件保存为可供YUVViewer观看的YUV文件。
1)加入yuv格式
2)loadjpeg.c中加入判断输出格式—YUV
3)loadjpeg.c的main函数中增加判断yuv代码
4)在tinyjpeg.c中加入case TINYJPEG_FMT_YUV项
输出yuv文件如图: