JPEG编码基本流程概述



《JPEG编码基本流程概述》

图1  JPEG编码流程框图


图1JPEG编码流程框图,JPEG编码的过程可以分为几个相对独立的部分,具体的编码步骤如下:

(1)、颜色空间转换

颜色空间变换将图像从RGB颜色空间转换到依赖于人眼视觉特性的YCbCr颜色空间,从而实现亮度信息Y和色彩信息CrCb的分离。然后对YCrCb分别进行编码。因为对人的视觉而言,颜色信息的重要性不如亮度信息,所以可以丢掉部分颜色信息,以达到压缩数据的目的。

RGB颜色空间转换到YCbCr的计算公式如下:

Y=0.299*R+0.587*G+0.114*B

Cb=-0.1687*R-0.3313*G+0.5*B+128

Cr=0.5*R-0.4187*G-0.0813*B+128

(2)、抽样并构建MCU(最小编码单元)

颜色空间转换后的图像可以看作是三个分量图像的组合,其中Y表示图像的亮度信息,Cr表示图像的红色差信息,Cb表示图像的蓝色差信息。考虑到不同分量信息对视觉的贡献不同,因此可以以一定的比例对不同的分量进行采样。采样之后重组得到的数据块构成一个MCUMCU是最小编码单元,是JPEG压缩算法的最小重复单元。经过此步,图像被分割成若干个MCU,每个MCU都有完全相同的后续处理步骤。

(3)、对MCU进行DCT变换

JPEG编码标准中所使用的正交变换为DCT变换。由于一个MCU中包含多个数据块,所以对MCU进行DCT变换实际上是分别对MCU中的各个数据块进行DCT变换。

8×8的二维DCT变换公式如下:

《JPEG编码基本流程概述》=《JPEG编码基本流程概述》《JPEG编码基本流程概述》《JPEG编码基本流程概述》

其中《JPEG编码基本流程概述》为0,1,2……6,7之间的整数。当《JPEG编码基本流程概述》均为0时,《JPEG编码基本流程概述》,否则《JPEG编码基本流程概述》。实际上,在计算机中二维DCT变换是通过两次一维DCT变换实现的。一维DCT变换则是将数据块与一个已知的DCT系数矩阵相乘来计算得到的。

(4)量化

经过DCT变换后,图像的各分量数值变换成了对应的频率系数,为了压缩图像数据,需要对这些频率系数进行量化。由于图像中的各频率成分对视觉的影响不同,所以对频率系数的量化并不是采用一个常数值,而是使用一个8×8的量化矩阵,实现对不同频率系数不同程度的量化。

(5)零游程编码

所谓零游程编码是指将输入序列中的每个非零符号和该符号之前的0的个数进行编组编码的方法。当输入序列中含有较多的零时,该编码方法效率较高。在JPEG编码过程中量化后的DCT系数中将出现大量的0,因此利用零游程编码可以达到较高的编码效率。JPEG图像的零游程编码的扫描顺序并不是基于空间坐标,而是基于频率的高低,称之为Z字形扫描即Zig-Zag扫描。在JPEG编码中,零游程编码将每个非零系数编码为一个二元组,其格式为:(length,value);其中value为当前的非零系数值,length为该值之前的连续的零值系数的个数。

(6)熵编码

熵编码可以对零游程编码后的数据进行进一步地压缩,减少冗余信息。熵编码将出现频率较高的元组用较少的比特来表示,将出现频率较低的元组用较多的比特来表示,从而可以减少图像数据所占用的比特位,即图像的数据量。最常用的熵编码有霍夫曼编码和算术编码。

(7)构建JPEG文件

经过JPEG的编码过程得到了JPEG的编码数据,但仅有这些数据还不够,JPEG文件有着更复杂的组成结构。JPEG文件不仅要存储压缩后的数据位流,还要保存图像的相关属性信息以及解码所需的表数据等。JPEG文件的组成结构如图2所示。

《JPEG编码基本流程概述》

2  JPEG文件结构图

    原文作者:游程编码问题
    原文地址: https://blog.csdn.net/armtao/article/details/45015029
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞