JPEG(发音:[Depg])是一种有损压缩标准方法,广泛用于照片视频。
这个名字代表联合摄影专家组。1992年,联合图像专家组公布了JPEG标准,1994年获得ISO 10918-1认证。JPEG和MPEG(运动图像专家组),一个视频和音频压缩标准,很容易混淆,但它们是不同的组织和标准。
其实JPEG并不是一种文件格式,而是联合图像专家组提出的一种图像压缩方法(类似于H.264等视频中的编解码标准)。JPG或jif格式只是一个数据打包容器(类似于MP4、MOV等视频中的打包格式)。
1. 概述
JPEG编码的主要过程有:颜色空间转换、下采样、分割面片、离散余弦变换、量化和熵编码。
2. 色彩空间转换(Color Conversion)
传感器采集的RAW图像用RGB颜色空间表示。也就是说,根据每个像素的RGB(红、绿、蓝)值填充相应的像素位置。首先,我们将RGB(红、绿、蓝)转换成一个不同的颜色空间,称为YCrCb (YUV)。
y分量代表像素的亮度,u分量代表色度,v分量代表色度。
RGB空间到YUV空间的转换公式为:
下图是分解y、u和v的示例:
00-1010下采样,即降低人类视觉系统的不敏感色度(U和V分量)。虽然颜色的数量减少了,但人眼不会注意到图像质量的任何差异。
这种下采样在JPEG上的比例可以是4:433604(无下采样)、4:233602(之前颜色为1/2的水平方向2的倍数之一),最常见的是4:2:0(之前颜色为1/4的水平方向2和垂直方向2的倍数之一)。
图:
4.分割面片
源图像中每个点的三个分量交替出现。首先,将三个组件分开,并存储在三个表中。然后从左到右、从上到下依次读取8*8个子块,存储在长度为64的表中,即可以进行DCT变换。如果原图的长宽不是8的倍数,需要先补成8的倍数,这样才能逐块处理。编码时,程序从源数据中读取一个8*8的数据块,然后进行DCT变换、量化和编码,然后读取并处理下一个8 次8的数据块。图像的数据值必须减去128,因为离散余弦变换公式接受的数字范围在-128和127之间。
3. 采样(Downsampling)
离散余弦变换是一个类似傅里叶变换的数学工具(不懂傅里叶变换的同学可以动:https://www.bilibili.com/video/av19141078可以简单的学习傅里叶变换)。它将信号从时域转换到频域。在该步骤中,视频中的每个分量(Y、U、V)被生成为三个区域,每个区域被进一步划分为像瓦片一样排列的8*8个子区域,并且每个子区域被使用二维离散余弦变换(DCT)变换到频率空间。
如果有像这样的8*8 8位(0~255)子区域:
图:
表示为矩阵:
a7b4a44cc879c6e8b91d24ac3?from=pc">原始数据每个值的范围是 [0-255] ,使每个数字减去 128 ,标准化。
且接着使用离散余弦变换,和舍位取最接近的整数,得到结果为
左上角相当大的数值称为DC系数(直流系数);其他 63 个值称为AC系数(交流系数)。
6.量化
利用人眼对低频数据敏感对高频数据不敏感的特性,我们可以将离散余弦变换后的很多更高频率的成分舍位成为接近 0 ,且剩下很多会变成小的正或负数。
JPEG标准中定义了量化表。
使用QYQY量化矩阵与前面所得到的DCT系数矩阵逐项相除,得到结果为:
7. 熵编码技术(Entropy Coding)
熵编码是一种无损压缩的技术,它使用Z字形(zigzag)将矩阵数据排列。然后将排列后的数据使用哈夫曼编码(哈夫曼编码的资料请自行查找))。
对于前者量化的系数所作的Z字体序列会是:
−3, 0,−3, −2, −6,2, −4, 1, −3,1, 1, 5, 1, 2,−1, 1, −1, 2, 0, 0,0, 0, 0, −1, −1, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0,0, 0, 0, 0,0, 0, 0,0, 0,0当剩下的所有系数都是零,对于过早结束的序列,JPEG有一个特别的dcdh编码用词。使用这个特殊的编码用词,EOB,该序列变为
−3, 0,−3, −2, −6,2, −4, 1 −3,1, 1, 5, 1, 2,−1, 1, −1, 2, 0, 0,0, 0, 0, −1, −1, EOB在这一步数据量得到了极大的压缩。
8. 结果
JPEG是一种有损压缩算法。所以不同程度的压缩比例,会呈现出不同的文件大小,以及差异化的可视化呈现。以下,呈现了相关的压缩比例与原始图像的对比。从上到下,呈现了压缩比从小到大的结果。每一个图片中,左边是原始图像,右边是压缩后的图像。对应的文件大小显示在图线的上方。
9. 引用
https://ustc-dip.github.io/slice/Chapter8-图像压缩.pdf
https://en.wikipedia.org/wiki/JPEG
https://blog.csdn.net/songdan0201/article/details/51957758
https://taozhaojun.github.io/2016/01/17/camera/
https://compressjpeg.com
https://www.jianshu.com/p/71caefdb1e14