实验五——JPEG编解码

本文详细介绍了JPEG编解码的实验原理,包括文件格式、量化表、采样因子、Huffman表和压缩图像数据的处理方法。通过理解DC和AC系数的解码过程,以及利用Huffman编码进行数据压缩,深入剖析了JPEG图像压缩的核心机制。此外,还涉及了实验代码分析,重点关注了直流系和交流系数码表的实现。
摘要由CSDN通过智能技术生成

一.实验原理

(1)JPEG的文件格式

SOI,Start of Image,图像开始, 固定值 0xFFD8 
APP0,Application,应用程序保留标记0, 固定值 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位图数据
 
DQT,Define Quantization Table,定义量化表, 固定值 0xFFDB
n包含9个具体字段:
  ① 数据长度  2字节  字段①和多个字段②的总长度
  ② 量化表    数据长度-2字节   
          a) 精度及量化表 ID   1字节 

           高4位:精度,只有两个可选值     0:8位;1:16位
      低4位:量化表ID,取值范围为0~3

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

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

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

SOF0,Start of Frame,帧图像开始, 固定值 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
DHT,Define Huffman Table,定义哈夫曼表, 固定值 0xFFC4
2 个具体字段

       ① 数据长度      2字节 

       ② huffman  数据长度-2字节

       ID和表类型  1字节 

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

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

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

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

  编码内容  16个不同位数的码字数量之和(字节)
本标记段中,字段②可以重复出现(一般4次),也可以只出现1次
SOS,Start of Scan,扫描开始12字节, 固定值 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

EOI,End of Image,图像结束2字节, 固定值 0xFFD9 
(2)huffman表存储方式的说明
在标记段DHT内,包含了一个或者多个的哈夫曼表。对于单一个哈夫曼表,应该包括了三部分:
(1) 哈夫曼表 ID 和表类型
这个字节的值为一般只有四个0x00、0x01、0x10、0x11。
        0x00 表示 DC 直流 0 号表;
        0x01 表示 DC 直流 1 号表;
        0x10 表示 AC 交流 0 号表;
        0x11 表示 AC 交流 1 号表。
(2) 不同位数的码字数量
(3)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值