首页 > 编程知识 正文

压缩器的基本原理(jpeg压缩算法)

时间:2023-05-06 12:48:00 阅读:102091 作者:3109

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


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。