一、       JPEG编解码原理

实验五:JPEG编码实验

JPEG编码的过程如上图所示。解码是编码的逆过程。

二、JPEG文件格式介绍

l  SOI,Start of Image,图像开始

SOI ,Start of Image,   图像开始

  标记代码     2字节      固定值0xFFD8

EOI,End of Image,   图像结束 2字节

  标记代码     2字节      固定值0xFFD9

 

l  APP0,Application,应用程序保留标记0

标记代码                   2字节      固定值0xFFE0

包含9个具体字段:
  ①数据长度                  2字节      ①~⑨9个字段的总长度
  ② 标识符            5字节     固定值0x4A46494600,即字符串“JFIF0”
  ③版本号             2字节     一般是0x0102,表示JFIF的版本号1.2
  ④ X和Y的密度单位 1字节      只有三个值可选
                   0:无单位;1:点数/英寸;2:点数/厘米
  ⑤ X方向像素密度      2字节      取值范围未知
  ⑥ Y方向像素密度           2字节        取值范围未知  
  ⑦缩略图水平像素数目    1字节      取值范围未知
  ⑧缩略图垂直像素数目    1字节      取值范围未知
  ⑨缩略图RGB位图           长度可能是3的倍数              缩略图RGB位图数据

 

l  DQT,DefineQuantization Table,定义量化表

标记代码                   2字节      固定值0xFFDB

包含9个具体字段:

  ① 数据长度       2字节      字段①和多个字段②的总长度

  ② 量化表            数据长度-2字节

    a) 精度及量化表ID       1字节   

       高4位:精度,只有两个可选值        0:8位;1:16位

     低4位:量化表ID,取值范围为0~3

    b) 表项          (64×(精度+1))字节

         例如8位精度的量化表,其表项长度为64×(0+1)=64字节

本标记段中,字段②可以重复出现,表示多个量化表,但最多只能出现4次

 

l  SOF0,Start of Frame,帧图像开始

标记代码                            2字节      固定值0xFFC0

包含9个具体字段:
  ①数据长度                  2字节      ①~⑥六个字段的总长度
  ② 精度                       1字节        每个数据样本的位数
                           通常是8位,一般软件都不支持 12位和16位
  ③图像高度                  2字节      图像高度(单位:像素)

  ④图像宽度                  2字节      图像宽度(单位:像素)

  ⑤颜色分量数             1字节      只有3个数值可选
                 1:灰度图;3:YCrCb或YIQ;4:CMYK
                 而JFIF中使用YCrCb,故这里颜色分量数恒为3
  ⑥颜色分量信息 颜色分量数×3字节(通常为9字节)                                               a)颜色分量ID                   1字节     

              b)水平/垂直采样因子         1字节     

                                     高4位:水平采样因子
                            低4位:垂直采样因子
           c) 量化表           1字节                                                                       当前分量使用的量化表的ID

l  DHT,Define HuffmanTable,定义哈夫曼表

标记代码                   2字节               固定值0xFFC4

包含2个具体字段:

     ① 数据长度       2字节                 

     ② huffman表         数据长度-2字节

表ID和表类型        1字节              

                     高4位:类型,只有两个值可选

                                  0:DC直流;1:AC交流
                          低4位:哈夫曼表ID,

                                  注意,DC表和AC表分开编码

不同位数的码字数量     16字节

编码内容         16个不同位数的码字数量之和(字节)
本标记段中,字段②可以重复出现(一般4次),也可以只出现1次。

 

l  SOS,Start of Scan,扫描开始 12字节

标记代码                          2字节        固定值0xFFDA

包含2个具体字段:
 ①数据长度                    2字节        ①~④两个字段的总长度
 ②颜色分量数             1字节        应该和SOF中的字段⑤的值相同,即:
                             1:灰度图是;3: YCrCb或YIQ;4:CMYK。

 ③颜色分量信息
    a) 颜色分量ID           1字节
    b) 直流/交流系数表号       1字节     

           高4位:直流分量使用的哈夫曼树编号
        低4位:交流分量使用的哈夫曼树编号

  ④压缩图像数据
        a)谱选择开始 1字节      固定值0x00
        b)谱选择结束      1字节  固定值0x3F
        c)谱选择           1字节      在基本JPEG中总为00

三、 实验步骤

1.逐步调试JPEG解码器程序。将输入的JPG文件进行解码,将输出文件保存为可供

YUVViewer观看的YUV文件。

2. 程序调试过程中,应做到:

 理解程序设计的整体框架

 理解三个结构体的设计目的

2

 struct huffman_table

 struct component

 struct jdec_private

 理解在视音频编解码调试中TRACE的目的和含义

 会打开和关闭TRACE

 会根据自己的要求修改TRACE

3.以txt文件输出所有的量化矩阵和所有的HUFFMAN码表。

4. 输出DC图像并经过huffman统计其概率分布(使用第三个实验中的Huffman编码器)。

5. 输出某一个AC值图像并统计其概率分布(使用第三个实验中的Huffman编码器)。


四、 实验结果

原图:实验五:JPEG编码实验


实验五:JPEG编码实验

实验五:JPEG编码实验

实验五:JPEG编码实验实验五:JPEG编码实验

实验五:JPEG编码实验

实验五:JPEG编码实验实验五:JPEG编码实验

实验五:JPEG编码实验

相关文章:

  • 2022-01-09
  • 2021-08-21
  • 2021-11-05
猜你喜欢
  • 2021-06-15
  • 2021-11-21
  • 2022-02-13
  • 2021-11-18
  • 2021-11-30
相关资源
相似解决方案