JPEG原理分析及JPEG解码器调试

本文详细介绍了JPEG原理,包括实验内容、步骤和代码分析,重点探讨了JPEG解码过程中DC和AC图像的输出,并提供了相关源码的解读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.实验内容

1.编解码原理

编码过程如上图所示,解码是编码的逆过程。
1)零偏置
对于灰度级是2n的像素,通过减去2n-1,将无符号的整数值变成有符号数;
对于n=8,即将0~255的值域,通过减去128,转换为值域在-128~127之间的值,可以使像素的绝对值出现3位10进制的概率大大减少。
2)将图像按8*8(pixel)划分成MCU,再进行DCT变换,二维正反离散余弦变换的算式:

3) 因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。
根据人眼的视觉特性(对低频敏感,对高频不太敏感)对低频分量采取较细的量化,对高频分量采取较粗的量化;如果原始图象中细节丰富,则去掉的数据较多,量化后的系数与量化前差别;反之,细节少的原始图象在压缩时去掉的数据少些。
4)按Z字形把量化后的数据读出,例:

5)游程编码
由于经DCT变换后,系数大多数集中在左上角,即低频分量区,因此采用Z字形按频率的高低顺序读出,可以出现很多连零的机会。可以使用游程编码。尤其在最后,如果都是零,给出EOB (End of Block)即可。
6)差分编码
 8×8图像块经过DCT变换之后得到的DC直流系数有两个特点:系数的数值比较大和相邻8×8图像块的DC系数值变化不大,所以采用差分编码。
DC=8,上一DC=5,则DIFF=8-5=3,类别ID=2,类内索引=3,则码流=10011。


2.JPEG文件格式介绍

标记名称

全写

表示的意义

标记代码(固定值)

SOI

Start of Image

图像开始

0xFFD8

APP0

Application

应用程序保留标记0

0xFFE0

DQT

Define Quantization Table

定义量化表 

0xFFDB

SOF0

Start of Frame

帧图像开始 

0xFFC0

DHT

Define Huffman Table

定义哈夫曼表 

0xFFC4

SOS

Start of Scan

扫描开始 12字节 

0xFFDA

EOI

End of Image

图像结束

0xFFD9


#APP0,Application,应用程序保留标记0
u  标记代码                                 2字节     固定值0xFFE0
u  包含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,定义量化表
  标记代码                          2字节            固定值0xFFDB
  包含9个具体字段:
  ① 数据长度                  2字节            字段①和多个字段②的总长度
                                                            即不包括标记代码,但包括本字段
  ② 量化表        数据长度-2字节
a)         精度及量化表ID   1字节            高4位:精度,只有两个可选值
                                                              0:8位;1:16位
                                                低4位:量化表ID,取值范围为0~3
b)        表项       (64×(精度+1))字节              例如8位精度的量化表
  &nb
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值