JPEG压缩编码过程
1.1 JPEG简介
JPEG(Joint Photographic Experts Group)是由ISO与IEC于1986年联合成立的一个专家委员会(WG1)。该委员会制定了一系列的静态连续色调图像压缩编码标准(如:有损、无损及接近无损等编码标准,并于1996年开始制定JPEG 2000标准。
JPEG文件使用的颜色空间为YCbCr空间。因此要先将RGB转化为YCbCr空间:
Y = 0.299 R + 0.587 G + 0.114 B
Cb = - 0.1687R - 0.3313G + 0.5 B + 128
Cr = 0.5 R - 0.4187G - 0.0813 B + 128
1.2 JPEG压缩编码及解压缩算法
图1.1 压缩编码算法 图1.2解压缩算法
JPEG压缩编码算法的主要计算步骤如下(解压缩步骤与其相反):
(1)正向离散余弦变换(FDCT);
(2)量化;
(3)Z形扫描;
(4)使用差分脉冲编码调制(DPCM)对直流系数(DC)进行编码;使用行程长度编码(RLE)对交流系数(AC)进行编码;熵编码。
1.2.1 FDCT
对每个单独的彩色图像分量,把整个分量图像分成8x8的图像块,并作为二维离散变换DCT的输入。通过DCT变换,把能量集中在少数几个系数上。它所作的变换可以简单地理解成(x,y)->(x’,y’),即实数对应到实数。
DCT变换使用下面的计算公式:
它的逆变换使用下式计算:
在上面的式子中:
f(i,j)经变换之后,F(0,0)是直流系数(DC,即64个空域图像采样值的平均值),其他为交流系数(AC)。
1.2.2 量化
量化是对经过FDCT变换后的频率系数进行量化,其目的是减小非“0”系数的幅度以及增加“0”值系数的数目。对于有损压缩算法,使用均匀量化器进行量化。用FDCT生成的数据除以对应的量化步距。因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。
图1.3亮度量化表 图1.4 色差量化表
1.2.3 z形扫描
图1.5 Z形扫描
量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排,其结果是把一个8x8的矩阵变成一个1x64的矢量,频率较低的系数放在矢量的顶部。
1.2.4 DC编码
8x8图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8x8图像块的DC系数值变化不大。JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数的差值(Delta)进行编码。
1.2.5 AC编码
AC系数的特点:1x64矢量中包含有许多“0”系数,并且许多“0”是连续的。JPEG使用非常简单和直观的游程编码(RLE)对它们进行编码。
例如:5555557777733322221111111
行程编码为:(5,6)(7,5)(3,3)(2,4)(1,7)。
1.2.6 熵编码
采用huffman编码。对DPCM编码后的直流DC系数和RLE编码后的交流AC系数作进一步的压缩。压缩数据符号时,霍夫曼编码器对出现频度比较高的符号分配比较短的代码,而对出现频度较低的符号分配比较长的代码。这种可变长度的霍夫曼码表可以事先进行定义。
参考资料
http://read.chaoxing.com/ebook/read_11769804.html DCT
http://read.chaoxing.com/ebook/read_12304091.html 数字图像处理
http://nes.ustc.edu.cn/jy/05/050001/050001005/m3_2.ppt JPEG图像编码标准