图像处理之JPEG编码原理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

JPEG编码原理1.JPEG编码概述JPEG是JointPhotographicExpertsGroup的缩写,即ISO和IEC联合图像专家组,负责静态图像压缩标准的制定,这个专家组开发的算法称为JPEG算法,并已成为当前的通用标准,即JPEG标准。作为一个基本的图像压缩方式,JPEG已经得到了广泛的运用。遵照JPEG标准建立的图像文件使用的格式称为JFIF格式,文件名称的后缀为“.jpg”或者“.jpeg”。需要说明的是,JPEG是一种文件压缩处理的标准,而JFIF是一个文件格式的标准,它们属于不同的概念范畴。JFIF是JPEGFileInterchangeFormat的缩写,也即JPEG文件交换格式,是一种使用JPEG图像压缩技术存储图像的方法,这种方法给用户提供了在不同的计算机和应用程序间传输JPEG图像的标准。JPEG压缩算法是一种有损压缩算法,它根据人眼视觉特性剔除图像信息中视觉不敏感的成份,从而实现图像信息的高度压缩。所根据的视觉特性主要为:高频不敏感性和色彩不敏感性。具体来说,人眼不能察觉到图像中的细微部分,这称之为高频不敏感性。人眼所包含的对亮度敏感的柱状细胞有1.8亿个,而对色彩敏感的椎状细胞仅有0.08亿个,因而眼睛对亮度的敏感程度要远大于对色彩的敏感程度,这就是色彩不敏感性。具体来说,对原始图像信息(直接包含每个具体像素的数据的图像,如位图等)进行JPEG编码需要以下3个步骤:1)信息空间压缩。对信息所占用的空间进行优化,初步压缩图像信息。2)信息数据压缩。对图像数据本身的冗余度进行解析处理,实现数据压缩。3)数据编码压缩。对经前2步处理所得到的数据进行编码优化,从而进一步压缩数据量,最终形成目标JPEG代码。2.信息空间压缩原始图像信息是直接包含了每个具体像素的数据信息,对应于自然世界中的实际光色信息。比如我们在电脑屏幕上看到的图像,它们都是由许多像素点组成的,一幅1024×768的图像所包含的像素量为1024×768=786432个。什么是像素呢?像素是我们在工程上表达自然光色所设置的一个最小单元。比如一张彩色照片中的像素大小取决于感光材料的粒度大小,而对于电脑显示屏,其像素大小则取决于制造精度以及实际应用要求,高分辨率的显示器能再现的像素要比普通显示器更加精细,因而可达到非常细腻的显示效果。通常,为了准确地记录一个像素,要使用三个字节,分别用来表示自然光中的红、绿和蓝这三种颜色,称为三基色,用R、G和B表示。由于每个颜色都使用一个8位的二进制字节进行表示,因此每个颜色的取值范围都是0-255,专业上我们说这是8位位深。以三基色的不同配比,就能再现任意自然色。由于每个像素都由三基色进行表示,因此一个像素总的位深就是8×3=24位,所以24位色被称为真彩色。以RGB方式记录如前所述的1024×768的图像时,要使用的记录容量为1024×768×3=2359.296K字节。需要补充说明的是,文件作为数据记录载体,除数据内容外还应提供必要的有关存储格式的说明以方便以后读取(具体可参考相关格式的标准化资料),因此实际存储使用的文件要比上面计算的数据容量稍大,如1024×768的24位位图文件(bmp文件)为2359.350K字节。2.1色彩空间(colorspace)在图像处理中,可以把RGB空间表示的彩色图像变换到其他色彩空间。常用的色彩空间有三种:YIQ,YUV和YCrCb。不同的色彩空间通常是对应于不同的物理设备特性,见下表:色彩空间适用范围YIQNTSC制彩色电视YUVPAL和SECAM制彩色电视YCrCb计算机显示器上表中,Y表示亮度,U和V分别表示色差,是构成彩色的两个分量。YUV表示法的意义在于其亮度信号(Y)和色度信号(U、V)相互独立,由Y信号分量构成的灰度图像与用U、V信号构成的另两幅单色图像之间没有关联。因此可以对这些单色图分别进行编码。仅使用亮度信息时可以构成我们平时见到的黑白灰度图像。由于所有的显示器最终都只能以像素方式显示图像,所以无论任何色彩空间的图像信息在进行显示时都必须转换到RGB空间,也就是还原RGB分量。在显像管方式的电视机中,考虑了人眼的视觉特性和阴极射线管(CRT)的非线性特性之后,RGB和YUV的对应关系用下面关系式近似表示为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡BGRVUY100.0515.0615.0436.0289.0147.0114.0587.0299.0即:Y=0.3R+0.59G+0.11BU=B-YV=R-Y计算机所使用的数字域色彩空间与电视所使用的模拟色彩空间不同,它们的分量使用Y、Cr和Cb来表示,与RGB空间的转换关系如下:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡+⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡12812805000.03313.01687.00813,04187.05000.01140.05870.02990.0BGRCbCrY上式中,R、G、B和Y、Cr、Cb都是8bit无符号整数,取值范围为0-255。另从上式可看到,计算过程会涉及到小数运算,也就是浮点运算,所以有必要考虑算法优化,把浮点数运算转换为移位与加法运算,从而可使计算机更快速的进行处理。RGB与YCrCb之间的逆变换式如下:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡12812807720.1013441.07141.0104020.11CbCrBGR2.2存储空间压缩JPEG可以处理连续色调的灰度图像或彩色图像。对于灰度图像,每个像素可以是8-bit或者12-bit的灰度值。baseline模式只要求处理8-bit图像(某些医学影像是12-bit的)。对于彩色图像,原则上可以将每个色彩分量看作是一幅灰度图像来进行处理。不过如前所述,由于人眼对色彩不敏感,因此通常把彩色信息转换为亮度和色差信息,并对色差信息进行下采样(downsamping),从而提高压缩率。色彩变换基本不影响图像质量,最多是由于浮点数取整操作带来的微小差别。所以可认为是无损变换。所谓下采样实际上是把原始图像中每4个相邻像素构成的小方块进行平均,然后作为一个像素进行图像重构。因此通过下采样可以把原图像变换为1/4大小的新图像。这种变换只应用于色差图像,而亮度图像保持原始内容。JPEG进行图像处理时,首先要把输入图像按从左到右,从上到下的顺序分成8×8像素的子图像块,编码过程本质上是对一连串的8×8灰度图像进行处理。如果原图像的高度或者宽度不是8的整数倍,还需要对原图像进行扩大,保证图像的高和宽都是8的整数倍。当然,在生成的JPEG图像文件中,要记录原始图像的大小,并在解压缩时复原。由于图像的填补和分块是伴随着变换过程同时进行的,所以并不增加复杂度。下面以一个8×8的图像块为例对存储空间的压缩加以说明。对于位深为8-bit,RGB格式的8×8像素图像,其大小为:8×8×3=192字节现在以YCrCb方式来表示同一图像。亮度图像仍然保持原内容,因此大小为8×8=64字节。而对于Cr和Cb分量的图像,由于下采样都变成了4×4像素的图像,两幅图像的大小为4×4×2=32像素。这样,变换得到的图像其大小为:8×8+4×4×2=64+32=96像素可见,根据人眼的色彩不敏感特性进行处理,新图像所占用的存储空间只有原图像的一半,存储空间的压缩量达到了50%。3.信息数据压缩3.1数据压缩方法要利用人眼视觉的细节不敏感性,需要选择一种变换算法,以帮助提取图像信息中的主要能量,而丢弃那些影响很小或者没有影响的微小能量。适合图像压缩的变换有很多种,例如Karhunen-Loève变换(KLT,即主成分分析)、离散傅立叶变换(DFT)、离散余弦变换(DCT)、Walsh-Hadamard变换(WHT)等。“变换”的基本思想是,找到一组基,让图像在这组基下能量集中(少量系数值较大,其余系数接近0)。变换必须是可逆的(否则无法解码),因此变换本身不能压缩信息。不过通过随后的“量化”步骤将影响不大的系数略去,即可达到压缩的目的。在数据压缩方面最佳的变换是Karhunen-Loève变换,但实际系统中一般不用它。原因有两点:1)KLT得到的基与输入数据相关,意味着除了需要把系数传给解码器,还需要把基传给解码器。而且每个分块的基往往是不同的!这使得压缩效果大打折扣。2)KLT需要计算协方差矩阵的特征向量,计算量相当大。DFT、WHT、DCT的基是固定的,与输入无关。在与输入无关的各种变换中,非正弦变换(如WHT)最容易实现,正弦变换(如DFT和DCT)的信息压缩能力更接近最佳的KLT方法。DFT是复空间的正交变换(系数是复数),DCT是欧式空间的正交变换(系数是实数),因此DFT的系数比DCT多一倍。不过实数的DFT的系数是共扼对称的,实际所需的存储空间与DCT相同。图像压缩的质量不但与所使用的变换方式有关,还和分块大小有关。最常采用的分块尺寸为8×8和16×16。下图显示了以不同分块方式进行变换所产生的图像重构误差。下图是在首先计算分块变换后,截取75%的系数,然后对得到的数组进行反变换来重构图像所得到的数据。图1重构误差与分块大小之间的关系可以看出,从重构误差来说,DCT比DFT和WHT的效果要好。DCT优于DFT的另一个原因是由于DFT的边缘振铃(Gibbs现象使相邻图像分块之间的边界变得可见)小,减少了边缘效应。再者,DCT的固有周期比DFT长一倍,边界不间断。如下图的比较。图2一维DFT(上)和DCT(下)的固有周期因此为了兼顾压缩效果和计算复杂度,JPEG压缩选择了8×8的2维DCT算法。3.22维DCT算法8×8矩阵的2维DCT变换的定义是:⎥⎦⎤⎢⎣⎡++=∑∑==707016)12(cos16)12(cos),()()(41),(ijvjuijifvCuCvuFpp其中,当u=0,v=0时,C(u)=C(v)=1/2当u和v取其它值时,C(u)=C(v)=1这里,f(i,j)为对应的像素数据,而F(u,v)就是DCT值。在进行上式的计算前,首先要把像素值减去一个128,使数据取值范围从[0,255]移到[-128,127]。由上式计算得到的F(u,v)就是DCT系数,每个8×8分块经过计算都将得到64个DCT系数,其中,F(0,0)称为直流系数,其它63个系数称交流系统。在典型的连续色调图像中,相邻像素之间往往差别不大,这意味着空间频率的幅值主要集中分布在信号的低频部分。对典型的8×8图像块而言,大多数频率的幅值是0或者接近0,因此在编码时可以被忽略。DCT变换本身并不降低图像质量,而是在丢弃图像细节的对极小幅度频率的忽略过程中降低了图像质量。从DCT变换式可以看出,对于每一个DCT值F(u,v)都需要进行64次乘法,完成8×8=64个DCT系统则需要64×64=4096次乘法。对包含了大量8×8图像块的整幅图像来说,计算量之大可想而知。由此可见,计算DCT是整个JPEG压缩过程中最耗时的操作,很多人研究过快速算法,更为有效的方法是在CPU中增加新指令(专用CPU),以便于DCT运算。下面以一个8×8图像块的变换过程进行示例说明:原始图像的像素矩阵为:52556166706164736359559010985697262596811314410466736358711221541067069676168104126886870796560707768587585716459556165838779696865767894偏移128,使数据取值范围为-128到127之间。-76-73-67-62-58-67-64-55-65-69-73-38-19-43-59-56-66-69-60-1516-24-62-55-65-70-57-626-22-58-59-61-67-60-24-2-40-60-58-49-63-68-58-51-60-70-53-43-57-64-69-73-67-63-45-41-49-59-60-63-52-5

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功