您的位置:首页 > 其它

JPEG编码简单介绍

2015-03-07 10:47 134 查看
用于压缩连续色调静止图像的JPEG(Joint Photographic ExpertsGroup,联合摄影专家组)标准是由摄影专家在ITU、ISO和IEC等其他标准组织的支持下开发出来的。JPEG标准对于多媒体而言是十分重要的,因为用于压缩运动图像的标准MPEG不过是分别对每一帧进行JPEG编码,再加上某些帧间压缩和运动补偿等额外的特征。JPEG定义在10918号国际标准中,它具有4种模式和多选项,但是我们在这里只关心用于24位RGB视频的方法,并且省略了许多细节。

用JPEG对一幅图像进行编码的第一步是块预制。为明确起见,我们假设JPEG输入是一幅640*480的RGB图像,每个像素24位表示,如图7-6a所示,由于使用亮度和色度可以获得更好的压缩效果,所以从RGB值中计算出一个亮度信号和两个色度信号,对于NTSC制式,分别将其记作Y、I、Q,对于PAL制式,分别记作Y/U/V,两种制式的计算公式不同的,下面我们将使用NTSC的符号,但是压缩算法是相同的。

对于Y/I/Q构造不同的矩阵,每个矩阵其元素的取值范围在0-255之间,接下来,在I/Q矩阵中对由4个元素组成的方块进行平均,将矩阵缩小至320*240.这一缩小是有损的,但是眼睛几乎注意不到,因为眼睛对亮度比对色更加敏感,然而这样做的结构是将数据压缩了2倍。现在讲所有3个矩阵的每个元素减去128,从而将0置于取值范围的中间,最后将每个矩阵划分成8*8的块,Y矩阵有4800块,其他两个矩阵有1200块,如图7-6b所示。



JPEG的第二步是分别对7200块中的每一块应用DCT。每一个DCT的输出是一个8*8的DCT系数矩阵。DCT矩阵的(0,0)元素是块的平均值,其他元素表明每一空间频率存在多大的谱功率。对于熟悉傅里叶变换的人来说,DCT则是一种二维的空间傅里叶变换。在理论上,DCT是无损的,但是在实践中由于使用浮点数和超越函数总要引入某些舍入函数,从而导致轻微的信息损失。通过这些元素随着到(0,0)元素距离的增加而迅速衰减,如图7-7b所示。



DCT完成之后,JPEG进入到第三步,称为量化,在量化过程中不重要的DCT系数将被去除,这一变换是通过将8*8DCT矩阵中的每个元素除以取自一张表中的权值而实现的。如果所有权值都是1,那么该变量将不做任何事情。然而,如果权值随着离原点的距离而急剧增加,那么较高的空间频率将迅速衰落。

图7-8给出了这一步的一个例子,在图7-8中,我们可以看到初试DCT矩阵、量化表和通过将每一个DCT元素除以相应量化表元素所获得的结果。量化表中的值不是JPEG标准的一部分,每一应用必须提供自己的量化表,这样叫就给应用以控制自身压缩损失权衡的能力。



第四步通过将每一块的(0,0)值(左上角元素)以它与前一块中相应元素相差的量替换而减小。由于这些元素是各自所在块的平均,他们应该变化的比较缓慢,所以采用差值可以将这些元素中的大部分缩减为较小的值,对于其他元素不计算差值,(0,0)值称为DC分量,其他值称为AC分量。

第五步是将64个元素线性化,并且对线性化得到的列表进行行程编码。从左到右然后从上到下地对块进行扫描不能将零集中在一起,所以采用了Z字形的扫描模式,如图7-9所示,在本例中,Z字形模式最终在矩阵的尾部产生了38个连续的0,这一串0可以缩减为一个计算表明有38个0.

现在我们得到一个代表图像的数字列表,在第六步将采用Huffman编码对列表的数字进行编码以用于存储或传输。

JPEG看来似乎十分复杂,这是因为它确实很复杂。尽管如此,由于它通常可以获得20:1或更好的压缩效果,所以获得广泛的应用,解码一幅图像JPEG需要反过来运行上述算法。JPEG大体上是对称的,解码一幅图像话费的时间与编码一幅图像时间基本相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: