JPEG编解码

一.实验目的

掌握JPEG编解码系统的基本原理。初步掌握复杂的数据压缩算法实现,并能根据理论分析需要实现所对应数据的输出。

二.实验原理和过程

JPEG编码框架解析

Level offset:零偏置电平下移,JPEG使用YUV方式,所以格式要先变成YUV,然后将灰度级是2^n的图像,通过减去2^(n-1),这样做就让无符号数变为有符号的了。对于256灰度级的来说,就从0~256变成-128~127了。这样做减少了像素的绝对值

同时。也要进行一定的采样,常见的有4:2:2;4:4:4;4:2:0。

8*8DCT:把图像变成8*8的块,进行DCT变换量化熵编码时,单位是每一个块,这样做的目的实现能量集中和去相关,便于去除空间冗余,提高编码效率。

         通过DCT变换,8×8个灰度值被转换为8×8个频率谱值,分别对应不同频率。DCT变换系数值均为实数。低频谱值位于左上部分,高频谱值位于右下部分。通过下述公式可知,左上角F(0,0)对应频率为0,被称为DC系数,其他63个系数称为AC系数。

 Uniform scalar quantization:均匀量化。量化是一个幅值离散的过程。人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。大多数图像的高频分量较小,相应于图像高频分量的系数经常为零,加上人眼对高频成分的失真不太敏感,所以可用更粗的量化。对低频分量采取较细的量化。

熵编码

   1AC quantization indices(AC系数编码)

              把8×8的系数矩阵转化为1×64的一维数据,而且采用的方式为Zig-Zag扫描法,采用Z字型的好处是可以把低频系数和高频系数分别集中在一起,而随着频率的增加,高频系数基本上都是0,方便采用0行程编码从而压缩数据。

      采用Zig-Zag扫描后,高频成分被量化为0,而且基本集中在一起,可以对AC系数采用游程编码,即记录此数值前的连续数值0的个数。下面是个对AC系数压缩的例子。

2.DC quantization indices(DC 系数编码)

      由于DC系数是整个8×8块的均值,所以相邻块的DC系数有很大的相关性,同时DC系数通常比AC系数要大得多,JPEG标准对DC系数采用相邻DC差分(DPCM),通常Diff具有很小的数值,然后进行Huffman编码。如下图所示(第一个块的DC定义为0)。

JPEG文件格式分析

JPEG 在文件中以 Segment 的形式组织,它具有以下特点
         1.均以 0xFF 开始,后跟 1 byte Marker 2 byte Segment length (包含表示
Length 本身所占用的 2 byte ,不含“ 0xFF + Marker ” 所占用的 2 byte );
         2.采用 Motorola 序(相对于 Intel 序),即保存时高位在前,低位在后;
         3. Data 部分中, 0xFF 后若为 0x00 ,则跳过此字节不予处理

名称 标记固定值 具体字段

SOI

图像开始

0xFFD8

APP0

应用程序保留标记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位图数据

字段⑦“缩略图水平像素数目”和字段⑧“缩略图垂直像素数目”的值均为0。

APPn

应用程序保留标记n,其中n=1~15(任选)

0xFFE1~0xFFF

包含2个具体字段

① 数据长度                2字节     

①~②2个字段的总长度
 即不包括标记代码,但包括本字段
 ② 详细信息   数据长度-2字节   内容不定

DQT

定义量化表

0xFFDB

包含9个具体字段

① 数据长度         2字节            字段①和多个字段②的总长度,即不包括标记代码,但包括本字段
 ② 量化表        数据长度-2字节

精度及量化表ID   1字节      

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

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

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

SOF0

帧图像开始

0xFFC0

① 数据长度           2字节     ①~⑥六个字段的总长度,即不包括标记代码,但包括本字段
 ② 精度                 1字节     每个数据样本的位数,通常是8位,一般软件都不支持 12位和16位
 ③ 图像高度           2字节     图像高度(单位:像素),如果不支持 DNL 就必须 >0
  ④ 图像宽度           2字节     图像宽度(单位:像素),如果不支持 DNL 就必须 >0
  ⑤ 颜色分量数        1字节     只有3个数值可选,1:灰度图;3:YCrCb或YIQ;4:CMYK。而JFIF中使用YCrCb,故这里颜色分量数恒为3
  ⑥颜色分量信息      颜色分量数×3字节(通常为9字节)

       a)         颜色分量ID                 1字节

       b)        水平/垂直采样因子      1字节                        高4位:水平采样因子
                  低4位:垂直采样因子

       c)        量化表                         1字节                        当前分量使用的量化表的ID

本标记段中,字段⑥应该重复出现,有多少个颜色分量(字段⑤),就出现多少次(一般为3次)。

DHT

定义哈夫曼表

0xFFC4包含2个具体字段

包含2个具体字段

①数据长度            2字节            

 字段①和多个字段②的总长度,即不包括标记代码,但包括本字段
② 哈夫曼表           数据长度-2字节

     a)   表ID和表类型       1字节    

       高4位:类型,只有两个值可选
        0:DC直流;1:AC交流

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值