音视频处理-图像格式-jpeg

首先感谢http://blog.csdn.net/lpt19832003/article/details/1713718分享的知识,本文在他的基础上做一些更细致的分析和结论,不足的地方请多留言交流

jpeg格式原理:jpeg是一种压缩格式,相比原始的RGB或者YUV图像数据,jpeg格式所占用的字节数更低。jpeg通过降低人眼不敏感的色彩量,保留人眼敏感的亮度量,压缩原始图像数据。

利用UtralEdit分析一张jpeg图片:
这里写图片描述

jpeg格式:0xFF + 关键字段
1、SOI字段:start of image 关键字 0xD8
FF D8为SOiI字段 标志图片起始

2、APP0字段:application0 应用0字段 关键字 0xE0

双击标记的字段为APP0的字段,包含9个具体字段:
① 数据长度 2字节 ①~⑨9个字段的总长度
图中为00 10(注意是以16进制查看的) 换算下来该有16个字节。算一下从00 到 00 刚好16byte
② 标识符 5字节 固定值0x4A46494600,即字符串“JFIF0”
图中为JFIF0
③ 版本号 2字节 一般是0x0102,表示JFIF的版本号1.2
图中为0101
④ X和Y的密度单位 1字节 只有三个值可选
0:无单位;1:点数/英寸;2:点数/厘米
图中为0x01 -> 1 意为点数/英寸
⑤ X方向像素密度 2字节 取值范围未知 图中为00 48 猜测意思是范围从0 到 72
⑥ Y方向像素密度 2字节 取值范围未知 同上
⑦ 缩略图水平像素数目 1字节 取值范围未知 图中为00 表示没有缩略图
⑧ 缩略图垂直像素数目 1字节 取值范围未知 同上
⑨ 缩略图RGB位图 长度可能是3的倍数 缩略图RGB位图数据 图中不存在此属性

  • 缩略图属性为jpeg2000格式才支持 当不存在缩略图的时候,缩略图水平像素数目和垂直像素数目、RGB位图就为 00 00 无

    3、DQT:define Quantization table 定义量化表 关键字0xDB
    这里写图片描述
    包含9个具体字段:
    ① 数据长度 2字节 代表字段①和多个字段②的总长度
    图中为00 43 -> 67byte 恰好为图中加黑字段去除FF DB外的字段长度
    ② 量化表 数据长度-2字节
    a) 精度及量化表ID 1字节 高4位:精度,只有两个可选值
    0:8位;1:16位
    低4位:量化表ID,取值范围为0~3
    b) 表项 (64×(精度+1))字节 例如8位精度的量化表
    其表项长度为64×(0+1)=64字节

本标记段中,字段②可以重复出现,表示多个量化表,但最多只能出现4次。
这个图中 DQT字段2的精度及量化表ID表现为00 -> 精度8位 量化表ID为0 计算出表项 64byte 恰好为加黑字段69byte - 2字节(FF DB)- 3字节(00 43 00) 说明这个DQT字段仅包含1个量化表
这里写图片描述
* 再看第二个DQT字段 与上一个分析的DQT字段不同之处在于 量化表ID为1 查询资料暂时结论是这样 量化表ID为0 -> 亮度量化表 量化表ID为1 -> 色度量化表

观察两次量化表的差别 发现色度量化表的大部分属性一致为3F 十进制的63 如果范围从0算起 63应该是64的最后一位 侧面验证文章开头的JPEG格式byte占用数少的结论,即偏向表现亮度信息,弱化色度信息。

SOFO字段:start of frame 帧图像开始 关键字0xC0
这里写图片描述
包含9个具体字段:
① 数据长度 2字节 ①~⑥六个字段的总长度
图中为00 11 即为17byte(00 到01的17byte)
② 精度 1字节 每个数据样本的位数
图中为 08 即为8位的精度
③ 图像高度 2字节 图像高度(单位:像素),如果不支持 DNL 就必须 >0 图中为02 80
④ 图像宽度 2字节 图像宽度(单位:像素),如果不支持 DNL 就必须 >0 图中为04 00
DNL这部分暂时还没有搞懂是什么 知道的朋友留言说下
⑤ 颜色分量数 1字节 只有3个数值可选
1:灰度图;3:YCrCb或YIQ;4:CMYK
而JFIF中使用YCrCb,故这里颜色分量数恒为3(图中为03)
⑥颜色分量信息 颜色分量数×3字节(通常为9字节)每3byte排列下
a) 颜色分量ID 1字节 图中为01 02 03 分别对应3组颜色分量信息
b) 水平/垂直采样因子 1字节 高4位:水平采样因子
低4位:垂直采样因子
(曾经看到某资料把这两者调转了)图中为22 11 11
c) 量化表 1字节 当前分量使用的量化表的ID
图中为00 01 01
着重理解这里 量化表ID分别是 00 01 01对应上面说到的DQT量化表 :00表示亮度信息量化表 01表示色度量化信息表 那么压缩的图像数据是亮度 色度 色度这样存储的 -> 与YUV的存储方式一致 说明JPEG的图像数据排序是与YUV图像有关的

DHT字段:define Huffman table 定义哈夫曼表 关键字0xC4
这里写图片描述
包含2个具体字段:
①数据长度 2字节 字段①和多个字段②的总长度
图中为00 1C 即为 28byte
② 哈夫曼表 数据长度-2字节(即减去00 1C这两个byte)
a) 表ID和表类型 1字节 高4位:类型,只有两个值可选
0:DC直流;1:AC交流
低4位:哈夫曼表ID,
注意,DC表和AC表分开编码 图中为 00 DC直流
b) 不同位数的码字数量 16字节
c) 编码内容 16个不同位数的码字数量之和(字节)
图中为00 - 08

注:先到这里 因为遇见了哈夫曼编码表不太理解 先去学一下哈夫曼编码 2016-10-24 chenxin

sos字段:start of scan 扫描开始12byte 关键字0xDA
这里写图片描述
包含2个具体字段:
①数据长度 2字节 ①~④两个字段的总长度
00 0C 12byte
②颜色分量数 1字节 应该和SOF中的字段⑤的值相同,即:03
1:灰度图是;3: YCrCb或YIQ;4:CMYK。
而JFIF中使用YCrCb,故这里颜色分量数恒为3
③颜色分量信息
a) 颜色分量ID 1字节 01
b) 直流/交流系数表号 1字节 高4位:直流分量使用的哈夫曼树编号 00
低4位:交流分量使用的哈夫曼树编号
④ 压缩图像数据
a)谱选择开始 1字节 固定值0x00
b)谱选择结束 1字节 固定值0x3F
c)谱选择 1字节 在基本JPEG中总为00

EOI字段 : end of image 图像结束 关键字0xD9
这里写图片描述
到此jpeg图像解析完毕 接下来寻求一个jpeg编解码库研究一下jpeg算法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值