实验原理
JPEG简介
JPEG是数字图像的有损压缩的常用方法,特别是对于由数码摄影产生的图像。JPEG(Joint Photographic Experts Group)是在国际标准化组织(ISO)领导之下制定静态图像压缩标准的委员会,第一套国际静态图像压缩标准ISO 10918-1(JPEG)就是该委员会制定的。由于JPEG优良的品质,使他在短短几年内获得了成功,被广泛应用于互联网和数码相机领域,网站上80%的图像都采用了JPEG压缩标准。
JPEG编解码流程
编码流程
彩色空间转换
首先,图像应该从RGB转换成不同的颜色空间,称为Y’CBCR(或非正式地,YCbCr)。它具有三个分量Y’,CB和CR:Y’分量表示像素的亮度,CB和CR分量表示色度
下采样
由于人眼对亮度比对色度更加敏感的视觉特性,因此通过降低Cb和Cr分量的空间分辨率(称为“下采样”)来进行编码。 4:4:4(无下采样),4:2:2(在水平方向上减少2倍),或(最常见)4:2: 0(在水平和垂直两个方向上减少2倍)。
分块
下采样后,每个通道必须分为8×8块。 取决于色度下采样,产生大小为8×8(4:4:4 - 无下采样),16×8(4:2:2)或最通常为16×16(4:4)的最小编码单元(MCU)2:0)。 在视频压缩中,MCU被称为宏块。本实验中采取的是8×8的宏块。
零偏置level offset
对于灰度级是 2n 的像素,通过减去 2(n−1) ,将无符号 的整数值变成有符号数。 对于n=8,即将0~255的值域,通过减去128,转换为值 域在-128~127之间的值。目的:使像素的绝对值出现3位10进制的概率大大 减少。
8×8的离散余弦变换
将每个8×8的块进行DCT变换。DCT的变换公式:
量化
1.采用中平型均匀量化器量化
2.步距是按照系数(所在的位置 、颜色分量 )来确定。
因为人眼对亮度信号比对色差信号更敏感,因此使用了两 种量化表:亮度量化值和色差量化值。
3. 根据人眼的视觉特性(对低频敏感,对高频不太敏感)对 低频分量采取较细的量化,对高频分量采取较粗的量化(如果原始图象中细节丰富,则去掉的数据较多,量化后的系数与 量化前差别;反之,细节少的原始图象在压缩时去掉的数据少些)
真正的量化表=缩放因子×基本量化表
质量因子≤ 50:缩放因子= 50 / 质量因子;
质量因子> 50:缩放因子 = 2 – 质量 因子/ 50
DC系数的差分编码
8×8图像块经过DCT变换之后得到的DC直流系数有两个特点 :1.系数的数值比较大2.相邻8×8图像块的DC系数值变化不大:冗余
根据这个特点,JPEG算法使用了差分脉冲调制编码 (DPCM)技术,对相邻图像块之间量化DC系数的差值 DIFF进行编码:
AC系数的Z字扫描
由于经DCT变换后 ,系数大多数集中 在左上角,即低频 分量区,因此采用Z 字形按频率的高低 顺序读出,可以出 现很多连零的机会 。可以使用游程编 码。尤其在最后, 如果都是零,给出 EOB (End of Block) 即可。
AC系数的游程编码
在JPEG和MPEG编码中规定为:(run, level)
表示连续run个0,后面跟值为level的系数
如:0,2,0,0,3,0,-4,0,0,0,-6,0,0,5,7
表示为(1, 2), (2, 3) ,…
编码:
Run: 最多15个,用4位表示RRRR
Level:类似DC
分成16个类别,用4位表示SSSS表示类别号
类内索引 对(RRRR, SSSS)联合用Huffman编码
对类内索引用定长码编码
解码流程
解码Huffman数据
解码DC差值
重构量化后的系数
DCT逆变换
丢弃填充的行/列
反0偏置
对丢失的CbCr分量差值(下采样的逆过程)
YCbCr to RGB
JPEG文件格式
名称 | 标记 | 全称 |
---|---|---|
SOI | 0xFF, 0xD8 | Start Of Image |
SOF0 | 0xFF, 0xC0 | Start Of Frame (baseline DCT) |
DHT | 0xFF, 0xC4 |