JPEG是Hoint Photographic Exports Group的缩写,中文:联合图像专家小组。此小组主要负责静态数字图像的编码方法,即JPEG算法。

压缩算法:1.有损的离散余弦变换DCT(Discrete Cosine Transform)  2.无损的预测压缩技术

熵编码方法:1.Huffman编码  2.算术编码

JPEG图像编码算法使用的大多是离散余弦变换、Huffman编码、顺序编码模式。

 

有损的离散余弦变换

JPEG算法中的DCT变换利用这样一个事实——即人眼对低频分量的图像比对高频分量的图像更敏感

DCT基函数:

android jpeg 压缩算法 jpeg压缩算法步骤_熵编码

步骤:

1.色相转换

2.区块切割与采样

3.离散余弦变换

4.DCT量化

5.Z字形编码

6.熵编码

 

 

4.DCT量化

为了达到压缩数据的目的,需要对DCT系数做量化。量化是对经过离散余弦变换后的频率系数进行量化,这是一个“多到一”映射的过程。量化的目的是减小非0系数的幅度以及增加0值系数的数目,在一定的主观保真的前提下,丢掉那些对视觉效果影响不大的信息,量化是图像质量下降的最主要原因。

量化是在8×8像素块上完成DCT变换之后进行的,一旦非重要的分量被去除,是无法恢复的,因此量化过程是不可逆的有损压缩过程。当量化表建立好之后量化过程就很简单了,简单说就是选择“量化比例系数”,然后DCT系数除以“比例系数”得到“量化后的DCT系数”,量化后的比例系数中数值较大的被映射到非零的整数,数值较小的系数被映射到零。

android jpeg 压缩算法 jpeg压缩算法步骤_android jpeg 压缩算法_02


量化表的特点是在量化表的左上角的数值都小,而越往右下角则数值越大。这样设计的目的是为保持低频区系数的准确度,至于高频区,由于人类肉眼对其并不敏感,故量化的数值较大。如果量化系数高,那么压缩比就大,质量不清晰,而反之,量化系数低,那么就是相对较少地抛弃图像信息,压缩比就小。因此需要在一定的主观保真的前提下,丢掉那些对视觉效果影响不大的信息。

该量化表是根据人眼对量化误差的视觉阈值来确定的。由于人眼视觉系统的频率响应随着空间频率的增加而下降,并且对于两个色度分量的下降比亮度分量快。所以,JPEG为亮度分量和色度分量分别推荐了量化表,那也就是Y分量和UV分量使用的量化表是不同的。

android jpeg 压缩算法 jpeg压缩算法步骤_图像质量_03