Day: June 23, 2006
-
JPEG 压缩编码笔记
一大清早醒来,百无聊赖间想到下学期好像是要学图像压缩的说,然后就联系到了JPEG编码,既然想到了就翻开了床头的数据通信原理,翻到编码论部分,貌似以前看这本书的时候都整整把这章给跳掉了,很是枯燥的。记得这章在图书馆翻这本书3e的时候大致浏览了遍,留有少许记忆的,不妨重新整理下做个笔记。 一、JPEG算法概要 JPEG(Joint Photographic Experts Group)是一个由ISO和IEC两个组织机构联合组成的一个专家组,负责制定静态的数字图像数据压缩编码标准,这个专家组开发的算法称为JPEG算法,并且成为国际上通用的标准,因此又称为JPEG标准。JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。 JPEG专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换(Discrete Cosine Transform,DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。使用有损压缩算法时,在压缩比为25:1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。例如,在VCD和DVD-Video电视图像压缩技术中,就使用JPEG的有损压缩算法来取消空间方向上的冗余数据。为了在保证图像质量的前提下进一步提高压缩比,近年来JPEG专家组正在制定 JPEG2000标准,这个标准中将采用小波变换(Wavelet)算法。 JPEG压缩是有损压缩,它利用了人的视角系统的特性,使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息。JPEG算法框图如图: 压缩编码大致分成三个步骤: 1、使用正向离散余弦变换(Forward Discrete Cosine Transform,FDCT)把空间域表示的图变换成频率域表示的图。 2、使用加权函数对DCT系数进行量化,这个加权函数对于人的视觉系统是最佳的。 3、使用霍夫曼可变字长编码器对量化系数进行编码。 译码或者叫做解压缩的过程与压缩编码过程正好相反。 JPEG 算法与彩色空间无关,因此“RGB到YUV变换”和“YUV到RGB变换”不包含在JPEG算法中。JPEG算法处理的彩色图像是单独的彩色分量图像,因此它可以压缩来自不同彩色空间的数据,如RGB, YCbCr和CMYK。 二、JPEG算法的主要计算步骤 JPEG压缩编码算法的主要计算步骤如下: (1)正向离散余弦变换(FDCT)。 (2)量化(Quantization)。 (3)Z字形编码(Zigzag Scan)。 (4)使用差分脉冲编码调制(Differential Pulse Code Modulation,DPCM)对直流系数(DC)进行编码。 (5)使用行程长度编码(Run-Length Encoding,RLE)对交流系数(AC)进行编码。 (6)熵编码(Entropy Eoding)。 1、正向离散余弦变换 下面对正向离散余弦变换(FDCT)变换作几点说明。 (1)对每个单独的彩色图像分量,把整个分量图像分成若干个8×8的图像块,如图所示,并作为两维离散余弦变换DCT的输入。通过DCT变换,把能量集中在少数几个系数上。 (2)DCT变换使用下式计算: 它的逆变换使用下式计算: 上面两式中, C(u),C(v) = (2)-1/2,当u, v = 0; C(u),C(v) = 1,其他。 f(i, j)经DCT变换之后,F(0,0)是直流系数,其他为交流系数。 (3)在计算两维的DCT变换时,可使用下面的计算式把两维的DCT变换变成一维的DCT变换:…