第5章 彩色数字图像基础
***************************************************************************
5.1 视角系统对颜色的感知
5.2 图像的颜色模型
5.2.1 显示彩色图像用RGB相加混色模型
5.2.2 打印彩色图像用CMY相减混色模型
5.3 图像的三个基本属性
5.3.1 分辨率
5.3.2 像素深度
5.3.3 真彩色、伪彩色与直接色
5.4 图像的种类
5.4.1 矢量图与点位图
5.4.2 灰度图与彩色图
5.5 伽马(( )校正
5.5.1 γ的概念
5.5.2 γ校正
5.6 JPEG压缩编码
5.6.1 JPEG算法概要
5.6.2 JPEG算法的主要计算步骤
5.6.3 应用JPEG算法举例
5.7 图像文件格式
5.7.1 BMP文件格式
5.7.2 GIF文件格式
5.7.3 JPEG格式
5.7.4 PNG格式
5.8 图像文件后缀一览表练习与思考题参考文献和站点
***************************************************************************
图像是多媒体中携带信息的极其重要的媒体,有人发表过统计资料,认为人们获取的信息的70%来自视觉系统,实际就是图像和电视。但是,图像数字化之后的数据量非常大,在因特网上传输时很费时间,在盘上存储时很占“地盘”,因此就必须要对图像数据进行压缩。压缩的目的就是要满足存储容量和传输带宽的要求,而付出的代价是大量的计算。几十年来,许多科技工作者一直在孜孜不倦地寻找更有效的方法,用比较少的数据量表达原始的图像。
图像数据压缩主要是根据下面两个基本事实来实现的。一个事实是图像数据中有许多重复的数据,使用数学方法来表示这些重复数据就可以减少数据量;另一个事实是人的眼睛对图像细节和颜色的辨认有一个极限,把超过极限的部分去掉,这也就达到压缩数据的目的。利用前一个事实的压缩技术叫做无损数据压缩技术,利用后一个事实的压缩技术叫做有损压缩技术。实际的图像压缩是综合使用各种有损和无损数据压缩技术来实现的。
本章将介绍表示数字彩色图像所需要的基本知识、使用得相当广泛的JPEG压缩标准和图像文件的存储格式。在介绍过程中,要涉及到有关颜色的度量和颜色空间的转换问题,这些比较深入的问题将在第6章“颜色的度量体系”和第7章“颜色空间变换”中作比较详细的介绍。读者也可先看这两章的内容,然后再阅读这章的内容。
5.1 视角系统对颜色的感知人们认为颜色是视觉系统对可见光的感知结果。可见光是波长在380 nm~780 nm之间的电磁波,我们看到的大多数光不是一种波长的光,而是由许多不同波长的光组合成的。人们在研究眼睛对颜色的感知过程中普通认为,人的视网膜有对红、绿、蓝颜色敏感程度不同的三种锥体细胞,另外还有一种在光功率极端低的条件下才起作用的杆状体细胞,因此颜色只存在于眼睛和大脑。在计算机图像处理中,杆状细胞还没有扮演什么角色。
人的视觉系统对颜色的感知可归纳出如下几个特性:
眼睛本质上是一个照相机。人的视网膜(human retina)通过神经元来感知外部世界的颜色,每个神经元或者是一个对颜色敏感的锥体(cone),或者是一个对颜色不敏感的杆状体(rod)。
红、绿和蓝三种锥体细胞对不同频率的光的感知程度不同,对不同亮度的感知程度也不同。这就意味着,人们可以使用数字图像处理技术来降低表示图像的数据量而不使人感到图像质量明显下降。
自然界中的任何一种颜色都可以由R,G,B这3种颜色值之和来确定,它们构成一个3维的RGB矢量空间。这就是说,R,G,B的数值不同,混合得到的颜色就不同,也就是光波的波长不同。
5.2 图像的颜色模型颜色模型(color model)是用简单方法描述所有颜色的一套规则和定义,例如RGB,CMY,YCrCb等都是表示颜色的颜色模型。
5.2.1 显示彩色图像用RGB相加混色模型一个能发出光波的物体称为有源物体,它的颜色由该物体发出的光波决定,并且使用RGB相加混色模型。电视机和计算机显示器使用的阴极射线管(cathode ray tube,CRT)就是一个有源物体。CRT使用3个电子枪分别产生红(Red)、绿(Green)和蓝(Blue)三种波长的光,并以各种不同的相对强度综合起来产生颜色,如图5-01所示。组合这三种光波以产生特定颜色就叫做相加混色,因为这种相加混色是利用R,G和B颜色分量产生颜色,所以称为RGB相加混色模型。相加混色是计算机应用中定义颜色的基本方法。
图5-01 彩色显像产生颜色的原理
从理论上讲,任何一种颜色都可用三种基本颜色按不同的比例混合得到。三种颜色的光强越强,到达我们眼睛的光就越多,它们的比例不同,我们看到的颜色也就不同,没有光到达眼睛,就是一片漆黑。当三基色按不同强度相加时,总的光强增强,并可得到任何一种颜色。某一种颜色和这三种颜色之间的关系可用下面的式子来描述:
颜色=R(红色的百分比)+G(绿色的百分比)+B(蓝色的百分比)
当三基色等量相加时,得到白色;等量的红绿相加而蓝为0值时得到黄色;等量的红蓝相加而绿为0时得到品红色;等量的绿蓝相加而红为0时得到青色。这些三基色相加的结果如图5-02所示。
图5-02 相加混色
一幅彩色图像可以看成由许多的点组成的,如图5-03所示。图像中的单个点称为像素(pixel),每个像素都有一个值,称为像素值,它表示特定颜色的强度。一个像素值往往用R,G,B三个分量表示。如果每个像素的每个颜色分量用二进制的1位来表示,那末每个颜色的分量只有“1”和“0”这两个值。这也就是说,每种颜色的强度是100%,或者是0%。在这种情况下,每个像素所显示的颜色是8种可能出现的颜色之一,如表5-01所示。
图5-03 一幅图像由许多像素组成
表5-01相加色
RGB
颜色
000
黑
001
蓝
010
绿
011
青
100
红
101
品红
110
黄
111
白
对于标准的电视图形阵列(Video graphics array,VGA)适配卡的16种标准颜色,其对应的R,G,B值如表5-02所示。在Microsoft公司的Windows中,用代码0~15表示。在表中,代码1~6表示的颜色比较暗,它们是用最大光强值的一半产生的颜色;9~15是用最大光强值产生的。
表5-02 16色VGA调色板的值代码
R
G
B
H
S
L
颜色
0
0
0
0
160
0
0
黑(Black)
1
0
0
128
160
240
60
蓝(Blue)
2
0
128
0
80
240
60
绿(Green)
3
0
128
128
120
240
60
青(Cyan)
4
128
0
0
0
240
60
红(Red)
5
128
0
128
200
240
60
品红(Magenta)
6
128
128
0
40
240
60
褐色(Dark yellow)
7
192
192
192
160
0
180
白(Light gray)
8
128
128
128
160
0
120
深灰(Dark Gray)
9
0
0
255
160
240
120
淡蓝(Light blue)
10
0
255
0
80
240
120
淡绿(Light green)
11
0
255
255
120
240
120
淡青(Light cyan)
12
255
0
0
0
240
120
淡红(Light Red)
13
255
0
255
200
240
120
淡品红(Light Magenta)
14
255
255
0
40
240
120
黄(yellow)
15
255
255
255
160
0
240
高亮白(Bright white)
在表5-02中,每种基色的强度是用8位表示的,因此可产生224=16 777 216种颜色。但实际上要用一千六百多万种颜色的场合是很少的。在多媒体计算机中,除用RGB来表示图像之外,还用色调-饱和度-亮度(hue-saturation-lightness,HSL)颜色模型在HSL模型中,H定义颜色的波长,称为色调;S定义颜色的强度(intensity),表示颜色的深浅程度,称为饱和度;L定义掺入的白光量,称为亮度。用HSL表示颜色的重要性,是因为它比较容易为画家所理解。若把S和L的值设置为1,当改变H时就是选择不同的纯颜色;减小饱和度S时,就可体现掺入白光的效果;降低亮度时,颜色就暗,相当于掺入黑色。因此在Windows中也用了HSL表示法,16色VGA调色板的值也表示在表5-02中。
5.2.2 打印彩色图像用CMY相减混色模型一个不发光波的物体称为无源物体,它的颜色由该物体吸收或者反射哪些光波决定,用CMY相减混色模型。用彩色墨水或颜料进行混合,绘制的图画就是一种无源物体,用这种方法生成的颜色称为相减色。在理论上说,任何一种颜色都可以用三种基本颜料按一定比例混合得到。这三种颜色是青色(Cyan)、品红(Magenta)和黄色(Yellow),通常写成CMY,称为CMY模型。用这种方法产生的颜色之所以称为相减色,乃是因为它减少了为视觉系统识别颜色所需要的反射光。
在相减混色中,当三基色等量相减时得到黑色;等量黄色(Y)和品红(M)相减而青色(C)为0时,得到红色(R);等量青色(C)和品红(M)相减而黄色(Y)为0时,得到蓝色(B);等量黄色(Y)和青色(C)相减而品红(M)为0时,得到绿色(G)。三基色相减结果如图5-04所示。
图5-04 相减混色
彩色打印机采用的就是这种原理,印刷彩色图片也是采用这种原理。按每个像素每种颜色用1位表示,相减法产生的8种颜色如表5-03所示。由于彩色墨水和颜料的化学特性,用等量的三基色得到的黑色不是真正的黑色,因此在印刷术中常加一种真正的黑色(black ink),所以CMY又写成CMYK。
表5-03 相减色青色
品红
黄色
相减色
0
0
0
白
0
0
1
黄
0
1
0
品红
0
1
1
红
1
0
0
青
1
0
1
绿
1
1
0
蓝
1
1
1
黑
相加色与相减色之间有一个直接关系,如表5-04所示。利用它们之间的关系,可以把显示的颜色转换成输出打印的颜色。相加混色和相减混色之间成对出现互补色。例如,当RGB为1∶1∶1时,在相加混色中产生白色,而CMY为1∶1∶1时,在相减混色中产生黑色。从另一个角度也可以看它们的互补性。从表5-04中可以看到,在RGB中的颜色为1的地方,在CMY对应的位置上,其颜色值为0。例如RGB为0∶1∶0时,对应CMY为1∶0∶1。
表5-04 相加色与相减色的关系相加混色
相减混色
生成的颜色
RGB
CMY
000
111
黑
001
110
蓝
010
101
绿
011
100
青
100
011
红
101
010
品红
110
001
黄
111
000
白
5.3 图像的三个基本属性描述一幅图像需要使用图像的属性。图像的属性包含分辨率、像素深度、真/伪彩色、图像的表示法和种类等。本节介绍前面三个特性。
5.3.1 分辨率我们经常遇到的分辨率有两种:显示分辨率和图像分辨率。
1,显示分辨率显示分辨率是指显示屏上能够显示出的像素数目。例如,显示分辨率为640×480表示显示屏分成480行,每行显示640个像素,整个显示屏就含有307200个显像点。屏幕能够显示的像素越多,说明显示设备的分辨率越高,显示的图像质量也就越高。除象手提式那样的计算机用液晶显示LCD(liquid crystal display)外,一般都采用CRT显示,它类似于彩色电视机中的CRT。显示屏上的每个彩色像点由代表R,G,B三种模拟信号的相对强度决定,这些彩色像点就构成一幅彩色图像。
计算机用的CRT和家用电视机用的CRT之间的主要差别是显像管玻璃面上的孔眼掩模和所涂的荧光物不同。孔眼之间的距离称为点距(dot pitch)。因此常用点距来衡量一个显示屏的分辨率。电视机用的CRT的平均分辨率为0.76 mm,而标准SVGA显示器的分辨率为0.28 mm。孔眼越小,分辨率就越高,这就需要更小更精细的荧光点。这也就是为什么同样尺寸的计算机显示器比电视机的价格贵得多的原因。
早期用的计算机显示器的分辨率是0.41 mm,随着技术的进步,分辨率由0.41→0.38→0.35→0.31→0.28一直到0.26 mm以下。显示器的价格主要集中体现在分辨率上,因此在购买显示器时应在价格和性能上综合考虑。
2,图像分辨率图像分辨率是指组成一幅图像的像素密度的度量方法。对同样大小的一幅图,如果组成该图的图像像素数目越多,则说明图像的分辨率越高,看起来就越逼真。相反,图像显得越粗糙。
在用扫描仪扫描彩色图像时,通常要指定图像的分辨率,用每英寸多少点(dots per inch,DPI)表示。如果用300 DPI来扫描一幅8″×10″的彩色图像,就得到一幅2400×3000个像素的图像。分辨率越高,像素就越多。
图像分辨率与显示分辨率是两个不同的概念。图像分辨率是确定组成一幅图像的像素数目,而显示分辨率是确定显示图像的区域大小。如果显示屏的分辨率为640×480,那末一幅320×240的图像只占显示屏的1/4;相反,2400×3000的图像在这个显示屏上就不能显示一个完整的画面。
这里顺便说一下,在显示一幅图像时,有可能会出现图像的宽高比(aspect radio)与显示屏上显示出的图像的宽高比不一致这种现象。这是由于显示设备中定义的宽高比与图像的宽高比不一致造成的。例如一幅200×200像素的方形图,有可能在显示设备上显示的图不再是方形图,而变成了矩形图。这种现象在20世纪80年代的显示设备上经常遇到。
5.3.2 像素深度像素深度是指存储每个像素所用的位数,它也是用来度量图像的分辨率。像素深度决定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数。例如,一幅彩色图像的每个像素用R,G,B三个分量表示,若每个分量用8位,那末一个像素共用24位表示,就说像素的深度为24,每个像素可以是224=16 777 216种颜色中的一种。在这个意义上,往往把像素深度说成是图像深度。表示一个像素的位数越多,它能表达的颜色数目就越多,而它的深度就越深。
虽然像素深度或图像深度可以很深,但各种VGA的颜色深度却受到限制。例如,标准VGA支持4位16种颜色的彩色图像,多媒体应用中推荐至少用8位256种颜色。由于设备的限制,加上人眼分辨率的限制,一般情况下,不一定要追求特别深的像素深度。此外,像素深度越深,所占用的存储空间越大。相反,如果像素深度太浅,那也影响图像的质量,图像看起来让人觉得很粗糙和很不自然。
在用二进制数表示彩色图像的像素时,除R,G,B分量用固定位数表示外,往往还增加1位或几位作为属性(Attribute)位。例如,RGB 5∶5∶5表示一个像素时,用2个字节共16位表示,其中R,G,B各占5位,剩下一位作为属性位。在这种情况下,像素深度为16位,而图像深度为15位。
属性位用来指定该像素应具有的性质。例如在CD-I系统中,用RGB 5∶5∶5表示的像素共16位,其最高位(b15)用作属性位,并把它称为透明(Transparency)位,记为T。T的含义可以这样来理解:假如显示屏上已经有一幅图存在,当这幅图或者这幅图的一部分要重叠在上面时,T位就用来控制原图是否能看得见。例如定义T=1,原图完全看不见;T=0,原图能完全看见。
在用32位表示一个像素时,若R,G,B分别用8位表示,剩下的8位常称为α通道(alpha channel)位,或称为覆盖(overlay)位、中断位或属性位。它的用法可用一个预乘α通道(premultiplied alpha)的例子说明。假如一个像素(A,R,G,B)的四个分量都用规一化的数值表示,(A,R,G,B)为(1,1,0,0)时显示红色。当像素为(0.5,1,0,0)时,预乘的结果就变成(0.5,0.5,0,0),这表示原来该像素显示的红色的强度为1,而现在显示的红色的强度降了一半。
用这种办法定义一个像素的属性在实际中很有用。例如在一幅彩色图像上叠加文字说明,而又不想让文字把图覆盖掉,就可以用这种办法来定义像素,而该像素显示的颜色又有人把它称为混合色(key color)。在图像产品生产中,也往往把数字电视图像和计算机生产的图像混合在一起,这种技术称为视图混合(video keying)技术,它也采用α通道。
5.3.3 真彩色、伪彩色与直接色搞清真彩色、伪彩色与直接色的含义,对于编写图像显示程序、理解图像文件的存储格式有直接的指导意义,也不会对出现诸如这样的现象感到困惑:本来是用真彩色表示的图像,但在VGA显示器上显示的图像颜色却不是原来图像的颜色。
1,真彩色(true color)
真彩色是指在组成一幅彩色图像的每个像素值中,有R,G,B三个基色分量,每个基色分量直接决定显示设备的基色强度,这样产生的彩色称为真彩色。例如用RGB 5∶5∶5表示的彩色图像,R,G,B各用5位,用R,G,B分量大小的值直接确定三个基色的强度,这样得到的彩色是真实的原图彩色。
如果用RGB 8:8:8方式表示一幅彩色图像,就是R,G,B都用8位来表示,每个基色分量占一个字节,共3个字节,每个像素的颜色就是由这3个字节中的数值直接决定,可生成的颜色数就是224 =16 777 216种。用3个字节表示的真彩色图像所需要的存储空间很大,而人的眼睛是很难分辨出这么多种颜色的,因此在许多场合往往用RGB 5:5:5来表示,每个彩色分量占5个位,再加1位显示属性控制位共2个字节,生成的真颜色数目为215 = 32K。
在许多场合,真彩色图通常是指RGB 8:8:8,即图像的颜色数等于224,也常称为全彩色(full color)图像。但在显示器上显示的颜色就不一定是真彩色,要得到真彩色图像需要有真彩色显示适配器,目前在PC上用的VGA适配器是很难得到真彩色图像的。
2,伪彩色(pseudo color)
伪彩色图像的含义是,每个像素的颜色不是由每个基色分量的数值直接决定,而是把像素值当作彩色查找表(color look-up table,CLUT)的表项入口地址,去查找一个显示图像时使用的R,G,B值,用查找出的R,G,B值产生的彩色称为伪彩色。
彩色查找表CLUT是一个事先做好的表,表项入口地址也称为索引号,如图图6-08(c)所示。例如256种颜色的查找表,0号索引对应黑色,...,255号索引对应白色。彩色图像本身的像素数值和彩色查找表的索引号有一个变换关系,这个关系可以使用Windows 95/98定义的变换关系,也可以使用你自己定义的变换关系。使用查找得到的数值显示的彩色是真的,但不是图像本身真正的颜色,它没有完全反映原图的彩色。
3,直接色(direct color)
每个像素值分成R,G,B分量,每个分量作为单独的索引值对它做变换。也就是通过相应的彩色变换表找出基色强度,用变换后得到的R,G,B强度值产生的彩色称为直接色。它的特点是对每个基色进行变换。
用这种系统产生颜色与真彩色系统相比,相同之处是都采用R,G,B分量决定基色强度,不同之处是前者的基色强度直接用R,G,B决定,而后者的基色强度由R,G,B经变换后决定。因而这两种系统产生的颜色就有差别。试验结果表明,使用直接色在显示器上显示的彩色图像看起来真实、很自然。
这种系统与伪彩色系统相比,相同之处是都采用查找表,不同之处是前者对R,G,B分量分别进行变换,后者是把整个像素当作查找表的索引值进行彩色变换。
5.4 图像的种类
5.4.1 矢量图与点位图在计算机中,表达图像和计算机生成的图形图像有两种常用的方法:一种叫做是矢量图(vector based image)法,另一种叫点位图(bit mapped image)法。虽然这两种生成图的方法不同,但在显示器上显示的结果几乎没有什么差别。
矢量图是用一系列计算机指令来表示一幅图,如画点、画线、画曲线、画圆、画矩形等。这种方法实际上是数学方法来描述一幅图,然后变成许多的数学表达式,再编程,用语言来表达。在计算显示图时,也往往能看到画图的过程。绘制和显示这种图的软件通常称为绘图程序(draw programs)。
矢量图有许多优点。例如,当需要管理每一小块图像时,矢量图法非常有效;目标图像的移动、缩小放大、旋转、拷贝、属性的改变(如线条变宽变细、颜色的改变)也很容易做到;相同的或类似的图可以把它们当作图的构造块,并把它们存到图库中,这样不仅可以加速画的生成,而且可以减小矢量图文件的大小。
然而,当图变得很复杂时,计算机就要花费很长的时间去执行绘图指令。此外,对于一幅复杂的彩色照片(例如一幅真实世界的彩照),恐怕就很难用数学来描述,因而就不用矢量法表示,而是采用点位图法表示。
点位图法与矢量图法很不相同。其实,点位图已经在前面几节作了详细介绍,它是把一幅彩色图分成许多的像素,每个像素用若干个二进制位来指定该像素的颜色、亮度和属性。因此一幅图由许多描述每个像素的数据组成,这些数据通常称为图像数据,而这些数据作为一个文件来存储,这种文件又称为图像文件。如要画点位图,或者编辑点位图,则用类似于绘制矢量图的软件工具,这种软件称为画图程序(paint programs)。
点位图的获取通常用扫描仪,以及摄像机、录相机、激光视盘与视频信号数字化卡一类设备,通过这些设备把模拟的图像信号变成数字图像数据。
点位图文件占据的存储器空间比较大。影响点位图文件大小的因素主要有两个:即前面介绍的图像分辨率和像素深度。分辨率越高,就是组成一幅图的像素越多,则图像文件越大;像素深度越深,就是表达单个像素的颜色和亮度的位数越多,图像文件就越大。而矢量图文件的大小则主要取决图的复杂程度。
矢量图与点位图相比,显示点位图文件比显示矢量图文件要快;矢量图侧重于“绘制”、去创造,而点位图偏重于“获取”、去“复制”;矢量图和点位图之间可以用软件进行转换,由矢量图转换成点位图采用光栅化(rasterizing)技术,这种转换也相对容易;由点位图转换成矢量图用跟踪(tracing)技术,这种技术在理论上说是容易,但在实际中很难实现,对复杂的彩色图像尤其如此。
5.4.2 灰度图与彩色图灰度图(gray-scale image)按照灰度等级的数目来划分。只有黑白两种颜色的图像称为单色图像(monochrome image),如图5-05所示的标准图像。图中的每个像素的像素值用1位存储,它的值只有“0”或者“1”,一幅640×480的单色图像需要占据37.5 KB的存储空间。
图5-06是一幅标准灰度图像。如果每个像素的像素值用一个字节表示,灰度值级数就等于256级,每个像素可以是0~255之间的任何一个值,一幅640×480的灰度图像就需要占据300 KB的存储空间。
图5-05 标准单色图 图5-06 标准灰度图
彩色图像(color image)可按照颜色的数目来划分,例如256色图像和真彩色(224=16 777 216种颜色)等。图5-07是一幅用256色标准图像转换成的256级灰度图像,彩色图像的每个像素的R、G和B值用一个字节来表示,一幅640×480的8位彩色图像需要300 KB的存储空间;图5-08是一幅真彩色图像转换成的256级灰度图像,每个像素的R,G,B分量分别用一个字节表示,一幅640×480的真彩色图像需要900 KB的存储空间。
许多24位彩色图像是用32位存储的,这个附加的8位叫做alpha通道,它的值叫做alpha值,它用来表示该像素如何产生特技效果。
使用真彩色表示的图像需要很大的存储空间,在网络传输也很费时间。由于人的视角系统的颜色分辨率不高,因此在没有必要使用真彩色的情况下就尽可能不用。
图5-07 256色标准图像转换成的灰度图
图5-08 24位标准图像转换成的灰度图
5.5 伽马(( )校正
5.5.1 γ的概念如果电子摄像机的输出电压与场景中光的强度成正比,如果CRT发射的光的强度与输入电压成正比,…,凡是生成和显示图像的所有部件都是线性的话,那么图像处理就会变得比较容易,图像程序员也就不会那么辛苦了!然而,现实世界并不是那样,目前几乎所有的CRT显示设备、摄影胶片和许多电子照相机的光电转换特性都是非线性的。幸好这些非线性部件都有一个能够反映各自特性的幂函数,它的一般形式是:
( 输出=(输入)γ
式中的γ(gamma)是幂函数的指数,它用来衡量非线性部件的转换特性。这种特性称为幂-律(power-law)转换特性。按照惯例,“输入”和“输出”都缩放到0~1之间。其中,0表示黑电平,1表示颜色分量的最高电平。对于特定的部件,人们可以度量它的输入与输出之间的函数关系,从而找出γ值。
实际的图像系统是由多个部件组成的,这些部件中可能会有几个非线性部件。如果所有部件都有幂函数的转换特性,那么整个系统的传递函数就是一个幂函数,它的指数γ等于所有单个部件的γ的乘积。如果图像系统的整个(=1,输出与输入就成线性关系。这就意味在重现图像中任何两个图像区域的强度之比率与原始场景的两个区域的强度之比率相同,这似乎是图像系统所追求的目标:真实地再现原始场景。但实际情况却不完全是这样。
当这种再生图像在“明亮环境”下,也就是在其他白色物体的亮度与图像中白色部分的亮度几乎相同的环境下观看时,γ=1的系统的确可使图像看起来像“原始场景”一样。但是某些图像有时在“黑暗环境”下观看所获得的效果会更好,放映电影和投影幻灯片就属于这种情况。在这种情况下,γ值不是等于1而通常认为γ(1.5,人的视角系统所看到的场景就好像是“原始场景”。根据这种观点,投影幻灯片的γ值就设计为1.5左右,而不是1。
还有一种环境称为中间环境的“暗淡环境”,这种环境就像房间中的其他东西能够看到,但比图像中白色部分的亮度更暗。看电视的环境和计算机房的环境就属于这种情况。在这种情况下,通常认为再现图像需要γ(1.25才能看起来像“原始场景”。
5.5.2 γ校正所有CRT显示设备都有幂-律转换特性,如果生产厂家不加说明,那么它的γ值大约等于2.5。用户对发光的磷光材料的特性可能无能为力去改变,因而也很难改变它的γ值。为使整个系统的γ值接近于使用所要求的γ值,起码就要有一个能够提供γ校正的非线性部件,用来补偿CRT的非线性特性。
在所有广播电视系统中,γ校正是在摄像机中完成的。最初的NTSC电视标准需要摄像机具有γ=1/2.2=0.45的幂函数,现在采纳γ=0.5的幂函数。PAL和SECAM电视标准指定摄像机需要具有γ=1/2.8=0.36的幂函数,但这个数值已显得太小,因此实际的摄像机很可能会设置成γ=0.45或者0.5。使用这种摄像机得到的图像就预先做了校正,在γ=2.5的CRT屏幕上显示图像时,屏幕图像相对于原始场景的γ大约等于1.25。这个值适合“暗淡环境”下观看。
过去的时代是“模拟时代”,而今已进入“数字时代”,进入计算机的电视图像依然带有γ=0.5的校正,这一点可不要忘记。虽然带有γ值的电视在数字时代工作得很好,尤其是在特定环境下创建的图像在相同环境下工作,可是在其他环境下工作时,往往会使显示的图像让人看起来显得太亮或者太暗,因此在可能条件下就要做γ校正。
在什么地方做γ校正是人们所关心的问题。从获取图像、存储成图像文件、读出图像文件直到在某种类型的显示屏幕上显示图像,这些个环节中至少有5个地方可有非线性转换函数存在并可引入γ值。例如,
camera_gamma:摄像机中图像传感器的γ(通常γ=0.4或者0.5)
encoding_gamma:编码器编码图像文件时引入γ
decoding_gamma,译码器读图像文件时引入γ
LUT_gamma:图像帧缓存查找表中引入γ
CRT_gamma:CRT的γ(通常γ=2.5)
在数字图像显示系统中,由于要显示的图像不一定就是摄像机来的图像,假设这种图像的γ值等于1,如果encoding_gamma=0.5,CRT_gamma=2.5和decoding_gamma,LUT_gamma都为1.0时,整个系统的γ就近似等于1.25。
根据上面的分析,为了在不同环境下观看到“原始场景”可在适当的地方加入γ校正。
5.6 JPEG压缩编码
5.6.1 JPEG算法概要
JPEG(Joint Photographic Experts Group) 是一个由 ISO和IEC两个组织机构联合组成的一个专家组,负责制定静态的数字图像数据压缩编码标准,这个专家组开发的算法称为JPEG算法,并且成为国际上通用的标准,因此又称为JPEG标准。JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。
JPEG专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换(Discrete Cosine Transform,DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。使用有损压缩算法时,在压缩比为25:1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。例如,在V-CD和DVD-Video电视图像压缩技术中,就使用JPEG的有损压缩算法来取消空间方向上的冗余数据。为了在保证图像质量的前提下进一步提高压缩比,近年来JPEG专家组正在制定JPEG 2000(简称JP 2000)标准,这个标准中将采用小波变换(wavelet)算法。
JPEG压缩是有损压缩,它利用了人的视角系统的特性,使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息。JPEG算法框图如图5-09所示,压缩编码大致分成三个步骤:
使用正向离散余弦变换(forward discrete cosine transform,FDCT)把空间域表示的图变换成频率域表示的图。
使用加权函数对DCT系数进行量化,这个加权函数对于人的视觉系统是最佳的。
使用霍夫曼可变字长编码器对量化系数进行编码。
译码或者叫做解压缩的过程与压缩编码过程正好相反。
JPEG算法与颜色空间无关,因此“RGB到YUV变换”和“YUV到RGB变换”不包含在JPEG算法中。JPEG算法处理的彩色图像是单独的彩色分量图像,因此它可以压缩来自不同颜色空间的数据,如RGB,YCbCr和CMYK。
图5-09 JPEG压缩编码-解压缩算法框图
5.6.2 JPEG算法的主要计算步骤
JPEG压缩编码算法的主要计算步骤如下:
正向离散余弦变换(FDCT)。
量化(quantization)。
Z字形编码(zigzag scan)。
使用差分脉冲编码调制(differential pulse code modulation,DPCM)对直流系数(DC)进行编码。
使用行程长度编码(run-length encoding,RLE)对交流系数(AC)进行编码。
熵编码(entropy coding)。
1,正向离散余弦变换下面对正向离散余弦变换(FDCT)变换作几点说明。
(1) 对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,如图5-10所示,并作为两维离散余弦变换DCT的输入。通过DCT变换,把能量集中在少数几个系数上。
图5-10 离散余弦变换
(2) DCT变换使用下式计算,
,....,(5-1)
它的逆变换使用下式计算,
,....,(5-2)
上面两式中,
C(u),C(v) = 1/,当u,v = 0;
C(u),C(v) = 1,其他。
f(i,j)经DCT变换之后,F(0,0)是直流系数,其他为交流系数。
(3) 在计算两维的DCT变换时,可使用下面的计算式把两维的DCT变换变成一维的DCT变换,
,..........,(5-3)
,...........,(5-4)
图5-11 两维DCT变换方法
实际的计算方法可参看[5]
2,量化量化是对经过FDCT变换后的频率系数进行量化。量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。量化是图像质量下降的最主要原因。
对于有损压缩算法,JPEG算法使用如图5-12所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:如表5-05所示的亮度量化表和表5-06所示的色差量化表。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此图中的左上角的量化步距要比右下角的量化步距小。表5-05和表5-06中的数值对CCIR 601标准电视图像已经是最佳的。如果不使用这两种表,你也可以把把自己的量化表替换它们。
图5-12 均匀量化器
表5-05 亮度量化值表 表5-06 色度量化值
3,Z字形编排量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排,如图5-13所示,DCT系数的序号如图5-14所示,这样就把一个8 ( 8的矩阵变成一个1 ( 64的矢量,频率较低的系数放在矢量的顶部。
图5-13 量化DCT系数的编排
0
1
5
6
14
15
27
28
2
4
7
13
16
26
29
42
3
8
12
17
25
30
41
43
9
11
18
24
31
40
44
53
10
19
23
32
39
45
52
54
20
22
33
38
46
51
55
60
21
34
37
47
50
56
59
61
35
36
48
49
57
58
62
63
图5-14 量化DCT系数的序号
4,直流系数的编码
8 ( 8图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8 ( 8图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲编码调制(DPCM)技术,对相邻图像块之间量化DC系数的差值(Delta)进行编码,
Delta=DC(0,0)k-DC(0,0)k-1 ........ (5-5)
5,交流系数的编码量化AC系数的特点是1 ( 64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。
JPEG使用了1个字节的高4位来表示连续“0”的个数,而使用它的低4位来表示编码下一个非“0”系数所需要的位数,跟在它后面的是量化AC系数的数值。
6,熵编码使用熵编码还可以对DPCM编码后的直流DC系数和RLE编码后的交流AC系数作进一步的压缩。
在JPEG有损压缩算法中,使用霍夫曼编码器来减少熵。使用霍夫曼编码器的理由是可以使用很简单的查表(lookup table)方法进行编码。压缩数据符号时,霍夫曼编码器对出现频度比较高的符号分配比较短的代码,而对出现频度较低的符号分配比较长的代码。这种可变长度的霍夫曼码表可以事先进行定义。
[例5.1] 表5-07所示的是DC码表符号举例。如果DC的值(Value)为4,符号SSS用于表达实际值所需要的位数,实际位数就等于3。
表5-07 DC码表符号举例
Value
SSS
0
0
-1,1
1
-3,-2,2,3
2
-7..-4,4..7
3
7,组成位数据流
JPEG编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样的组织的数据通常称为JPEG位数据流(JPEG bitstream)。
5.6.3 应用JPEG算法举例有关JPEG算法更详细的信息和数据,请参看JPEG标准ISO/IEC 10918。图5-15是使用JPEG算法对一个8×8图像块计算得到的结果。在这个例子中,计算正向离散余弦变换(FDCT)之前对源图像中的每个样本数据减去了128,在逆向离散余弦变换之后对重构图像中的每个样本数据加了128。
图5-15 JPEG压缩编码举例
5.7 图像文件格式本节从大量的图像文件格式中选择了三种常用和一种正在推广使用的图像文件存储格式进行介绍。BMP位图格式是Windows上画图软件(Paint)使用的格式,GIF和JPG是因特网上几乎所有Web浏览器都支持的图像文件格式,使用GIF文件格式的动画软件也得到广泛使用。PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF格式。现在开发的几乎所有的图像处理软件都支持这些格式。
本节简单介绍图像文件的结构,若要编程,则需要仔细阅读本章后面提供的参考文献[6][7][8]。
5.7.1 BMP文件格式
1,简介位图文件(Bitmap-File,BMP)格式是Windows采用的图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。Windows 3.0以前的BMP位图文件格式与显示设备有关,因此把它称为设备相关位图(device-dependent bitmap,DDB)文件格式。Windows 3.0以后的BMP位图文件格式与显示设备无关,因此把这种BMP位图文件格式称为设备无关位图(device-independent bitmap,DIB)格式,目的是为了让Windows能够在任何类型的显示设备上显示BMP位图文件。BMP位图文件默认的文件扩展名是BMP或者bmp。
2,文件结构
BMP位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节(BYTE)阵列,它的组成部分和程序中定义的数据结构名称如表5-08所示。
表5-08 BMP图像文件结构组成部分的名称
数据结构的名称
位图文件头(bitmap-file header)
BITMAPFILEHEADER
位图信息头(bitmap-information header)
BITMAPINFOHEADER
彩色表(color table)
RGBQUAD
图像数据阵列字节
BYTE
位图文件头:用BITMAPFILEHEADER数据结构定义,它包含有关于文件类型、文件大小(用字节为单位)、存放位置(说明从BITMAPFILEHEADER结构开始到实际的图像数据阵列字节之间的字节偏移量)等信息,在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构进行定义。
位图信息头:用BITMAPINFOHEADER数据结构定义,它包含有位图文件的大小、压缩类型和颜色格式。BMP位图可以是没有任何压缩的位图,或者采用行程编码(RLE)进行压缩的位图。颜色格式说明位图所用的颜色数目,2/16/256/16777216种颜色。
彩色表:像素的颜色用RGBQUAD结构来定义。彩色表中的元素与位图所具有的颜色数相同。对于24-位真彩色图像就不使用彩色表,因为位图中的RGB值就代表了每个像素的颜色。彩色表中的颜色按颜色的重要性排序,这可以辅助显示驱动程序为不能显示足够多颜色数的显示设备显示彩色图像。
图像数据阵列字节:紧跟在彩色表之后的是图像数据字节阵列,用BYTE数据结构。图像的每一扫描行由表示图像的连续的像素字节组成,每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度。扫描行是由底向上存储的,这就是说,阵列中的第一个字节表示位图左下角的像素,而最后一个字节表示位图右上角的像素。
5.7.2 GIF文件格式
1,简介
GIF(Graphics Interchange Format)是CompuServe公司开发的图像文件存储格式,1987年开发的GIF文件格式版本号是GIF87a,1989年进行了扩充,扩充后的版本号定义为GIF89a。
GIF图像文件以数据块(block)为单位来存储图像的相关信息。一个GIF文件由表示图形/图像的数据块、数据子块以及显示图形/图像的控制信息块组成,称为GIF数据流(Data Stream)。数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件结束块(Trailer)之间。
GIF文件格式采用了LZW(Lempel-Ziv Walch)压缩算法来存储图像数据,定义了允许用户为图像设置背景的透明(transparency)属性。此外,GIF文件格式可在一个文件中存放多幅彩色图形/图像。如果在GIF文件中存放有多幅图像,它们可以像演幻灯片那样显示或者像动画那样演示。
2,文件结构
GIF文件结构的典型结构如图5-16所示。
1
Header
GIF文件头
2
Logical Screen Descriptor
逻辑屏幕描述块
3
Global Color Table
全局彩色表
… 扩展模块(任选) …
4
Image Descriptor
图形描述块
5
Local Color Table
局部彩色表(可重复n次)
可
6
Table Based Image Data
表示压缩图像数据
重
7
Graphic Control Extension
图像控制扩展块
复
8
Plain Text Extension
无格式文本扩展块
n
9
Comment Extension
注释扩展块
个
10
Applicaton Extension
应用程序扩展块
… 扩展模块(任选) …
11
GIF Trailer
GIF文件结束块
图5-16 GIF文件结构
数据块可分成3类:控制块(Control Block),图形描绘块(Graphic-Rendering Block)和专用块(Special Purpose Block)。
控制块:控制块包含有用来控制数据流(Data Stream)或者设置硬件参数的信息,其成员包括:
GIF文件头(Header)
逻辑屏幕描述块(Logical Screen Descriptor)
图形控制扩展块(Graphic Control Extension)
文件结束块(Trailer)
图形描绘块:包含有用来描绘在显示设备上显示图形的信息和数据,其成员包括:
图像描述块(Image Descriptor)
无格式文本扩展块(Plain Text Extension)
特殊用途数据块,包含有与图像处理无关的信息,其成员包括:
注释扩展块(Comment Extension)
应用扩展块(Application Extension)
除了在控制块中的逻辑屏幕描述块(Logical Screen Descriptor)和全局彩色表(Global Color Table)的作用范围是整个数据流(Data Stream)之外,所有其他控制块仅控制跟在它们后面的图形描绘块。
5.7.3 JPEG格式
1,简介
JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。直到1998年12月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEG File Interchange Format,JFIF),版本号为1.02。这是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外还有TIFF JPEG等格式,但由于这种格式比较复杂,因此大多数应用程序都支持JFIF文件交换格式。
JPEG文件使用的颜色空间是1982年推荐的电视图像信号数字化标准CCIR 601,现改为ITU-R BT.601(详见第7章中的7.4.5)。在这个彩色空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。从RGB转换成YCbCr空间时,使用下面的精确的转换关系:
其中亮度电平和色差电平和分别是CCIR 601定义的参数。由于的范围是0~1,和的范围是-0.5~+0.5,因此,和的最大值必须要箝到255。当和,,分量都用8位表示,并且它们的取值范围均为[0,255]时,RGB和YCbCr之间的转换关系按照下面的方法计算[12]。
(1) 从RGB转换成YCbCr
YCbCr分量,[0,255],可直接从用8位表示的RGB分量计算得到:
需要注意的是不是所有图像文件格式都按照的次序存储样本数据,因此在RGB文件转换成JFIF文件时需要首先验证的次序。
(2) 从YCbCr转换成RGB
RGB分量可直接从YCbCr分量,[0,255],计算得到:
在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中的第一个图像样本是图像左上角的样本。
此外,微处理机中的数据存放顺序有正序(big endian)和逆序(little endian)之分。正序存放就是高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后。例如,十六进制数为A02B,正序存放就是A02B,逆序存放就是2BA0。摩托罗拉(Motorola)公司的微处理器使用正序存放,而英特尔(Intel)公司的微处理器使用逆序。JPEG文件中的字节是按照正序排列的。
2,文件结构
JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上的JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记:
SOI? 0xD8
图像开始
APP0 0xE0
JFIF应用数据块
APPn 0xE1 ~ 0xEF
其他的应用数据块(n,1~15)
DQT? 0xDB
量化表
SOF0 0xC0
帧开始
DHT? 0xC4
霍夫曼(Huffman)表
SOS? 0xDA
扫描线开始
EOI? 0xD9
图像结束
在JPEG文件存储格式中,每一个标记都是JPEG文件的一个部分,因此JPEG文件实际上就是由上述的8个部分组成。
5.7.4 PNG格式
1,简介
PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG's Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。
PNG文件格式保留GIF文件格式的下列特性:
使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。
流式读/写性能(streamability):图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像。
逐次逼近显示(progressive display):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。
透明性(transparency):这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。
辅助信息(ancillary information):这个特性可用来在图像文件中存储一些文本注释信息。
独立于计算机软硬件环境。
使用无损压缩。
PNG文件格式中要增加下列GIF文件格式所没有的特性:
每个像素为48位的真彩色图像。
每个像素为16位的灰度图像。
可为灰度图和真彩色图添加α通道。
添加图像的γ信息。
使用循环冗余码(cyclic redundancy code,CRC)检测损害的文件。
加快图像显示的逐次逼近显示方式。
标准的读/写工具包。
2,文件结构
PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。
PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。
(1) PNG文件署名域
8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:
十进制数
137
80
78
71
13
10
26
10
十六进制数
89
50
4e
47
0d
0a
1a
0a
(2) 数据块的结构每个数据块都由表5-09所示的的4个域组成。
表5-09 PNG文件数据块的结构名称
字节数
说明
Length(长度)
4字节
指定数据块中数据域的长度,其长度不超过
(231-1)字节
Chunk Type Code(数据块类型码)
4字节
数据块类型码由ASCII字母(A-Z和a-z)组成
Chunk Data(数据块数据)
可变长度
存储按照Chunk Type Code指定的数据
CRC(循环冗余检测)
4字节
存储用来检测是否有错误的循环冗余码
在表5-09中,CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC具体算法定义在ISO 3309和ITU-T V.42中,其值按下面的CRC码生成多项式进行计算:
5.8 图像文件后缀一览表文件格式是存储文本、图形或者图像数据的一种数据结构。在文字处理中,存储文本文件要使用文件格式。例如,使用微软公司的Word处理器编写的文件,可根据不同的应用环境用不同的格式存储。如果使用多信息文本格式(Rich Text Format,RTF)存储,这个文件就可在其他的平台(如Mac机)或者使用其他的字处理器进行处理。同样,存储图像也需要有存储格式,从20世纪70年代图像开始进入计算机以来,开发了许许多多的图像文件存储格式,而且互相不兼容,需要使用针对特定格式的处理软件。现在都意识到,不兼容的格式给用户造成很多的不便,因此有些格式也逐渐被淘汰。
在计算机中,有矢量图和点位图两种类型的图。矢量图是用数学方法描述的一系列点、线、弧和其他几何形状,如图517(a)所示。因此存放这种图使用的格式称为矢量图格式,存储的数据主要是绘制图形的数学描述;点位图也称光栅图(raster graphics),这种图是由像点组成的,如图517(b),因此存放这种图使用的格式称为点位图格式,存储的数据是描述像素的数值。
图517 矢量图与位映像图除了本章介绍的4种常用格式之外,在我们的工作中还会遇到其他图像格式。为方便查阅,现将部分图形与图像文件的后缀和名称列在表5-10和表5-11中。如果编写程序需要很专业的图像格式资源,包括一些源程序,可以访问站点:
http://www.wotsit.org/
你可饱览多媒体世界中的各种媒体的存储格式。
表5-10 位映像图格式/光栅图光栅(bitmapped formats / raster graphics)
后缀
文件名称
后缀
文件名称
AG4
Access G4 document imaging
JFF
JPEG (JFIF)
ATT
AT&T Group IV
JPG
JPEG
BMP
Windows & OS/2
KFX
Kofax Group IV
CAL
CALS Group IV
MAC
MacPaint
CIT
Intergraph scanned images
MIL
Same as GP4 extension
CLP
Windows Clipboard
MSP
Microsoft Paint
CMP
Photomatrix G3/G4 scanner format
NIF
Navy Image File
CMP
LEAD Technologies
PBM
Portable bitmap
CPR
Knowledge Access
PCD
PhotoCD
CT
Scitex Continuous Tone
PCX
PC Paintbrush
CUT
Dr,Halo
PIX
Inset Systems (HiJaak)
DBX
DATABEAM
PNG
Portable Network Graphics
DX
Autotrol document imaging
PSD
Photoshop native format
ED6
EDMICS (U.S,DOD)
RAS
Sun
EPS
Encapsulated PostScript
RGB
SGI
FAX
Fax
RIA
Alpharel Group IV document imaging
FMV
FrameMaker
RLC
Image Systems
GED
Arts & Letters
RLE
Various RLE-compressed formats
GDF
IBM GDDM format
RNL
GTX Runlength
GIF
CompuServe
SBP
IBM StoryBoard
GP4
CALS Group IV - ITU Group IV
SGI
Silicon Graphics RGB
GX1
Show Partner
SUN
Sun
GX2
Show Partner
TGA
Targa
ICA
IBM IOCA (see MO:DCA)
TIF
TIFF
ICO
Windows icon
WPG
WordPerfect image
IFF
Amiga ILBM
XBM
X Window bitmap
IGF
Inset Systems (HiJaak)
XPM
X Window pixelmap
IMG
GEM Paint
XWD
X Window dump
表5-11 矢量图格式(vector graphics formats)
后缀
文件名称
后缀
文件名称
3DS
3D Studio
GEM
GEM proprietary
906
Calcomp plotter
G4
GTX RasterCAD - scanned images
into vectors for AutoCAD
AI
Adobe Illustrator
IGF
Inset Systems (HiJaak)
CAL
CALS subset of CGM
IGS
IGES
CDR
CorelDRAW
MCS
MathCAD
CGM
Computer Graphics Metafile
MET
OS/2 metafile
CH3
Harvard Graphics chart
MRK
Informative Graphics markup file
CLP
Windows clipboard
P10
Tektronix plotter (PLOT10)
CMX
Corel Metafile Exchange
PCL
HP LaserJet
DG
Autotrol
PCT
Macintosh PICT drawings
DGN
Intergraph drawing format
PDW
HiJaak
DRW
Micrografx Designer 2.x,3.x
PGL
HP plotter
DS4
Micrografx Designer 4.x
PIC
Variety of picture formats
DSF
Micrografx Designer 5.x
PIX
Inset Systems (HiJaak)
DXF
AutoCAD
PLT
HPGL Plot File (HPGL2 has raster format)
DWG
AutoCAD
PS
PostScript Level 2
EMF
Enhanced metafile
RLC
Image Systems "CAD Overlay ESP"
vector files overlaid onto raster images
EPS
Encapsulated PostScript
SSK
SmartSketch
ESI
Esri plot file (GIS mapping)
WMF
Windows Metafile
FMV
FrameMaker
WPG
WordPerfect graphics
GCA
IBM GOCA
WRL
VRML
练习与思考题
什么叫做真彩色和伪彩色?
分别用3,3和2位表示的一幅图像,问该幅图像的颜色数目最多是多少?
如果有一幅256色的图像,问该图的颜色深度是多少?
按照JPEG标准的要求,一幅彩色图像经过JPEG压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,问此时的最大压缩比是多少?
JPEG压缩编码算法的主要计算步骤是:①DCT变换,②量化,③Z字形编码,④使用DPCM对直流系数(DC)进行编码,⑤使用RLE对交流系数(AC)进行编码,⑥熵编码。假设计算机的精度足够高,问在上述计算方法中,哪些计算对图像的质量是有损的?哪些计算对图像的质量是无损的?
什么叫做γ校正?在计算机中找一幅彩色图像,使用Microsoft Office 97/2000中的Microsoft Photo Editor或者其他图像处理软件显示该图像,然后使用γ校正功能修改γ值,观察图像有什么变化。
什么叫做α通道?它的作用是什么?
在计算机中找一幅像素深度为24的彩色图像,使用Office 97/2000中的Microsoft Photo Editor或者其他图像处理软件显示该图像,然后用GIF格式存储,再显示GIF图像。观察图像有什么变化,并分析其原因。
PNG图像文件格式的主要特点是什么?
通过调查、试验和分析,把BMP,GIF,JFIF和PNG格式的一些特性填入下表。
图像格式名称
是不是有损压缩
支持的最大颜色数
BMP
GIF
JFIF
PNG
参考文献和站点
Natravali,A.N.and Haskell,B.G.,Digital Pictures-Representation and Compression,Plenum Press,New York and London,1988.
ISO/IEC JTC 1,DIS 10918-1,Digital Compression and Coding of Continuous-Tone still Image Part 1,Requirements and Guidelines,July 1992
γ校正:http://www.inforamp.net/~poynton/ (浏览日期:2001年12月)
Wallace,G.,The JPEG still Picture Compression Standard,Communications of the ACM,Vol.34,No.4,Apr.1991
C,Loeffler,A,Ligtenberg and G,Moschytz,Practical Fast 1-D DCT Algorithms with 11 Multiplications,Proc,Int'l,Conf,on Acoustics,Speech,and Signal Processing,1989 (ICASSP’ 89),pp988-991
文件格式参考:
各种格式:http://www.wotsit.org/ (重访日期:2001年12月)
位图格式:http://www.cica.indiana.edu/graphics/image_specs/bmp.format.txt (重访日期:2001年12月)
http://www.libpng.org/pub/png/ (重访日期:2001年12月)
地张维谷 小宇宙工作室著,林福宗 改编,图像文件格式(上、下)—Windows编程,北京:清华大学出版社出版,1996年9月
Ziv,J,and Lempel,A.,A Universal Algorithm for Sequential Data Compression,IEEE Transactions on Information Theory,May 1977
Welch,T,A Technique for High-Performance Data Compression,Computer,June 1984.
Nelson,M.R,LZW Data Compression,Dr,Dobb's Journal,October 1989
Eric Hamilton,PEG File Interchange Format,Version 1.02,September 1,1992,C-Cube Microsystems.
***************************************************************************
5.1 视角系统对颜色的感知
5.2 图像的颜色模型
5.2.1 显示彩色图像用RGB相加混色模型
5.2.2 打印彩色图像用CMY相减混色模型
5.3 图像的三个基本属性
5.3.1 分辨率
5.3.2 像素深度
5.3.3 真彩色、伪彩色与直接色
5.4 图像的种类
5.4.1 矢量图与点位图
5.4.2 灰度图与彩色图
5.5 伽马(( )校正
5.5.1 γ的概念
5.5.2 γ校正
5.6 JPEG压缩编码
5.6.1 JPEG算法概要
5.6.2 JPEG算法的主要计算步骤
5.6.3 应用JPEG算法举例
5.7 图像文件格式
5.7.1 BMP文件格式
5.7.2 GIF文件格式
5.7.3 JPEG格式
5.7.4 PNG格式
5.8 图像文件后缀一览表练习与思考题参考文献和站点
***************************************************************************
图像是多媒体中携带信息的极其重要的媒体,有人发表过统计资料,认为人们获取的信息的70%来自视觉系统,实际就是图像和电视。但是,图像数字化之后的数据量非常大,在因特网上传输时很费时间,在盘上存储时很占“地盘”,因此就必须要对图像数据进行压缩。压缩的目的就是要满足存储容量和传输带宽的要求,而付出的代价是大量的计算。几十年来,许多科技工作者一直在孜孜不倦地寻找更有效的方法,用比较少的数据量表达原始的图像。
图像数据压缩主要是根据下面两个基本事实来实现的。一个事实是图像数据中有许多重复的数据,使用数学方法来表示这些重复数据就可以减少数据量;另一个事实是人的眼睛对图像细节和颜色的辨认有一个极限,把超过极限的部分去掉,这也就达到压缩数据的目的。利用前一个事实的压缩技术叫做无损数据压缩技术,利用后一个事实的压缩技术叫做有损压缩技术。实际的图像压缩是综合使用各种有损和无损数据压缩技术来实现的。
本章将介绍表示数字彩色图像所需要的基本知识、使用得相当广泛的JPEG压缩标准和图像文件的存储格式。在介绍过程中,要涉及到有关颜色的度量和颜色空间的转换问题,这些比较深入的问题将在第6章“颜色的度量体系”和第7章“颜色空间变换”中作比较详细的介绍。读者也可先看这两章的内容,然后再阅读这章的内容。
5.1 视角系统对颜色的感知人们认为颜色是视觉系统对可见光的感知结果。可见光是波长在380 nm~780 nm之间的电磁波,我们看到的大多数光不是一种波长的光,而是由许多不同波长的光组合成的。人们在研究眼睛对颜色的感知过程中普通认为,人的视网膜有对红、绿、蓝颜色敏感程度不同的三种锥体细胞,另外还有一种在光功率极端低的条件下才起作用的杆状体细胞,因此颜色只存在于眼睛和大脑。在计算机图像处理中,杆状细胞还没有扮演什么角色。
人的视觉系统对颜色的感知可归纳出如下几个特性:
眼睛本质上是一个照相机。人的视网膜(human retina)通过神经元来感知外部世界的颜色,每个神经元或者是一个对颜色敏感的锥体(cone),或者是一个对颜色不敏感的杆状体(rod)。
红、绿和蓝三种锥体细胞对不同频率的光的感知程度不同,对不同亮度的感知程度也不同。这就意味着,人们可以使用数字图像处理技术来降低表示图像的数据量而不使人感到图像质量明显下降。
自然界中的任何一种颜色都可以由R,G,B这3种颜色值之和来确定,它们构成一个3维的RGB矢量空间。这就是说,R,G,B的数值不同,混合得到的颜色就不同,也就是光波的波长不同。
5.2 图像的颜色模型颜色模型(color model)是用简单方法描述所有颜色的一套规则和定义,例如RGB,CMY,YCrCb等都是表示颜色的颜色模型。
5.2.1 显示彩色图像用RGB相加混色模型一个能发出光波的物体称为有源物体,它的颜色由该物体发出的光波决定,并且使用RGB相加混色模型。电视机和计算机显示器使用的阴极射线管(cathode ray tube,CRT)就是一个有源物体。CRT使用3个电子枪分别产生红(Red)、绿(Green)和蓝(Blue)三种波长的光,并以各种不同的相对强度综合起来产生颜色,如图5-01所示。组合这三种光波以产生特定颜色就叫做相加混色,因为这种相加混色是利用R,G和B颜色分量产生颜色,所以称为RGB相加混色模型。相加混色是计算机应用中定义颜色的基本方法。
图5-01 彩色显像产生颜色的原理
从理论上讲,任何一种颜色都可用三种基本颜色按不同的比例混合得到。三种颜色的光强越强,到达我们眼睛的光就越多,它们的比例不同,我们看到的颜色也就不同,没有光到达眼睛,就是一片漆黑。当三基色按不同强度相加时,总的光强增强,并可得到任何一种颜色。某一种颜色和这三种颜色之间的关系可用下面的式子来描述:
颜色=R(红色的百分比)+G(绿色的百分比)+B(蓝色的百分比)
当三基色等量相加时,得到白色;等量的红绿相加而蓝为0值时得到黄色;等量的红蓝相加而绿为0时得到品红色;等量的绿蓝相加而红为0时得到青色。这些三基色相加的结果如图5-02所示。
图5-02 相加混色
一幅彩色图像可以看成由许多的点组成的,如图5-03所示。图像中的单个点称为像素(pixel),每个像素都有一个值,称为像素值,它表示特定颜色的强度。一个像素值往往用R,G,B三个分量表示。如果每个像素的每个颜色分量用二进制的1位来表示,那末每个颜色的分量只有“1”和“0”这两个值。这也就是说,每种颜色的强度是100%,或者是0%。在这种情况下,每个像素所显示的颜色是8种可能出现的颜色之一,如表5-01所示。
图5-03 一幅图像由许多像素组成
表5-01相加色
RGB
颜色
000
黑
001
蓝
010
绿
011
青
100
红
101
品红
110
黄
111
白
对于标准的电视图形阵列(Video graphics array,VGA)适配卡的16种标准颜色,其对应的R,G,B值如表5-02所示。在Microsoft公司的Windows中,用代码0~15表示。在表中,代码1~6表示的颜色比较暗,它们是用最大光强值的一半产生的颜色;9~15是用最大光强值产生的。
表5-02 16色VGA调色板的值代码
R
G
B
H
S
L
颜色
0
0
0
0
160
0
0
黑(Black)
1
0
0
128
160
240
60
蓝(Blue)
2
0
128
0
80
240
60
绿(Green)
3
0
128
128
120
240
60
青(Cyan)
4
128
0
0
0
240
60
红(Red)
5
128
0
128
200
240
60
品红(Magenta)
6
128
128
0
40
240
60
褐色(Dark yellow)
7
192
192
192
160
0
180
白(Light gray)
8
128
128
128
160
0
120
深灰(Dark Gray)
9
0
0
255
160
240
120
淡蓝(Light blue)
10
0
255
0
80
240
120
淡绿(Light green)
11
0
255
255
120
240
120
淡青(Light cyan)
12
255
0
0
0
240
120
淡红(Light Red)
13
255
0
255
200
240
120
淡品红(Light Magenta)
14
255
255
0
40
240
120
黄(yellow)
15
255
255
255
160
0
240
高亮白(Bright white)
在表5-02中,每种基色的强度是用8位表示的,因此可产生224=16 777 216种颜色。但实际上要用一千六百多万种颜色的场合是很少的。在多媒体计算机中,除用RGB来表示图像之外,还用色调-饱和度-亮度(hue-saturation-lightness,HSL)颜色模型在HSL模型中,H定义颜色的波长,称为色调;S定义颜色的强度(intensity),表示颜色的深浅程度,称为饱和度;L定义掺入的白光量,称为亮度。用HSL表示颜色的重要性,是因为它比较容易为画家所理解。若把S和L的值设置为1,当改变H时就是选择不同的纯颜色;减小饱和度S时,就可体现掺入白光的效果;降低亮度时,颜色就暗,相当于掺入黑色。因此在Windows中也用了HSL表示法,16色VGA调色板的值也表示在表5-02中。
5.2.2 打印彩色图像用CMY相减混色模型一个不发光波的物体称为无源物体,它的颜色由该物体吸收或者反射哪些光波决定,用CMY相减混色模型。用彩色墨水或颜料进行混合,绘制的图画就是一种无源物体,用这种方法生成的颜色称为相减色。在理论上说,任何一种颜色都可以用三种基本颜料按一定比例混合得到。这三种颜色是青色(Cyan)、品红(Magenta)和黄色(Yellow),通常写成CMY,称为CMY模型。用这种方法产生的颜色之所以称为相减色,乃是因为它减少了为视觉系统识别颜色所需要的反射光。
在相减混色中,当三基色等量相减时得到黑色;等量黄色(Y)和品红(M)相减而青色(C)为0时,得到红色(R);等量青色(C)和品红(M)相减而黄色(Y)为0时,得到蓝色(B);等量黄色(Y)和青色(C)相减而品红(M)为0时,得到绿色(G)。三基色相减结果如图5-04所示。
图5-04 相减混色
彩色打印机采用的就是这种原理,印刷彩色图片也是采用这种原理。按每个像素每种颜色用1位表示,相减法产生的8种颜色如表5-03所示。由于彩色墨水和颜料的化学特性,用等量的三基色得到的黑色不是真正的黑色,因此在印刷术中常加一种真正的黑色(black ink),所以CMY又写成CMYK。
表5-03 相减色青色
品红
黄色
相减色
0
0
0
白
0
0
1
黄
0
1
0
品红
0
1
1
红
1
0
0
青
1
0
1
绿
1
1
0
蓝
1
1
1
黑
相加色与相减色之间有一个直接关系,如表5-04所示。利用它们之间的关系,可以把显示的颜色转换成输出打印的颜色。相加混色和相减混色之间成对出现互补色。例如,当RGB为1∶1∶1时,在相加混色中产生白色,而CMY为1∶1∶1时,在相减混色中产生黑色。从另一个角度也可以看它们的互补性。从表5-04中可以看到,在RGB中的颜色为1的地方,在CMY对应的位置上,其颜色值为0。例如RGB为0∶1∶0时,对应CMY为1∶0∶1。
表5-04 相加色与相减色的关系相加混色
相减混色
生成的颜色
RGB
CMY
000
111
黑
001
110
蓝
010
101
绿
011
100
青
100
011
红
101
010
品红
110
001
黄
111
000
白
5.3 图像的三个基本属性描述一幅图像需要使用图像的属性。图像的属性包含分辨率、像素深度、真/伪彩色、图像的表示法和种类等。本节介绍前面三个特性。
5.3.1 分辨率我们经常遇到的分辨率有两种:显示分辨率和图像分辨率。
1,显示分辨率显示分辨率是指显示屏上能够显示出的像素数目。例如,显示分辨率为640×480表示显示屏分成480行,每行显示640个像素,整个显示屏就含有307200个显像点。屏幕能够显示的像素越多,说明显示设备的分辨率越高,显示的图像质量也就越高。除象手提式那样的计算机用液晶显示LCD(liquid crystal display)外,一般都采用CRT显示,它类似于彩色电视机中的CRT。显示屏上的每个彩色像点由代表R,G,B三种模拟信号的相对强度决定,这些彩色像点就构成一幅彩色图像。
计算机用的CRT和家用电视机用的CRT之间的主要差别是显像管玻璃面上的孔眼掩模和所涂的荧光物不同。孔眼之间的距离称为点距(dot pitch)。因此常用点距来衡量一个显示屏的分辨率。电视机用的CRT的平均分辨率为0.76 mm,而标准SVGA显示器的分辨率为0.28 mm。孔眼越小,分辨率就越高,这就需要更小更精细的荧光点。这也就是为什么同样尺寸的计算机显示器比电视机的价格贵得多的原因。
早期用的计算机显示器的分辨率是0.41 mm,随着技术的进步,分辨率由0.41→0.38→0.35→0.31→0.28一直到0.26 mm以下。显示器的价格主要集中体现在分辨率上,因此在购买显示器时应在价格和性能上综合考虑。
2,图像分辨率图像分辨率是指组成一幅图像的像素密度的度量方法。对同样大小的一幅图,如果组成该图的图像像素数目越多,则说明图像的分辨率越高,看起来就越逼真。相反,图像显得越粗糙。
在用扫描仪扫描彩色图像时,通常要指定图像的分辨率,用每英寸多少点(dots per inch,DPI)表示。如果用300 DPI来扫描一幅8″×10″的彩色图像,就得到一幅2400×3000个像素的图像。分辨率越高,像素就越多。
图像分辨率与显示分辨率是两个不同的概念。图像分辨率是确定组成一幅图像的像素数目,而显示分辨率是确定显示图像的区域大小。如果显示屏的分辨率为640×480,那末一幅320×240的图像只占显示屏的1/4;相反,2400×3000的图像在这个显示屏上就不能显示一个完整的画面。
这里顺便说一下,在显示一幅图像时,有可能会出现图像的宽高比(aspect radio)与显示屏上显示出的图像的宽高比不一致这种现象。这是由于显示设备中定义的宽高比与图像的宽高比不一致造成的。例如一幅200×200像素的方形图,有可能在显示设备上显示的图不再是方形图,而变成了矩形图。这种现象在20世纪80年代的显示设备上经常遇到。
5.3.2 像素深度像素深度是指存储每个像素所用的位数,它也是用来度量图像的分辨率。像素深度决定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数。例如,一幅彩色图像的每个像素用R,G,B三个分量表示,若每个分量用8位,那末一个像素共用24位表示,就说像素的深度为24,每个像素可以是224=16 777 216种颜色中的一种。在这个意义上,往往把像素深度说成是图像深度。表示一个像素的位数越多,它能表达的颜色数目就越多,而它的深度就越深。
虽然像素深度或图像深度可以很深,但各种VGA的颜色深度却受到限制。例如,标准VGA支持4位16种颜色的彩色图像,多媒体应用中推荐至少用8位256种颜色。由于设备的限制,加上人眼分辨率的限制,一般情况下,不一定要追求特别深的像素深度。此外,像素深度越深,所占用的存储空间越大。相反,如果像素深度太浅,那也影响图像的质量,图像看起来让人觉得很粗糙和很不自然。
在用二进制数表示彩色图像的像素时,除R,G,B分量用固定位数表示外,往往还增加1位或几位作为属性(Attribute)位。例如,RGB 5∶5∶5表示一个像素时,用2个字节共16位表示,其中R,G,B各占5位,剩下一位作为属性位。在这种情况下,像素深度为16位,而图像深度为15位。
属性位用来指定该像素应具有的性质。例如在CD-I系统中,用RGB 5∶5∶5表示的像素共16位,其最高位(b15)用作属性位,并把它称为透明(Transparency)位,记为T。T的含义可以这样来理解:假如显示屏上已经有一幅图存在,当这幅图或者这幅图的一部分要重叠在上面时,T位就用来控制原图是否能看得见。例如定义T=1,原图完全看不见;T=0,原图能完全看见。
在用32位表示一个像素时,若R,G,B分别用8位表示,剩下的8位常称为α通道(alpha channel)位,或称为覆盖(overlay)位、中断位或属性位。它的用法可用一个预乘α通道(premultiplied alpha)的例子说明。假如一个像素(A,R,G,B)的四个分量都用规一化的数值表示,(A,R,G,B)为(1,1,0,0)时显示红色。当像素为(0.5,1,0,0)时,预乘的结果就变成(0.5,0.5,0,0),这表示原来该像素显示的红色的强度为1,而现在显示的红色的强度降了一半。
用这种办法定义一个像素的属性在实际中很有用。例如在一幅彩色图像上叠加文字说明,而又不想让文字把图覆盖掉,就可以用这种办法来定义像素,而该像素显示的颜色又有人把它称为混合色(key color)。在图像产品生产中,也往往把数字电视图像和计算机生产的图像混合在一起,这种技术称为视图混合(video keying)技术,它也采用α通道。
5.3.3 真彩色、伪彩色与直接色搞清真彩色、伪彩色与直接色的含义,对于编写图像显示程序、理解图像文件的存储格式有直接的指导意义,也不会对出现诸如这样的现象感到困惑:本来是用真彩色表示的图像,但在VGA显示器上显示的图像颜色却不是原来图像的颜色。
1,真彩色(true color)
真彩色是指在组成一幅彩色图像的每个像素值中,有R,G,B三个基色分量,每个基色分量直接决定显示设备的基色强度,这样产生的彩色称为真彩色。例如用RGB 5∶5∶5表示的彩色图像,R,G,B各用5位,用R,G,B分量大小的值直接确定三个基色的强度,这样得到的彩色是真实的原图彩色。
如果用RGB 8:8:8方式表示一幅彩色图像,就是R,G,B都用8位来表示,每个基色分量占一个字节,共3个字节,每个像素的颜色就是由这3个字节中的数值直接决定,可生成的颜色数就是224 =16 777 216种。用3个字节表示的真彩色图像所需要的存储空间很大,而人的眼睛是很难分辨出这么多种颜色的,因此在许多场合往往用RGB 5:5:5来表示,每个彩色分量占5个位,再加1位显示属性控制位共2个字节,生成的真颜色数目为215 = 32K。
在许多场合,真彩色图通常是指RGB 8:8:8,即图像的颜色数等于224,也常称为全彩色(full color)图像。但在显示器上显示的颜色就不一定是真彩色,要得到真彩色图像需要有真彩色显示适配器,目前在PC上用的VGA适配器是很难得到真彩色图像的。
2,伪彩色(pseudo color)
伪彩色图像的含义是,每个像素的颜色不是由每个基色分量的数值直接决定,而是把像素值当作彩色查找表(color look-up table,CLUT)的表项入口地址,去查找一个显示图像时使用的R,G,B值,用查找出的R,G,B值产生的彩色称为伪彩色。
彩色查找表CLUT是一个事先做好的表,表项入口地址也称为索引号,如图图6-08(c)所示。例如256种颜色的查找表,0号索引对应黑色,...,255号索引对应白色。彩色图像本身的像素数值和彩色查找表的索引号有一个变换关系,这个关系可以使用Windows 95/98定义的变换关系,也可以使用你自己定义的变换关系。使用查找得到的数值显示的彩色是真的,但不是图像本身真正的颜色,它没有完全反映原图的彩色。
3,直接色(direct color)
每个像素值分成R,G,B分量,每个分量作为单独的索引值对它做变换。也就是通过相应的彩色变换表找出基色强度,用变换后得到的R,G,B强度值产生的彩色称为直接色。它的特点是对每个基色进行变换。
用这种系统产生颜色与真彩色系统相比,相同之处是都采用R,G,B分量决定基色强度,不同之处是前者的基色强度直接用R,G,B决定,而后者的基色强度由R,G,B经变换后决定。因而这两种系统产生的颜色就有差别。试验结果表明,使用直接色在显示器上显示的彩色图像看起来真实、很自然。
这种系统与伪彩色系统相比,相同之处是都采用查找表,不同之处是前者对R,G,B分量分别进行变换,后者是把整个像素当作查找表的索引值进行彩色变换。
5.4 图像的种类
5.4.1 矢量图与点位图在计算机中,表达图像和计算机生成的图形图像有两种常用的方法:一种叫做是矢量图(vector based image)法,另一种叫点位图(bit mapped image)法。虽然这两种生成图的方法不同,但在显示器上显示的结果几乎没有什么差别。
矢量图是用一系列计算机指令来表示一幅图,如画点、画线、画曲线、画圆、画矩形等。这种方法实际上是数学方法来描述一幅图,然后变成许多的数学表达式,再编程,用语言来表达。在计算显示图时,也往往能看到画图的过程。绘制和显示这种图的软件通常称为绘图程序(draw programs)。
矢量图有许多优点。例如,当需要管理每一小块图像时,矢量图法非常有效;目标图像的移动、缩小放大、旋转、拷贝、属性的改变(如线条变宽变细、颜色的改变)也很容易做到;相同的或类似的图可以把它们当作图的构造块,并把它们存到图库中,这样不仅可以加速画的生成,而且可以减小矢量图文件的大小。
然而,当图变得很复杂时,计算机就要花费很长的时间去执行绘图指令。此外,对于一幅复杂的彩色照片(例如一幅真实世界的彩照),恐怕就很难用数学来描述,因而就不用矢量法表示,而是采用点位图法表示。
点位图法与矢量图法很不相同。其实,点位图已经在前面几节作了详细介绍,它是把一幅彩色图分成许多的像素,每个像素用若干个二进制位来指定该像素的颜色、亮度和属性。因此一幅图由许多描述每个像素的数据组成,这些数据通常称为图像数据,而这些数据作为一个文件来存储,这种文件又称为图像文件。如要画点位图,或者编辑点位图,则用类似于绘制矢量图的软件工具,这种软件称为画图程序(paint programs)。
点位图的获取通常用扫描仪,以及摄像机、录相机、激光视盘与视频信号数字化卡一类设备,通过这些设备把模拟的图像信号变成数字图像数据。
点位图文件占据的存储器空间比较大。影响点位图文件大小的因素主要有两个:即前面介绍的图像分辨率和像素深度。分辨率越高,就是组成一幅图的像素越多,则图像文件越大;像素深度越深,就是表达单个像素的颜色和亮度的位数越多,图像文件就越大。而矢量图文件的大小则主要取决图的复杂程度。
矢量图与点位图相比,显示点位图文件比显示矢量图文件要快;矢量图侧重于“绘制”、去创造,而点位图偏重于“获取”、去“复制”;矢量图和点位图之间可以用软件进行转换,由矢量图转换成点位图采用光栅化(rasterizing)技术,这种转换也相对容易;由点位图转换成矢量图用跟踪(tracing)技术,这种技术在理论上说是容易,但在实际中很难实现,对复杂的彩色图像尤其如此。
5.4.2 灰度图与彩色图灰度图(gray-scale image)按照灰度等级的数目来划分。只有黑白两种颜色的图像称为单色图像(monochrome image),如图5-05所示的标准图像。图中的每个像素的像素值用1位存储,它的值只有“0”或者“1”,一幅640×480的单色图像需要占据37.5 KB的存储空间。
图5-06是一幅标准灰度图像。如果每个像素的像素值用一个字节表示,灰度值级数就等于256级,每个像素可以是0~255之间的任何一个值,一幅640×480的灰度图像就需要占据300 KB的存储空间。
图5-05 标准单色图 图5-06 标准灰度图
彩色图像(color image)可按照颜色的数目来划分,例如256色图像和真彩色(224=16 777 216种颜色)等。图5-07是一幅用256色标准图像转换成的256级灰度图像,彩色图像的每个像素的R、G和B值用一个字节来表示,一幅640×480的8位彩色图像需要300 KB的存储空间;图5-08是一幅真彩色图像转换成的256级灰度图像,每个像素的R,G,B分量分别用一个字节表示,一幅640×480的真彩色图像需要900 KB的存储空间。
许多24位彩色图像是用32位存储的,这个附加的8位叫做alpha通道,它的值叫做alpha值,它用来表示该像素如何产生特技效果。
使用真彩色表示的图像需要很大的存储空间,在网络传输也很费时间。由于人的视角系统的颜色分辨率不高,因此在没有必要使用真彩色的情况下就尽可能不用。
图5-07 256色标准图像转换成的灰度图
图5-08 24位标准图像转换成的灰度图
5.5 伽马(( )校正
5.5.1 γ的概念如果电子摄像机的输出电压与场景中光的强度成正比,如果CRT发射的光的强度与输入电压成正比,…,凡是生成和显示图像的所有部件都是线性的话,那么图像处理就会变得比较容易,图像程序员也就不会那么辛苦了!然而,现实世界并不是那样,目前几乎所有的CRT显示设备、摄影胶片和许多电子照相机的光电转换特性都是非线性的。幸好这些非线性部件都有一个能够反映各自特性的幂函数,它的一般形式是:
( 输出=(输入)γ
式中的γ(gamma)是幂函数的指数,它用来衡量非线性部件的转换特性。这种特性称为幂-律(power-law)转换特性。按照惯例,“输入”和“输出”都缩放到0~1之间。其中,0表示黑电平,1表示颜色分量的最高电平。对于特定的部件,人们可以度量它的输入与输出之间的函数关系,从而找出γ值。
实际的图像系统是由多个部件组成的,这些部件中可能会有几个非线性部件。如果所有部件都有幂函数的转换特性,那么整个系统的传递函数就是一个幂函数,它的指数γ等于所有单个部件的γ的乘积。如果图像系统的整个(=1,输出与输入就成线性关系。这就意味在重现图像中任何两个图像区域的强度之比率与原始场景的两个区域的强度之比率相同,这似乎是图像系统所追求的目标:真实地再现原始场景。但实际情况却不完全是这样。
当这种再生图像在“明亮环境”下,也就是在其他白色物体的亮度与图像中白色部分的亮度几乎相同的环境下观看时,γ=1的系统的确可使图像看起来像“原始场景”一样。但是某些图像有时在“黑暗环境”下观看所获得的效果会更好,放映电影和投影幻灯片就属于这种情况。在这种情况下,γ值不是等于1而通常认为γ(1.5,人的视角系统所看到的场景就好像是“原始场景”。根据这种观点,投影幻灯片的γ值就设计为1.5左右,而不是1。
还有一种环境称为中间环境的“暗淡环境”,这种环境就像房间中的其他东西能够看到,但比图像中白色部分的亮度更暗。看电视的环境和计算机房的环境就属于这种情况。在这种情况下,通常认为再现图像需要γ(1.25才能看起来像“原始场景”。
5.5.2 γ校正所有CRT显示设备都有幂-律转换特性,如果生产厂家不加说明,那么它的γ值大约等于2.5。用户对发光的磷光材料的特性可能无能为力去改变,因而也很难改变它的γ值。为使整个系统的γ值接近于使用所要求的γ值,起码就要有一个能够提供γ校正的非线性部件,用来补偿CRT的非线性特性。
在所有广播电视系统中,γ校正是在摄像机中完成的。最初的NTSC电视标准需要摄像机具有γ=1/2.2=0.45的幂函数,现在采纳γ=0.5的幂函数。PAL和SECAM电视标准指定摄像机需要具有γ=1/2.8=0.36的幂函数,但这个数值已显得太小,因此实际的摄像机很可能会设置成γ=0.45或者0.5。使用这种摄像机得到的图像就预先做了校正,在γ=2.5的CRT屏幕上显示图像时,屏幕图像相对于原始场景的γ大约等于1.25。这个值适合“暗淡环境”下观看。
过去的时代是“模拟时代”,而今已进入“数字时代”,进入计算机的电视图像依然带有γ=0.5的校正,这一点可不要忘记。虽然带有γ值的电视在数字时代工作得很好,尤其是在特定环境下创建的图像在相同环境下工作,可是在其他环境下工作时,往往会使显示的图像让人看起来显得太亮或者太暗,因此在可能条件下就要做γ校正。
在什么地方做γ校正是人们所关心的问题。从获取图像、存储成图像文件、读出图像文件直到在某种类型的显示屏幕上显示图像,这些个环节中至少有5个地方可有非线性转换函数存在并可引入γ值。例如,
camera_gamma:摄像机中图像传感器的γ(通常γ=0.4或者0.5)
encoding_gamma:编码器编码图像文件时引入γ
decoding_gamma,译码器读图像文件时引入γ
LUT_gamma:图像帧缓存查找表中引入γ
CRT_gamma:CRT的γ(通常γ=2.5)
在数字图像显示系统中,由于要显示的图像不一定就是摄像机来的图像,假设这种图像的γ值等于1,如果encoding_gamma=0.5,CRT_gamma=2.5和decoding_gamma,LUT_gamma都为1.0时,整个系统的γ就近似等于1.25。
根据上面的分析,为了在不同环境下观看到“原始场景”可在适当的地方加入γ校正。
5.6 JPEG压缩编码
5.6.1 JPEG算法概要
JPEG(Joint Photographic Experts Group) 是一个由 ISO和IEC两个组织机构联合组成的一个专家组,负责制定静态的数字图像数据压缩编码标准,这个专家组开发的算法称为JPEG算法,并且成为国际上通用的标准,因此又称为JPEG标准。JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。
JPEG专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换(Discrete Cosine Transform,DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。使用有损压缩算法时,在压缩比为25:1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。例如,在V-CD和DVD-Video电视图像压缩技术中,就使用JPEG的有损压缩算法来取消空间方向上的冗余数据。为了在保证图像质量的前提下进一步提高压缩比,近年来JPEG专家组正在制定JPEG 2000(简称JP 2000)标准,这个标准中将采用小波变换(wavelet)算法。
JPEG压缩是有损压缩,它利用了人的视角系统的特性,使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息。JPEG算法框图如图5-09所示,压缩编码大致分成三个步骤:
使用正向离散余弦变换(forward discrete cosine transform,FDCT)把空间域表示的图变换成频率域表示的图。
使用加权函数对DCT系数进行量化,这个加权函数对于人的视觉系统是最佳的。
使用霍夫曼可变字长编码器对量化系数进行编码。
译码或者叫做解压缩的过程与压缩编码过程正好相反。
JPEG算法与颜色空间无关,因此“RGB到YUV变换”和“YUV到RGB变换”不包含在JPEG算法中。JPEG算法处理的彩色图像是单独的彩色分量图像,因此它可以压缩来自不同颜色空间的数据,如RGB,YCbCr和CMYK。
图5-09 JPEG压缩编码-解压缩算法框图
5.6.2 JPEG算法的主要计算步骤
JPEG压缩编码算法的主要计算步骤如下:
正向离散余弦变换(FDCT)。
量化(quantization)。
Z字形编码(zigzag scan)。
使用差分脉冲编码调制(differential pulse code modulation,DPCM)对直流系数(DC)进行编码。
使用行程长度编码(run-length encoding,RLE)对交流系数(AC)进行编码。
熵编码(entropy coding)。
1,正向离散余弦变换下面对正向离散余弦变换(FDCT)变换作几点说明。
(1) 对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,如图5-10所示,并作为两维离散余弦变换DCT的输入。通过DCT变换,把能量集中在少数几个系数上。
图5-10 离散余弦变换
(2) DCT变换使用下式计算,
,....,(5-1)
它的逆变换使用下式计算,
,....,(5-2)
上面两式中,
C(u),C(v) = 1/,当u,v = 0;
C(u),C(v) = 1,其他。
f(i,j)经DCT变换之后,F(0,0)是直流系数,其他为交流系数。
(3) 在计算两维的DCT变换时,可使用下面的计算式把两维的DCT变换变成一维的DCT变换,
,..........,(5-3)
,...........,(5-4)
图5-11 两维DCT变换方法
实际的计算方法可参看[5]
2,量化量化是对经过FDCT变换后的频率系数进行量化。量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。量化是图像质量下降的最主要原因。
对于有损压缩算法,JPEG算法使用如图5-12所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:如表5-05所示的亮度量化表和表5-06所示的色差量化表。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此图中的左上角的量化步距要比右下角的量化步距小。表5-05和表5-06中的数值对CCIR 601标准电视图像已经是最佳的。如果不使用这两种表,你也可以把把自己的量化表替换它们。
图5-12 均匀量化器
表5-05 亮度量化值表 表5-06 色度量化值
3,Z字形编排量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排,如图5-13所示,DCT系数的序号如图5-14所示,这样就把一个8 ( 8的矩阵变成一个1 ( 64的矢量,频率较低的系数放在矢量的顶部。
图5-13 量化DCT系数的编排
0
1
5
6
14
15
27
28
2
4
7
13
16
26
29
42
3
8
12
17
25
30
41
43
9
11
18
24
31
40
44
53
10
19
23
32
39
45
52
54
20
22
33
38
46
51
55
60
21
34
37
47
50
56
59
61
35
36
48
49
57
58
62
63
图5-14 量化DCT系数的序号
4,直流系数的编码
8 ( 8图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8 ( 8图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲编码调制(DPCM)技术,对相邻图像块之间量化DC系数的差值(Delta)进行编码,
Delta=DC(0,0)k-DC(0,0)k-1 ........ (5-5)
5,交流系数的编码量化AC系数的特点是1 ( 64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。
JPEG使用了1个字节的高4位来表示连续“0”的个数,而使用它的低4位来表示编码下一个非“0”系数所需要的位数,跟在它后面的是量化AC系数的数值。
6,熵编码使用熵编码还可以对DPCM编码后的直流DC系数和RLE编码后的交流AC系数作进一步的压缩。
在JPEG有损压缩算法中,使用霍夫曼编码器来减少熵。使用霍夫曼编码器的理由是可以使用很简单的查表(lookup table)方法进行编码。压缩数据符号时,霍夫曼编码器对出现频度比较高的符号分配比较短的代码,而对出现频度较低的符号分配比较长的代码。这种可变长度的霍夫曼码表可以事先进行定义。
[例5.1] 表5-07所示的是DC码表符号举例。如果DC的值(Value)为4,符号SSS用于表达实际值所需要的位数,实际位数就等于3。
表5-07 DC码表符号举例
Value
SSS
0
0
-1,1
1
-3,-2,2,3
2
-7..-4,4..7
3
7,组成位数据流
JPEG编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样的组织的数据通常称为JPEG位数据流(JPEG bitstream)。
5.6.3 应用JPEG算法举例有关JPEG算法更详细的信息和数据,请参看JPEG标准ISO/IEC 10918。图5-15是使用JPEG算法对一个8×8图像块计算得到的结果。在这个例子中,计算正向离散余弦变换(FDCT)之前对源图像中的每个样本数据减去了128,在逆向离散余弦变换之后对重构图像中的每个样本数据加了128。
图5-15 JPEG压缩编码举例
5.7 图像文件格式本节从大量的图像文件格式中选择了三种常用和一种正在推广使用的图像文件存储格式进行介绍。BMP位图格式是Windows上画图软件(Paint)使用的格式,GIF和JPG是因特网上几乎所有Web浏览器都支持的图像文件格式,使用GIF文件格式的动画软件也得到广泛使用。PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF格式。现在开发的几乎所有的图像处理软件都支持这些格式。
本节简单介绍图像文件的结构,若要编程,则需要仔细阅读本章后面提供的参考文献[6][7][8]。
5.7.1 BMP文件格式
1,简介位图文件(Bitmap-File,BMP)格式是Windows采用的图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。Windows 3.0以前的BMP位图文件格式与显示设备有关,因此把它称为设备相关位图(device-dependent bitmap,DDB)文件格式。Windows 3.0以后的BMP位图文件格式与显示设备无关,因此把这种BMP位图文件格式称为设备无关位图(device-independent bitmap,DIB)格式,目的是为了让Windows能够在任何类型的显示设备上显示BMP位图文件。BMP位图文件默认的文件扩展名是BMP或者bmp。
2,文件结构
BMP位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节(BYTE)阵列,它的组成部分和程序中定义的数据结构名称如表5-08所示。
表5-08 BMP图像文件结构组成部分的名称
数据结构的名称
位图文件头(bitmap-file header)
BITMAPFILEHEADER
位图信息头(bitmap-information header)
BITMAPINFOHEADER
彩色表(color table)
RGBQUAD
图像数据阵列字节
BYTE
位图文件头:用BITMAPFILEHEADER数据结构定义,它包含有关于文件类型、文件大小(用字节为单位)、存放位置(说明从BITMAPFILEHEADER结构开始到实际的图像数据阵列字节之间的字节偏移量)等信息,在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构进行定义。
位图信息头:用BITMAPINFOHEADER数据结构定义,它包含有位图文件的大小、压缩类型和颜色格式。BMP位图可以是没有任何压缩的位图,或者采用行程编码(RLE)进行压缩的位图。颜色格式说明位图所用的颜色数目,2/16/256/16777216种颜色。
彩色表:像素的颜色用RGBQUAD结构来定义。彩色表中的元素与位图所具有的颜色数相同。对于24-位真彩色图像就不使用彩色表,因为位图中的RGB值就代表了每个像素的颜色。彩色表中的颜色按颜色的重要性排序,这可以辅助显示驱动程序为不能显示足够多颜色数的显示设备显示彩色图像。
图像数据阵列字节:紧跟在彩色表之后的是图像数据字节阵列,用BYTE数据结构。图像的每一扫描行由表示图像的连续的像素字节组成,每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度。扫描行是由底向上存储的,这就是说,阵列中的第一个字节表示位图左下角的像素,而最后一个字节表示位图右上角的像素。
5.7.2 GIF文件格式
1,简介
GIF(Graphics Interchange Format)是CompuServe公司开发的图像文件存储格式,1987年开发的GIF文件格式版本号是GIF87a,1989年进行了扩充,扩充后的版本号定义为GIF89a。
GIF图像文件以数据块(block)为单位来存储图像的相关信息。一个GIF文件由表示图形/图像的数据块、数据子块以及显示图形/图像的控制信息块组成,称为GIF数据流(Data Stream)。数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件结束块(Trailer)之间。
GIF文件格式采用了LZW(Lempel-Ziv Walch)压缩算法来存储图像数据,定义了允许用户为图像设置背景的透明(transparency)属性。此外,GIF文件格式可在一个文件中存放多幅彩色图形/图像。如果在GIF文件中存放有多幅图像,它们可以像演幻灯片那样显示或者像动画那样演示。
2,文件结构
GIF文件结构的典型结构如图5-16所示。
1
Header
GIF文件头
2
Logical Screen Descriptor
逻辑屏幕描述块
3
Global Color Table
全局彩色表
… 扩展模块(任选) …
4
Image Descriptor
图形描述块
5
Local Color Table
局部彩色表(可重复n次)
可
6
Table Based Image Data
表示压缩图像数据
重
7
Graphic Control Extension
图像控制扩展块
复
8
Plain Text Extension
无格式文本扩展块
n
9
Comment Extension
注释扩展块
个
10
Applicaton Extension
应用程序扩展块
… 扩展模块(任选) …
11
GIF Trailer
GIF文件结束块
图5-16 GIF文件结构
数据块可分成3类:控制块(Control Block),图形描绘块(Graphic-Rendering Block)和专用块(Special Purpose Block)。
控制块:控制块包含有用来控制数据流(Data Stream)或者设置硬件参数的信息,其成员包括:
GIF文件头(Header)
逻辑屏幕描述块(Logical Screen Descriptor)
图形控制扩展块(Graphic Control Extension)
文件结束块(Trailer)
图形描绘块:包含有用来描绘在显示设备上显示图形的信息和数据,其成员包括:
图像描述块(Image Descriptor)
无格式文本扩展块(Plain Text Extension)
特殊用途数据块,包含有与图像处理无关的信息,其成员包括:
注释扩展块(Comment Extension)
应用扩展块(Application Extension)
除了在控制块中的逻辑屏幕描述块(Logical Screen Descriptor)和全局彩色表(Global Color Table)的作用范围是整个数据流(Data Stream)之外,所有其他控制块仅控制跟在它们后面的图形描绘块。
5.7.3 JPEG格式
1,简介
JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。直到1998年12月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEG File Interchange Format,JFIF),版本号为1.02。这是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外还有TIFF JPEG等格式,但由于这种格式比较复杂,因此大多数应用程序都支持JFIF文件交换格式。
JPEG文件使用的颜色空间是1982年推荐的电视图像信号数字化标准CCIR 601,现改为ITU-R BT.601(详见第7章中的7.4.5)。在这个彩色空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。从RGB转换成YCbCr空间时,使用下面的精确的转换关系:
其中亮度电平和色差电平和分别是CCIR 601定义的参数。由于的范围是0~1,和的范围是-0.5~+0.5,因此,和的最大值必须要箝到255。当和,,分量都用8位表示,并且它们的取值范围均为[0,255]时,RGB和YCbCr之间的转换关系按照下面的方法计算[12]。
(1) 从RGB转换成YCbCr
YCbCr分量,[0,255],可直接从用8位表示的RGB分量计算得到:
需要注意的是不是所有图像文件格式都按照的次序存储样本数据,因此在RGB文件转换成JFIF文件时需要首先验证的次序。
(2) 从YCbCr转换成RGB
RGB分量可直接从YCbCr分量,[0,255],计算得到:
在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中的第一个图像样本是图像左上角的样本。
此外,微处理机中的数据存放顺序有正序(big endian)和逆序(little endian)之分。正序存放就是高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后。例如,十六进制数为A02B,正序存放就是A02B,逆序存放就是2BA0。摩托罗拉(Motorola)公司的微处理器使用正序存放,而英特尔(Intel)公司的微处理器使用逆序。JPEG文件中的字节是按照正序排列的。
2,文件结构
JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上的JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记:
SOI? 0xD8
图像开始
APP0 0xE0
JFIF应用数据块
APPn 0xE1 ~ 0xEF
其他的应用数据块(n,1~15)
DQT? 0xDB
量化表
SOF0 0xC0
帧开始
DHT? 0xC4
霍夫曼(Huffman)表
SOS? 0xDA
扫描线开始
EOI? 0xD9
图像结束
在JPEG文件存储格式中,每一个标记都是JPEG文件的一个部分,因此JPEG文件实际上就是由上述的8个部分组成。
5.7.4 PNG格式
1,简介
PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG's Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。
PNG文件格式保留GIF文件格式的下列特性:
使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。
流式读/写性能(streamability):图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像。
逐次逼近显示(progressive display):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。
透明性(transparency):这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。
辅助信息(ancillary information):这个特性可用来在图像文件中存储一些文本注释信息。
独立于计算机软硬件环境。
使用无损压缩。
PNG文件格式中要增加下列GIF文件格式所没有的特性:
每个像素为48位的真彩色图像。
每个像素为16位的灰度图像。
可为灰度图和真彩色图添加α通道。
添加图像的γ信息。
使用循环冗余码(cyclic redundancy code,CRC)检测损害的文件。
加快图像显示的逐次逼近显示方式。
标准的读/写工具包。
2,文件结构
PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。
PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。
(1) PNG文件署名域
8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:
十进制数
137
80
78
71
13
10
26
10
十六进制数
89
50
4e
47
0d
0a
1a
0a
(2) 数据块的结构每个数据块都由表5-09所示的的4个域组成。
表5-09 PNG文件数据块的结构名称
字节数
说明
Length(长度)
4字节
指定数据块中数据域的长度,其长度不超过
(231-1)字节
Chunk Type Code(数据块类型码)
4字节
数据块类型码由ASCII字母(A-Z和a-z)组成
Chunk Data(数据块数据)
可变长度
存储按照Chunk Type Code指定的数据
CRC(循环冗余检测)
4字节
存储用来检测是否有错误的循环冗余码
在表5-09中,CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC具体算法定义在ISO 3309和ITU-T V.42中,其值按下面的CRC码生成多项式进行计算:
5.8 图像文件后缀一览表文件格式是存储文本、图形或者图像数据的一种数据结构。在文字处理中,存储文本文件要使用文件格式。例如,使用微软公司的Word处理器编写的文件,可根据不同的应用环境用不同的格式存储。如果使用多信息文本格式(Rich Text Format,RTF)存储,这个文件就可在其他的平台(如Mac机)或者使用其他的字处理器进行处理。同样,存储图像也需要有存储格式,从20世纪70年代图像开始进入计算机以来,开发了许许多多的图像文件存储格式,而且互相不兼容,需要使用针对特定格式的处理软件。现在都意识到,不兼容的格式给用户造成很多的不便,因此有些格式也逐渐被淘汰。
在计算机中,有矢量图和点位图两种类型的图。矢量图是用数学方法描述的一系列点、线、弧和其他几何形状,如图517(a)所示。因此存放这种图使用的格式称为矢量图格式,存储的数据主要是绘制图形的数学描述;点位图也称光栅图(raster graphics),这种图是由像点组成的,如图517(b),因此存放这种图使用的格式称为点位图格式,存储的数据是描述像素的数值。
图517 矢量图与位映像图除了本章介绍的4种常用格式之外,在我们的工作中还会遇到其他图像格式。为方便查阅,现将部分图形与图像文件的后缀和名称列在表5-10和表5-11中。如果编写程序需要很专业的图像格式资源,包括一些源程序,可以访问站点:
http://www.wotsit.org/
你可饱览多媒体世界中的各种媒体的存储格式。
表5-10 位映像图格式/光栅图光栅(bitmapped formats / raster graphics)
后缀
文件名称
后缀
文件名称
AG4
Access G4 document imaging
JFF
JPEG (JFIF)
ATT
AT&T Group IV
JPG
JPEG
BMP
Windows & OS/2
KFX
Kofax Group IV
CAL
CALS Group IV
MAC
MacPaint
CIT
Intergraph scanned images
MIL
Same as GP4 extension
CLP
Windows Clipboard
MSP
Microsoft Paint
CMP
Photomatrix G3/G4 scanner format
NIF
Navy Image File
CMP
LEAD Technologies
PBM
Portable bitmap
CPR
Knowledge Access
PCD
PhotoCD
CT
Scitex Continuous Tone
PCX
PC Paintbrush
CUT
Dr,Halo
PIX
Inset Systems (HiJaak)
DBX
DATABEAM
PNG
Portable Network Graphics
DX
Autotrol document imaging
PSD
Photoshop native format
ED6
EDMICS (U.S,DOD)
RAS
Sun
EPS
Encapsulated PostScript
RGB
SGI
FAX
Fax
RIA
Alpharel Group IV document imaging
FMV
FrameMaker
RLC
Image Systems
GED
Arts & Letters
RLE
Various RLE-compressed formats
GDF
IBM GDDM format
RNL
GTX Runlength
GIF
CompuServe
SBP
IBM StoryBoard
GP4
CALS Group IV - ITU Group IV
SGI
Silicon Graphics RGB
GX1
Show Partner
SUN
Sun
GX2
Show Partner
TGA
Targa
ICA
IBM IOCA (see MO:DCA)
TIF
TIFF
ICO
Windows icon
WPG
WordPerfect image
IFF
Amiga ILBM
XBM
X Window bitmap
IGF
Inset Systems (HiJaak)
XPM
X Window pixelmap
IMG
GEM Paint
XWD
X Window dump
表5-11 矢量图格式(vector graphics formats)
后缀
文件名称
后缀
文件名称
3DS
3D Studio
GEM
GEM proprietary
906
Calcomp plotter
G4
GTX RasterCAD - scanned images
into vectors for AutoCAD
AI
Adobe Illustrator
IGF
Inset Systems (HiJaak)
CAL
CALS subset of CGM
IGS
IGES
CDR
CorelDRAW
MCS
MathCAD
CGM
Computer Graphics Metafile
MET
OS/2 metafile
CH3
Harvard Graphics chart
MRK
Informative Graphics markup file
CLP
Windows clipboard
P10
Tektronix plotter (PLOT10)
CMX
Corel Metafile Exchange
PCL
HP LaserJet
DG
Autotrol
PCT
Macintosh PICT drawings
DGN
Intergraph drawing format
PDW
HiJaak
DRW
Micrografx Designer 2.x,3.x
PGL
HP plotter
DS4
Micrografx Designer 4.x
PIC
Variety of picture formats
DSF
Micrografx Designer 5.x
PIX
Inset Systems (HiJaak)
DXF
AutoCAD
PLT
HPGL Plot File (HPGL2 has raster format)
DWG
AutoCAD
PS
PostScript Level 2
EMF
Enhanced metafile
RLC
Image Systems "CAD Overlay ESP"
vector files overlaid onto raster images
EPS
Encapsulated PostScript
SSK
SmartSketch
ESI
Esri plot file (GIS mapping)
WMF
Windows Metafile
FMV
FrameMaker
WPG
WordPerfect graphics
GCA
IBM GOCA
WRL
VRML
练习与思考题
什么叫做真彩色和伪彩色?
分别用3,3和2位表示的一幅图像,问该幅图像的颜色数目最多是多少?
如果有一幅256色的图像,问该图的颜色深度是多少?
按照JPEG标准的要求,一幅彩色图像经过JPEG压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,问此时的最大压缩比是多少?
JPEG压缩编码算法的主要计算步骤是:①DCT变换,②量化,③Z字形编码,④使用DPCM对直流系数(DC)进行编码,⑤使用RLE对交流系数(AC)进行编码,⑥熵编码。假设计算机的精度足够高,问在上述计算方法中,哪些计算对图像的质量是有损的?哪些计算对图像的质量是无损的?
什么叫做γ校正?在计算机中找一幅彩色图像,使用Microsoft Office 97/2000中的Microsoft Photo Editor或者其他图像处理软件显示该图像,然后使用γ校正功能修改γ值,观察图像有什么变化。
什么叫做α通道?它的作用是什么?
在计算机中找一幅像素深度为24的彩色图像,使用Office 97/2000中的Microsoft Photo Editor或者其他图像处理软件显示该图像,然后用GIF格式存储,再显示GIF图像。观察图像有什么变化,并分析其原因。
PNG图像文件格式的主要特点是什么?
通过调查、试验和分析,把BMP,GIF,JFIF和PNG格式的一些特性填入下表。
图像格式名称
是不是有损压缩
支持的最大颜色数
BMP
GIF
JFIF
PNG
参考文献和站点
Natravali,A.N.and Haskell,B.G.,Digital Pictures-Representation and Compression,Plenum Press,New York and London,1988.
ISO/IEC JTC 1,DIS 10918-1,Digital Compression and Coding of Continuous-Tone still Image Part 1,Requirements and Guidelines,July 1992
γ校正:http://www.inforamp.net/~poynton/ (浏览日期:2001年12月)
Wallace,G.,The JPEG still Picture Compression Standard,Communications of the ACM,Vol.34,No.4,Apr.1991
C,Loeffler,A,Ligtenberg and G,Moschytz,Practical Fast 1-D DCT Algorithms with 11 Multiplications,Proc,Int'l,Conf,on Acoustics,Speech,and Signal Processing,1989 (ICASSP’ 89),pp988-991
文件格式参考:
各种格式:http://www.wotsit.org/ (重访日期:2001年12月)
位图格式:http://www.cica.indiana.edu/graphics/image_specs/bmp.format.txt (重访日期:2001年12月)
http://www.libpng.org/pub/png/ (重访日期:2001年12月)
地张维谷 小宇宙工作室著,林福宗 改编,图像文件格式(上、下)—Windows编程,北京:清华大学出版社出版,1996年9月
Ziv,J,and Lempel,A.,A Universal Algorithm for Sequential Data Compression,IEEE Transactions on Information Theory,May 1977
Welch,T,A Technique for High-Performance Data Compression,Computer,June 1984.
Nelson,M.R,LZW Data Compression,Dr,Dobb's Journal,October 1989
Eric Hamilton,PEG File Interchange Format,Version 1.02,September 1,1992,C-Cube Microsystems.