第56章JPEG编码.docx
《第56章JPEG编码.docx》由会员分享,可在线阅读,更多相关《第56章JPEG编码.docx(21页珍藏版)》请在冰豆网上搜索。
第56章JPEG编码
第5章彩色数字图象基础
5.1视觉系统对颜色的感知
5.2图象的颜色模型
5.3图像的三个属性
5.4图像的种类
5.5伽马校正
5.6JPEG压缩编码
5.7图像文件格式
●演示DCT压缩实验。
●演示JPEG不同压缩比的效果图,比较画质、文件大小,观察块噪声。
1本节的教学目标:
学习并理解JPEG压缩编码的基本原理和基本思想。
2本节的教学效果:
明确如何选择各种压缩方法和压缩比。
可以解释VCD图象中方块乱码产生的原因。
可以解释JPEG框图。
例如Photoshop中将BMP图象格式转换为JPEG图象格式时,对话窗中提示图象质量选择(low0,1,2,3,4;Medium5,6,7;High8,9;Maximum10,11,12)和文件大小选择(smallfile-largefile),又如数码相机中的图象质量选择(最优、优、一般)等。
3本节的教学要求:
理解DCT、量化与熵编码的原理和作用。
JPEG不同压缩比的质量比较
(实验时间2003/4/5葛)
使用Photoshop打开Miss.tif(198kB),(Miss即lena图像)另存为JPEG文件,按不同图像品质0-12,(12的品质最好,但压缩比最低)得到以下图像。
图像编号
大小kB
压缩比
主观评价
质量级别
MOS
得分
Miss.tif
198
1:
1
(原始图像)
(原始图像)
(原始图像)
Miss12.jpg
49
4.0:
1
无察觉。
优(Excellent)
5
Miss10.jpg
31
6.4:
1
无察觉。
优(Excellent)
5
Miss08.jpg
21
9.4:
1
刚刚察觉,但不讨厌
良(Good)
4
Miss05.jpg
16
12.4:
1
可察觉块干扰,有点讨厌
中(Fair)
3
Miss03.jpg
14
14.1:
1
可见块干扰,令人反感,质量不能接受
差(Poor)
2
Miss00.jpg
10
19.8:
1
可见明显的块干扰,令人反感,质量完全不能接受
劣(Bad)
1
分析:
1.观察条件:
图像为Miss.tif,256×256像素,RGB模式,黑白图像,文件大小198kB,观察条件为17英寸显示器,Photoshop6.0软件,300%放大,观察图像人物的额头位置,采用拼接方法排列图像并比较。
2.压缩比在5倍时,无察觉,质量优秀。
3.压缩比在10倍时,刚刚察觉,质量良。
4.压缩比在20倍时,不能接受,质量劣。
5.注意,以上评价是有条件的,当使用15英寸显示器和100%显示时,结果将会改变。
通常JPEG可以使用到10-20倍压缩。
5.6JPEG压缩编码
5.6.1JPEG算法概要
¡提出问题:
1.JPEG应用在什么领域?
它有何特点?
并举例说明。
2.JPEG中使用了什么技术?
这些技术是基于什么思想?
在其他领域有无可能使用这些思想?
3.DCT,量化,huffman各自的作用是什么?
只使用其中的一个可以吗?
调换它们的顺序可以吗?
4.DCT的作用是什么?
为什么可以起到这些作用?
5.JPEG技术除去静止图片以外,还有什么地方得到应用?
6.JPEG的使用中如何确定压缩比,数码相机的使用中如何设定图像质量。
¡本节要点
1.JPEG用于静止图像的压缩,压缩比可调。
2.它使用了DCT变换、量化、差分脉冲编码调制DPCM,行程长度编码RLE、熵编码中的哈夫曼编码等。
以上技术在MPEG等其它技术中也有应用。
3.图像中的轮廓和细节即灰度快速变化部分对应图像频域的高频成分,大面积部分即灰度变化缓慢部分对应图像频域的低频,灰度不变的区域对应图像频域的直流分量,图像的主要能量集中在低频部分。
4.傅立叶变换等正交变换可以将空域信号变为频域信号。
5.JPEG是有损压缩,JPEG2000可以是有损压缩或者无损压缩。
JPEG使用DCT余弦变换,JPEG2000使用小波变换。
MPEG使用的是DCT变换。
6.改变JPEG的量化表可以改变不同的压缩比。
数码相机和Photoshop等图像软硬件中都有相应的设置。
7.高压缩比的文件小但图像差,低压缩比的文件大但图像好。
JPEG一般压缩10倍时用于照片观赏难以发现图像质量问题,用于图像测量时要求较高。
8.JPEG的缺点是高压缩比时图像质量劣化显著,出现方块噪声。
9.DCT,量化,huffman中,DCT本身并无压缩作用,它只是为压缩做准备。
DCT将空域信号变为频域信号。
10.量化是压缩的关键,不同的压缩表决定不同的压缩比。
11.应用领域有网络,图像处理,图像传输,图像存储。
JPEG是联合图象专家组(JointPictureExpertGroup)的英文缩写,是国际标准化组织(ISO)和CCITT联合制定的静态图象的压缩编码标准。
和相同图象质量的其它常用文件格式(如GIF,TIFF,PCX)相比,JPEG是目前静态图象中压缩比最高的。
我们给出具体的数据来对比一下。
例图采用Windows95目录下的Clouds.bmp(云彩),原图大小为640*480,256色。
用工具SEA(version1.3)将其分别转成下列格式,
格式
文件大小
24位色TIFF压缩格式
923KB
24位色BMP
922KB
24位色TGA压缩格式
768KB
GIF(256色)压缩格式
177KB
24位色JPEG
18KB
可见JPEG比其它几种压缩比要高得多,而图象质量都差不多(JPEG处理的颜色只有真彩和灰度图)。
正是由于其高压缩比,使得JPEG被广泛地应用于多媒体和网络程序中,例如HTML语法中选用的图象格式之一就是JPEG(另一种是GIF),这是显然的,因为网络的带宽是非常宝贵的,选用一种高压缩比的文件格式是十分必要的。
JPEG有几种模式,其中最常用的是基于DCT变换的顺序型模式,又称为基本系统(Baseline),以下都是针对这种格式进行讨论。
JPEG的压缩原理是上面介绍的各种原理的综合,博采众家之长,这也正是JPEG有高压缩比的原因。
¡JPEG标准
由ISO和IEC两个组织机构联合组成的一个专家组(JointPhotographicExpensGroup,联合图像专家组,JPEG),负责制定静态的数字图像数据压缩编码标准,这个专家组开发的算法称为JPEG算法,并且成为国际上通用的标准,因此又称为JPEG标准。
JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。
¡JPEG压缩算法
JPEG专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换(DiscreteCosineTransform,DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。
使用有损压缩算法时,在压缩比为25:
1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。
例如,在VCD和DVD-Video电视图像压缩技术中,就使用JPEG的有损压缩算法来取消空间方向上的冗余数据。
为了在保证图像质量的前提下进一步提高压缩比,近年来JPEG专家组正在制定JPEG2000(简称JP2000)标准,这个标准中将采用小波变换(wavelet)算法。
¡JPEG压缩步骤
JPEG压缩是有损压缩,它利用了人的视觉系统的特性,使用量化和无损压缩编码相结合来去掉视觉的冗余信息和数据本身的冗余信息。
JPEG算法框图如图5—9(P74)所示,压缩编码大致分成三个步骤:
(1)使用正向离散余弦变换(ForwardDiscreteCosineTransform,FDCT)把空间域表示的图变换成频率域表示的图。
(2)使用加权函数对DCT系数进行量化,这个加权函数对于人的视觉系统是最佳的。
(3)使用霍夫曼可变字长编码器对量化系数进行编码。
译码或者叫做解压缩的过程与压缩编码过程正好相反。
JPEG算法与彩色空间无关,因此“RGB到YUV变换”和“YUV到RGB变换”不包含在JPEG算法中。
JPEG算法处理的彩色图像是单独的彩色分量图像,因此,它可以压缩来自不同彩色空间的数据,如RGB,YCbCr和CMYK。
由于人眼对亮度比对颜色更加敏感,所以对亮度Y信号和对色差信号Cb、Cr使用不同的量化表,进一步提高对图像的压缩。
(葛)
¡JPEG编码与解码框图
¡JPEG编码的分析
预测编码技术在图像空间直接对像素进行操作,所以称为空域方法。
JPEG是基于DCT图像变换的编码方法,所以它是一种频域方法。
对于大多数自然界图像变换得到的系数值都很小,这些系数可以粗略地量化甚至完全忽略掉而只产生很少的失真。
(章毓晋P166)这是JPEG得以实现的基础。
¡各个模块的目的
JPEG中变换、量化和编码三个主要步骤的目的如下。
变换的目的是解除每个子图像内部像素之间的相关性,将尽可能多的信息集中到尽可能少的变换系数上。
变换本身并不能压缩数据,仅仅是为压缩数据作好准备。
类比:
直方图分析也会解除像素空间的相关性。
傅立叶变换后频率分量按高低分布,与余弦变换类似。
(葛)
量化的目的是有选择地消除或粗略地量化携带信息量最少的系数。
即保留直流压低或消除高频成分。
根据人眼的特性、不同压缩比、以及彩色的需要使用不同的量化表。
压缩空间冗余。
(葛)
编码的目的是对于量化后的数据进一步进行编码压缩,对出现频率最高的数据使用最短的码字,对出项频率低的数据使用长的码字,从而减少编码序列的长度,提高编码效率。
压缩编码冗余。
(葛)
¡JPEG相关问题
问题1。
为什么正交变换可以将信息集中到某些系数上?
答:
(“DCT压缩编码”,姜秀华)DCT是正交变换的一种,其正交变换编码的原理框图如图1所示。
它是通过正交变换把图像从空间域转换到能量比较集中的变换域,然后对变换系数进行量化、编码,从而达到压缩数据的目的。
正交变换之所以能够压缩数据,主要有以下性质:
(1)正交变换具有熵保持性,即通过正交变换后并不丢失信息。
(2)正交变换具有能量保持性,并能把能量重新分配与集中。
这就有可能采用熵压缩法来压缩系数,即在质量允许的情况下,舍弃一些能量很小的系数,而对能量较大的系数分配较多的比特,对能量较小的系数分配较少的比特,从而使数据有较大的压缩。
(3)去相关性,可使高度相关的空间样值变为相关性较弱的变换系数,从而减少空间样值之间冗余度。
问题2。
正交变换有多种,为什么使用DCT?
答:
(“DCT压缩编码”,姜秀华)常见的正交变换有DFT(离散傅里叶变换)、DWHT(离散沃什一哈达玛变换)、DCT(离散余弦变换)、ST(斜变换)、K—L(霍特林变换)等。
目前,在图像数据的压缩编码方案中广泛采用DCT变换,有以下几个原因;一是DCT变换接近最佳K—L变换。
因为K—L变换能产生非相关的变换系数(非相关变换系数对压缩极为重要),可以单独处理各系数而不损失压缩效率,但K一L变换至今没有快速算法,因此无法用硬件来实现。
二是用DCT而不用DFT的原因在于,DFT要进行复数运算,一次复乘相当于四次实乘和二次实加,因而DFT需要的运算量很大,难于满足实时图像处理的要求,而DCT是一种实数域的变换,需要的运算量比DFT少。
问题3。
为什么不对整个图像而仅仅对8×8的小方块来进行DCT处理?
答:
(“DCT压缩编码”,姜秀华)DCT算法需要的计算量依赖于矩阵的大小,随着N的增大,需要的计算处理时间将迅速增长。
实际上不可能在整个图像上执行DCT,如果N=256,对256×256样值进行DCT变换所需要的计算量之大,达到了使计算无法实时实现的程度。
实际上,DCT的实现是将图像分割成许多8×8的小块,对各个小块进行DCT计算。
虽然块尺寸增大会得到更好的压缩,但研究表明,像素之间的相关性很快趋于减弱,离预测点15个或20个像素位以外的像素对预测器来说用处不大。
这意味着64×64的DCT块比起将它分成16×16四个子块不会有更好的压缩。
在JPEG和MPEG方案中选用8×8的子块,64个数据称为一个数据单元,按顺序进入编码器。
5.6.2JPEG算法的主要计算步骤-(P74)
JPEG压缩编码算法的主要计算步骤如下:
①正向离散余弦变换(FDCT)。
②量化(quantization)。
③Z字形编码(zigzagscan)。
④使用差分脉冲编码调制(differentialpulsecodemodulation,DPCM)对直流系数(DC)进行编码。
⑤使用行程长度编码(run-lengthencoding,RLE)对交流系数(AC)进行编码。
⑥熵编码(entropycoding)。
1.正向离散余弦变换
下面对正向离散余弦变换(FDCT)作几点说明。
(1)对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,如图5—10所示,并作为二维离散余弦变换DCT的输入。
通过DCT变换,把能量集中在少数几个系数上。
上图中为了画图方便,将8×8区域画成4×4区域。
将图像分为若干个8×8的小区域,对小区域内的亮度值或色差值进行DCT变换得频率系数。
图像中的快变化为高频分量,慢变化为低频分量。
DCT变换的计算公式:
P75
DCT逆变换的计算公式:
计算两维的DCT变换时,可以使用下面的计算式把二维DCT变为一维DCT变换。
公式如下:
2.量化
(钟P107)
量化处理是使数据比特率下降的一个强有力的措施。
通常的量化是指模拟信号到数字信号的映射(变换),它是模拟量转化为数字量必不可少的步骤。
由于模拟量是连续的,而数字量是离散的,因此量化操作实质上是用有限的离散量代替无限的连续模拟量的多对一映射操作。
数据压缩中的量化处理是指对正交变换后的变换系数的量化处理。
与模数变换的量化类似也是一个多对一映射操作,目的在于减少数据量。
一般输入值的动态范围较大,需要用较多的比特数表示一个数值,量化输出只取有限个整数,称作量化级。
每个量化输入被强行归一到与其相邻的某个输出,即量化到某个级。
这是一个不可逆过程,量化处理中有信息丢失,或者说引起量化误差。
(林福宗)
量化是对经过FDCT变换后的频率系数进行量化。
量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。
量化是图像质量下降的最主要原因。
对于有损压缩算法,JPEG算法使用如图5—12所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。
因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:
如表5—5所示的亮度量化值和表5—6所示的色差量化值。
此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此图中的左上角的量化步距要比右下角的量化步距小。
表5—5和表5—6中的数值对CCIR601标准电视图像已经是最佳的。
如果不使用这两种表,你也可以用自己的量化表替换它们。
(“DCT压缩编码”姜秀华)
量化是对DCT系数进行压缩的关键一步,这是利用降低DCT系数精度的方法来去除不重要的系数,从而减少数据量。
JPEG采用线性量比器,将64个DCT系数分别除以量化因子,再四舍五入取整,定义为:
FQ(u,v)=F(u,v)//Q(u,v)
其中,“//”表示圆整成最近的整数(葛,原文如此,意为整数除法),Q(u,v)是量化矩阵,[Q(u,v)]中的元素,Q(u,v)与F(u,v)一一对应,并随位置的不同取不同的值。
JPEG允许使用任何的量化矩阵,可以根据图像质量的要求和存贮容量等来选取量化矩阵。
JPEG通过大量的心理视觉实验给出了参考量化矩阵,如表3、表4所示。
从表中可以看出以下恃点:
①人眼对反映图像细节的高频系数不敏感,因此低频系数的量化步长小,精度高;高频系数量化步长大,精度低。
②人眼对色度也欠敏感,因此,中、高频部分量化步长大。
3.Z字形编排
量化后的DCT系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排,如图5—13所示,DCT系数的序号如图5—14所示,这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。
4.直流系数的编码
8×8图像块经过DCT变换之后得到的DC直流系数有两个特点:
一是系数的数值比较大,二是相邻8×8图像块的DC系数值变化不大。
根据这个特点,JPEG算法使用了差分脉冲编码调制(DPCM)技术(见P36),对相邻图像块之间的DC系数的差值(Delta)进行编码。
5.交流系数的编码
量化AC系数的特点是1×64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)(P51)对它们进行编码。
JPEG使用了1个字节的高4位来表示连续“0”的个数,而使用它的低4位来表示编码下一个非“0”系数所需要的位数,跟在它后面的是量化AC系数的数值。
6.熵编码
使用熵编码还可以对DPCM编码后的直流DC系数和RLE编码后的交流AC系数作进一步的压缩。
在JPEG有损压缩算法中,使用霍夫曼编码器来减少熵。
使用霍夫曼编码器的理由是可以使用很简单的查表(lookuptable)方法进行编码。
压缩数据符号时,霍夫曼编码器对出现频度比较高的符号分配比较短的代码,而对出现频度较低的符号分配比较长的代码。
这种可变长度的霍夫曼码表可以事先进行定义。
[例5.1)表5—7所示的是DC码表符号举例。
如果DC的值(value)为4,符号SSS用于表达实际值所需要的位数,实际位数就等于3。
7.组成位数据流
JPEG编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样的组织的数据通常称为JPEG位数据流(JPEGbitstream)。
8.行程编码(RunLengthEncodingRLE)(补充葛)
行程编码的原理很简单:
将一行中颜色值相同的相邻像素用一个计数值和该颜色值来代替。
例如:
aaabccccccddeee可以表示为3a1b6c2d3e。
如果一幅图象是由很多块颜色相同的大面积区域组成,那么采用行程编码的压缩效率是惊人的。
然而,该算法也导致了一个致命弱点,如果图象中每两个相邻点的颜色都不同,用这种算法不但不能压缩,反而数据量增加一倍。
所以现在单纯采用行程编码的压缩算法用得并不多。
在JPEG中使用RLE非常合适,请见P78图5-15中的规格化量化系数(左下角),量化后的DCT系数存在大量连续的0,正好使用RLE来压缩数据。
(葛)
5.6.3应用JPEG算法举例
有关JPEG算法更详细的信息和数据,请参看JPEG标准ISO/IEC10918。
图5—15是使用JPEG算法对一个8×8图像块计算得到的结果。
在这个例子中,计算正向离散余弦变换(FDCT)之前对源图像中的每个样本数据减去了128,在逆向离散余弦变换之后对重构图像中的每个样本数据加了128。
源图像样本的位图(P78图5-15左上角数据的灰度显示)
源图像样本的位图的直方图均衡处理结果(为了清楚显示而进行处理)
参见P74图5-9。
DCT压缩步骤为:
(左侧列),输入源图象样本数据,进行正向余弦变换得到FDCT系数,利用量化表进行量化,得到规格化量化系数。
DCT解压缩步骤为:
(右侧列),输入规格化量化系数(与上相同)数据,利用量化表(与上相同)进行逆向量化,得到逆量化后的系数,进行逆向余弦变换IDCT得到重构图象样本数据,即源图象样本的近似值。
压缩过程:
以左上角第一个数据为例,图像灰度值为Y=139,经过DCT变换后的频率分量得F=235.6,量化系数为Q=16,量化过程为FQ=F//Q,即:
235.6//16=14.725=15。
解压缩过程:
以左上角第一个数据为例,规格化量化系数为15,利用量化表系数16进行逆量化处理,得到逆量化后的系数15×16=240,经过IDCT变换后的得到重构图象样本数据144。
重构图象样本为源图象样本的近似值。
(“谈谈DCT在图像压缩编码中的应用原理”欧阳林群。
)经过大量图像信号在频域的统计分析发现,图像数据经DCT变换后,频谱系数主要成分集中在此较小的范围,且主要位于低频部分见图(d),
(该矩阵左上角的第一个数据是该块区的平均亮度值,后面各项系数的分布和大小可以反映亮度起伏的剧烈程度。
若系数较大,说明亮度变化较大,该区域图像轮廓较精细;若系数小,则说明区块内亮度变化平缓;若系数值全为零表示交流分量为零,区域内无亮度变化。
因此,对大多数自然图像、DCT能将最多的信息放到最少的系数上去。
8×8个系数集合的变化情况,可反映出区块内图像清晰度及图像细节状况。
矩阵左上角数值较大,它代表图像信息的低频分量,是图像信息的主体,即图像高度(亮度)变化的主体部分;矩阵右下角部分数值小,它表示图像信息的高频分量幅值小,它主要反映图像的细节部分。
人眼对图像的高度(亮度)信息有较高的视觉敏感度,而对图像的细节,即图像的高频分量敏感精度较低。
根据这一特性,编码器选择一个量化矩阵,来确定8×8块内的每个频率系数,所以典型的量化是高频比低频粗(即高频的允许值较少)。
)
该矩阵左上角的第一个数据是该块区的平均亮度值,后面各项系数的分布和大小可以反映亮度起伏的剧烈程度。
1.若系数较大,说明亮度变化较大,该区域图像轮廓较精细;
2.若系数较小,说明区块内亮度变化平缓;若系数值全为零表示交流分量为零,区域内无亮度变化,图像轮廓模糊。
3.矩阵左上角数值较大,它代表图像信息的低频分量,是图像信息的主体,即图像高度(亮度)变化的主体部分;
4.矩阵右下角部分数值小,它表示图像信息的高频分量幅值小,它主要反映图像的细节部分。
5.人眼对图像的高度(亮度)信息有较高的视觉敏感度,而对图像的细节,即图像的高频分量敏感精度较低。
因此,对大多数自然图像、DCT能将最多的信息放到最少的系数上去。
8×8个系数集合的变化情况,可反映出区块内图像清晰度及图像细节状况。
根据这一特性,编码器选择一个量化矩阵,来确定8×8块内的每个频率系数,所以典型的量化是高频比低频粗(即高频的允许值较少)。
以亮度像素为例,对于画面内亮度电平无变化的区块,经DCT变换后,只有直流分量DC值不为零,其它交流分量全为零。
这样的数据结构经可变长游程编码(VLC)编码后,图像数据可得到大幅度的压缩。
对于亮度电平有明显变化的区块,经DCT变换后,其高频分量都不会为零且DCT函数输入的是8bit的像素数据,输出的是从-1024到+1024的11bitDCT系数。
因此,实际上DCT变换并不对数据压缩,它只是为压缩过程的“量化”阶段作准备。
根据各种频率的高度(亮度)变化对画面质量的贡献大小。
对每种频率分量即DCT系数设定不同的折算值,将DCT系数进行折算,以便进一步突出视觉效果影响大的成分,削弱或忽略视觉效果影响小的成分。
经量化处理后,矩阵左上方DCT系数对应的量子值较小,系数压缩较小,画面相对应低频内容忽略极少;矩阵右下方DCT系数对应的量子值较大,系数压缩较多,画面所对应高频的内容忽略较多,经过量化后的DCT系数矩阵在右下角出现了许多零值,为了充分利用这个结果,将这些系数按Z字形顺序编组见图(e),即对此量化矩阵进行Z字形扫描读出(按频