第5章 彩色数字图像基础

 图像是多媒体中携带信息的极其重要的媒体,有人发表过统计资料,认为人们获取的信息的70%来自视觉系统,实际就是图像和电视。但是,图像数字化之后的数据量非常大,在因特网上传输时很费时间,在盘上存储时很占“地盘”,因此就必须要对图像数据进行压缩。压缩的目的就是要满足存储容量和传输带宽的要求,而付出的代价是大量的计算。几十年来,许多科技工作者一直在孜孜不倦地寻找更有效的方法,用比较少的数据量表达原始的图像。
  图像数据压缩主要根据下面两个基本事实来实现的。一个是图像数据中有许多重复的数据,使用数学方法来表示这些重复数据就可以减少数据量;另一个事实是人的眼睛对图像细节和颜色的辨认有一个极限,把超过极限的部分去掉,这也就达到压缩数据的目的。利用前一个事实的压缩技术就是无损压缩技术,利用后一个事实的压缩技术就是有损压缩技术。实际的图像压缩是综合使用各种有损和无损压缩技术来实现的。
  为了了解人的视觉系统如何认识彩色、计算机系统中如何表示彩色图像从而更有效地减少数据量,本章将介绍表示数字彩色图像所需要的最基本的常识,以及目前使用得相当广泛的JPEG压缩标准。

5.1 视角系统对颜色的感知

  颜色是视觉系统对可见光的感知结果。可见光是波长在380 nm~780 nm之间的电磁波,我们看到的大多数光不是一种波长的光,而是由许多不同波长的光组合成的。研究表明,人的视网膜有对红、绿、蓝颜色敏感程度不同的三种锥体细胞,另外还有一种在光功率极端低的条件下才起作用的杆状体细胞,因此颜色只存在于眼睛和大脑。在计算机图像处理中,杆状细胞还没有扮演什么角色。人的视觉系统对颜色的感知可归纳出如下几个特性:
  1.眼睛本质上是一个照相机。人的视网膜(human retina)通过神经元来感知外部世界的颜色,每个神经元或者是一个对颜色敏感的锥体(cone),或者是一个对颜色不敏感的杆状体(rod)。
  2.红、绿和蓝三种锥体细胞对不同频率的光的感知程度不同,对不同亮度的感知程度也不同,如图5-01所示。这就意味着,人们可以使用数字图像处理技术来降低数据率而不使人感到图像质量明显下降。


图5-01 视觉系统对颜色和亮度的响应特性[1][3]

  3.自然界中的任何一种颜色都可以由R,G,B这3种颜色值之和来确定,它们构成一个3维的RGB矢量空间。这就是说,R,G,B的数值不同混合得到的颜色就不同,也就是光波的波长不同。图5-02表示,使用基色波长为700 nm(红色)、546.1 nm(绿色)和435.8 nm(蓝色)时,在可见光范围里,相加混色产生某一波长的光波所需要的三种基色的数值。图中的纵坐标表示标称单位光强度,横坐标表示波长,负值表示某些波长(即颜色)不能精确地通过相加混色得到。使用等量的三基色可匹配等能量的白光。


图5-02 产生波长不同的光所需要的三基色值[1]

5.2 图像的颜色模型

  一个能发出光波的物体称为有源物体,它的颜色由该物体发出的光波决定,使用RGB相加混色模型;一个不发光波的物体称为无源物体,它的颜色由该物体吸收或者反射哪些光波决定,用CMY相减混色模型。

5.2.1 显示彩色图像用RGB相加混色模型

  电视机和计算机显示器使用的阴极射线管(cathode raytube,CRT)是一个有源物体。CRT使用3个电子枪分别产生红(Red)、绿(Green)和蓝(Blue)三种波长的光,并以各种不同的相对强度综合起来产生颜色,如图5-03所示。组合这三种光波以产生特定颜色称为相加混色,称为RGB相加模型。相加混色是计算机应用中定义颜色的基本方法。


图5-03 彩色显象管产生颜色的原理

  从理论上讲,任何一种颜色都可用三种基本颜色按不同的比例混合得到。三种颜色的光强越强,到达我们眼睛的光就越多,它们的比例不同,我们看到的颜色也就不同,没有光到达眼睛,就是一片漆黑。当三基色按不同强度相加时,总的光强增强,并可得到任何一种颜色。某一种颜色和这三种颜色之间的关系可用下面的式子来描述:
  颜色=R(红色的百分比)+G(绿色的百分比)+B(蓝色的百分比)
  当三基色等量相加时,得到白色;等量的红绿相加而蓝为0值时得到黄色;等量的红蓝相加而绿为0时得到品红色;等量的绿蓝相加而红为0时得到青色。这些三基色相加的结果如图5-04所示。

  
图5-04 相加混色

  一幅彩色图像可以看成由许多的点组成的,如图5-05所示。图像中的单个点称为像素(pixel),每个像素都有一个值,称为像素值,它表示特定颜色的强度。一个像素值往往用R,G,B三个分量表示。如果每个像素的每个颜色分量用二进制的1位来表示,那末每个颜色的分量只有“1”和“0”这两个值。这也就是说,每种颜色的强度是100%,或者是0%。在这种情况下,每个像素所显示的颜色是8种可能出现的颜色之一,如表5-01所示。


图5-05 一幅图像由许多像素组成

表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

1

0

0

128

160

240

60

2

0

128

0

80

240

60

3

0

128

128

120

240

60

4

128

0

0

0

240

60

5

128

0

128

200

240

60

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

14

255

255

0

40

240

120

 黄(yellow)

15

255

255

255

160

0

240

 高亮白(Bright white)

 淡品红(Light Magenta)

 品红(Magenta)

 红(Red)

 青(Cyan)

 绿(Green)

 蓝(Blue)

   

 黑(Black)

  在表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相减混色模型

  用彩色墨水或颜料进行混合,这样得到的颜色称为相减色。在理论上说,任何一种颜色都可以用三种基本颜料按一定比例混合得到。这三种颜色是青色(Cyan)、品红(Magenta)和黄色(Yellow),通常写成CMY,称为CMY模型。用这种方法产生的颜色之所以称为相减色,乃是因为它减少了为视觉系统识别颜色所需要的反射光。
  在相减混色中,当三基色等量相减时得到黑色;等量黄色(Y)和品红(M)相减而青色(C)为0时,得到红色(R);等量青色(C)和品红(M)相减而黄色(Y)为0时,得到蓝色(B);等量黄色(Y)和青色(C)相减而品红(M)为0时,得到绿色(G)。这些三基色相减结果如图5-06所示。

  
图5-06 相减混色

  彩色打印机采用的就是这种原理,印刷彩色图片也是采用这种原理。按每个像素每种颜色用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

  RGB彩色空间和CMY彩色空间也可以使用图5-07所示的立方体来表示。


图5-07 RGB彩色空间和CMY彩色空间的表示法

5.3 彩色空间的线性变换标准

  为了使用人的视角特性以降低数据量,通常把RGB空间表示的彩色图像变换到其他彩色空间。目前采用的彩色空间变换有三种:YIQ, YUV和YCrCb。每一种彩色空间都产生一种亮度分量信号和两种色度分量信号,而每一种变换使用的参数都是为了适应某种类型的显示设备。其中,YIQ适用于NTSC彩色电视制式,YUV适用于PAL和SECAM彩色电视制式,而YCrCb适用于计算机用的显示器。

5.3.1 YUV与YIQ模型

  在彩色电视制式中,使用YUV和YIQ模型来表示彩色图像。在PAL彩色电视制式中使用YUV模型,其中的YUV不是那几个英文单词的组合词,而是符号,Y表示亮度,UV用来表示色差,U、V是构成彩色的两个分量;在NTSC彩色电视制式中使用YIQ模型,其中的Y表示亮度,I、Q是两个彩色分量。
  YUV表示法的重要性是它的亮度信号(Y)和色度信号(U、V)是相互独立的,也就是Y信号分量构成的黑白灰度图与用U、V信号构成的另外两幅单色图是相互独立的。由于Y、U、V是独立的,所以可以对这些单色图分别进行编码。此外,黑白电视能接收彩色电视信号也就是利用了YUV分量之间的独立性。
  YUV表示法的另一个优点是可以利用人眼的特性来降低数字彩色图像所需要的存储容量。人眼对彩色细节的分辨能力远比对亮度细节的分辨能力低。若把人眼刚能分辨出的黑白相间的条纹换成不同颜色的彩色条纹,那末眼睛就不再能分辨出条纹来。由于这个原因,就可以把彩色分量的分辨率降低而不明显影响图像的质量,因而就可以把几个相邻像素不同的彩色值当作相同的彩色值来处理,从而减少所需的存储容量。
  例如,要存储RGB 8∶8∶8的彩色图像,即R、G和B分量都用8位二进制数表示,图像的大小为640×480像素,那末所需要的存储容量为921 600字节。如果用YUV来表示同一幅彩色图像,Y分量仍然为640×480,并且Y分量仍然用8位表示,而对每四个相邻像素(2×2)的U、V值分别用相同的一个值表示,那末存储同样的一幅图像所需的存储空间就减少到460 800字节。这实际上也是图像压缩技术的一种方法。
  无论是用YIQ、YUV和YCrCb还是用HSL模型来表示彩色图像,由于现在所有的显示器都采用RGB值来驱动,这就要求在显示每个像素之前,须要把彩色分量值转换成RGB值。这种转换需要花费大量的计算时间。这是一个要在软硬件设计中需要综合考虑的因素。

5.3.2 YUV与RGB彩色空间变换

  在考虑人的视觉系统和阴极射线管(CRT)的非线性特性之后,RGB和YUV的对应关系可以近似地用下面的方程式表示:
   Y = 0.299R + 0.587G + 0.114B
   U = - 0.147R- 0.289G + 0.436B
   V = 0.615R - 0.515G - 0.100B
  或者写成矩阵的形式,
   

5.3.3 YIQ与RGB彩色空间变换

  RGB和YIQ的对应关系用下面的方程式表示:
   Y = 0.299R + 0.587G + 0.114B
   I = 0.596R - 0.275G - 0.321B
   Q = 0.212R - 0.523G + 0.311B
  或者写成矩阵的形式,
   

5.3.4 YCrCb与RGB彩色空间变换

  数字域中的彩色空间变换与模拟域的彩色空间变换不同。它们的分量使用Y、Cr和Cb来表示,与RGB空间的转换关系如下:
   Y=0.299R+0.578G+0.114B
   Cr=(0.500R-0.4187G-0.0813B)+128
   Cb=(-0.1687R-0.3313G+0.500B)+128
  或者写成矩阵的形式,
   
  RGB与YCrCb之间的变换关系可写成如下的形式:
   

5.4 图像的三个基本属性

  描述一幅图像需要使用图像的属性。图像的属性包含分辨率、像素深度、真/伪彩色、图像的表示法和种类等。本节介绍前面三个特性。

5.4.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,DIP)表示。如果用300 DIP来扫描一幅8″×10″的彩色图像,就得到一幅2400×3000个像素的图像。分辨率越高,像素就越多。
  图像分辨率与显示分辨率是两个不同的概念。图像分辨率是确定组成一幅图像的像素数目,而显示分辨率是确定显示图像的区域大小。如果显示屏的分辨率为640×480,那末一幅320×240的图像只占显示屏的1/4;相反,2400×3000的图像在这个显示屏上就不能显示一个完整的画面。
  这里顺便说一下,在显示一幅图像时,有可能会出现图像的宽高比(aspect radio)与显示屏上显示出的图像的宽高比不一致这种现象。这是由于显示设备中定义的宽高比与图像的宽高比不一致造成的。例如一幅200×200像素的方形图,有可能在显示设备上显示的图不再是方形图,而变成了矩形图。这种现象在20世纪80年代的显示设备上经常遇到。

5.4.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.4.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个字节中的数值直接决定,如图5-08(a)所示,可生成的颜色数就是224=16 777 216种。用3个字节表示的真彩色图像所需要的存储空间很大,而人的眼睛是很难分辨出这么多种颜色的,因此在许多场合往往用RGB 5:5:5来表示,每个彩色分量占5个位,再加1位显示属性控制位共2个字节,生成的真颜色数目为215 = 32K。
  在许多场合,真彩色图通常是指RGB 8:8:8,即图像的颜色数等于224,也常称为全彩色(full color)图像。但在显示器上显示的颜色就不一定是真彩色,要得到真彩色图像需要有真彩色显示适配器,目前在PC上用的VGA适配器是很难得到真彩色图像的。


图5-08 真彩色和伪彩色图像之间的差别

  2. 伪彩色(pseudo color)

5.5 图像的种类

5.5.1 矢量图与点位图

  在计算机中,表达图像和计算机生成的图形图像有两种常用的方法:一种叫做是矢量图(vector based imgc5)法,另一种叫点位图(bit mapped imgc5)法。虽然这两种生成图的方法不同,但在显示器上显示的结果几乎没有什么差别。
  矢量图是用一系列计算机指令来表示一幅图,如画点、画线、画曲线、画圆、画矩形等。这种方法实际上是数学方法来描述一幅图,然后变成许多的数学表达式,再编程,用语言来表达。在计算显示图时,也往往能看到画图的过程。绘制和显示这种图的软件通常称为绘图程序(draw programs)。
  矢量图有许多优点。例如,当需要管理每一小块图像时,矢量图法非常有效;目标图像的移动、缩小放大、旋转、拷贝、属性的改变(如线条变宽变细、颜色的改变)也很容易做到;相同的或类似的图可以把它们当作图的构造块,并把它们存到图库中,这样不仅可以加速画的生成,而且可以减小矢量图文件的大小。
  然而,当图变得很复杂时,计算机就要花费很长的时间去执行绘图指令。此外,对于一幅复杂的彩色照片(例如一幅真实世界的彩照),恐怕就很难用数学来描述,因而就不用矢量法表示,而是采用点位图法表示。
  点位图法与矢量图法很不相同。其实,点位图已经在前面几节作了详细介绍,它是把一幅彩色图分成许多的像素,每个像素用若干个二进制位来指定该像素的颜色、亮度和属性。因此一幅图由许多描述每个像素的数据组成,这些数据通常称为图像数据,而这些数据作为一个文件来存储,这种文件又称为图像文件。如要画点位图,或者编辑点位图,则用类似于绘制矢量图的软件工具,这种软件称为画图程序(paint programs)。
  点位图的获取通常用扫描仪,以及摄像机、录相机、激光视盘与视频信号数字化卡一类设备,通过这些设备把模拟的图像信号变成数字图像数据。
  点位图文件占据的存储器空间比较大。影响点位图文件大小的因素主要有两个:即前面介绍的图像分辨率和像素深度。分辨率越高,就是组成一幅图的像素越多,则图像文件越大;像素深度越深,就是表达单个像素的颜色和亮度的位数越多,图像文件就越大。而矢量图文件的大小则主要取决图的复杂程度。
  矢量图与点位图相比,显示点位图文件比显示矢量图文件要快;矢量图侧重于“绘制”、去创造,而点位图偏重于“获取”、去“复制”;矢量图和点位图之间可以用软件进行转换,由矢量图转换成点位图采用光栅化(rasterizing)技术,这种转换也相对容易;由点位图转换成矢量图用跟踪(tracing)技术,这种技术在理论上说是容易,但在实际中很难实现,对复杂的彩色图像尤其如此。

5.5.2 灰度图与彩色图

  灰度图(gray-scale imgc5)按照灰度等级的数目来划分。只有黑白两中颜色的图像称为单色图像(monochrome imgc5),如图5-09所示的标准图像。图中的每个像素的像素值用1位存储,它的值只有“0”或者“1”,一幅640×480的单色图像需要占据37.5 KB的存储空间。
  图5-10是一幅标准灰度图像。如果每个像素的像素值用一个字节表示,灰度值级数就等于256级,每个像素可以是0~255之间的任何一个值,一幅640×480的灰度图像就需要占据300 KB的存储空间。

 
图5-09 标准单色图 图5-10 标准灰度图

  彩色图像(color imgc5)可按照颜色的数目来划分,例如256色图像和真彩色(224=16 777 216种颜色)等。图5-11是一幅用256色标准图像转换成的256级灰度图像,彩色图像的每个像素的R、G和B值用一个字节来表示,一幅640×480的8位彩色图像需要307.2 KB的存储空间;图5-12是一幅真彩色图像转换成的256级灰度图像,每个像素的R,G,B分量分别用一个字节表示,一幅640×480的真彩色图像需要921.6 KB的存储空间。
  许多24位彩色图像是用32位存储的,这个附加的8位叫做alpha通道,它的值叫做alpha值,它用来表示该像素如何产生特技效果。
  使用真彩色表示的图像需要很大的存储空间,在网络传输也很费时间。由于人的视角系统的颜色分辨率不高,因此在没有必要使用真彩色的情况下就尽可能不用。


图5-11 256色标准图像转换成的灰度图


图5-12 24位标准图像转换成的灰度图

5.6 伽马(g )校正

5.6.1 γ的概念

  如果电子摄像机的输出电压与场景中光的强度成正比,如果CRT发射的光的强度与输入电压成正比,…,凡是生成和显示图像的所有部件都是线性的话,那么图像处理就会变得比较容易,图像程序员也就不会那么辛苦了!然而,现实世界并不是那样,目前几乎所有的CRT显示设备、摄影胶片和许多电子照相机的光电转换特性都是非线性的。幸好这些非线性部件都有一个能够反映各自特性的幂函数,它的一般形式是:
   y=xn > 输出=(输入)γ
  式中的γ(gamma)是幂函数的指数,它用来衡量非线性部件的转换特性。这种特性称为幂-律(power-law)转换特性。按照惯例,“输入”和“输出”都缩放到0~1之间。其中,0表示黑电平,1表示颜色分量的最高电平。对于特定的部件,人们可以度量它的输入与输出之间的函数关系,从而找出γ值。
  实际的图像系统是由多个部件组成的,这些部件中可能会有几个非线性部件。如果所有部件都有幂函数的转换特性,那么整个系统的传递函数就是一个幂函数,它的指数γ等于所有单个部件的γ的乘积。如果图像系统的整个g =1,输出与输入就成线性关系。这就意味在重现图像中任何两个图像区域的强度之比率与原始场景的两个区域的强度之比率相同,这似乎是图像系统所追求的目标:真实地再现原始场景。但实际情况却不完全是这样。
  当这种再生图像在“明亮环境”下,也就是在其他白色物体的亮度与图像中白色部分的亮度几乎相同的环境下观看时,γ=1的系统的确可使图像看起来像“原始场景”一样。但是某些图像有时在“黑暗环境”下观看所获得的效果会更好,放映电影和投影幻灯片就属于这种情况。在这种情况下,γ值不是等于1而通常认为γ≈ 1.5,人的视角系统所看到的场景就好像是“原始场景”。根据这种观点,投影幻灯片的γ值就设计为1.5左右,而不是1。
  还有一种环境称为中间环境的“暗淡环境”,这种环境就像房间中的其他东西能够看到,但比图像中白色部分的亮度更暗。看电视的环境和计算机房的环境就属于这种情况。在这种情况下,通常认为再现图像需要γ» 1.25才能看起来像“原始场景”。

5.6.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.7 JPEG压缩编码

5.7.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-13所示,压缩编码大致分成三个步骤:
  1.使用正向离散余弦变换(forward discrete cosinetransform,FDCT)把空间域表示的图变换成频率域表示的图。
  2.使用加权函数对DCT系数进行量化,这个加权函数对于人的视觉系统是最佳的。
  3.使用霍夫曼可变字长编码器对量化系数进行编码。
  译码或者叫做解压缩的过程与压缩编码过程正好相反。
  JPEG算法与彩色空间无关,因此“RGB到YUV变换”和“YUV到RGB变换”不包含在JPEG算法中。JPEG算法处理的彩色图像是单独的彩色分量图像,因此它可以压缩来自不同彩色空间的数据,如RGB, YCbCr和CMYK。


图5-13 JPEG压缩编码-解压缩算法框图

5.7.2 JPEG算法的主要计算步骤

  JPEG压缩编码算法的主要计算步骤如下:
  ●正向离散余弦变换(FDCT)。
  ●量化(quantization)。
  ●Z字形编码(zigzag scan)。
  ●使用差分脉冲编码调制(differential pulse codemodulation,DPCM)对直流系数(DC)进行编码。
  ●使用行程长度编码(run-length encoding,RLE)对交流系数(AC)进行编码。
  ●熵编码(entropy coding)。
  1. 正向离散余弦变换
  下面对正向离散余弦变换(FDCT)变换作几点说明。
  (1) 对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,如图5-14所示,并作为两维离散余弦变换DCT的输入。通过DCT变换,把能量集中在少数几个系数上。


图5-14 离散余弦变换

  (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-15 两维DCT变换方法

  实际的计算方法可参看[6]
  2. 量化
  量化是对经过FDCT变换后的频率系数进行量化。量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。量化是图像质量下降的最主要原因。
  对于有损压缩算法,JPEG算法使用如图5-16所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:如表5-05所示的亮度量化值和表5-06所示的色差量化值。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此图中的左上角的量化步距要比右下角的量化步距小。表5-05和表5-06中的数值对CCIR 601标准电视图像已经是最佳的。如果不使用这两种表,你也可以把自己的量化表替换它们。


图5-16 均匀量化器

表5-05 亮度量化值表

1718244799999999
1821266699999999
2426569999999999
4766999999999999
9999999999999999
9999999999999999
9999999999999999
9999999999999999

表5-06 色度量化值

1611101624405161
1212141926586055
1413162440576956
1417222951878062
182237566810410377
243555648110411392
49647887103121120101
7292959811210010399

  3. Z字形编排


图5-17 量化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-18 量化DCT系数的序号

  4. 直流系数的编码
  8×8图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8×8图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数的差值(Delta)进行编码,
    DeltaDC(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. 组成位数据流

5.7.3 应用JPEG算法举例

  有关JPEG算法更详细的信息和数据,请参看JPEG标准ISO/IEC 10918。下面是使用JPEG算法对一个8×8图像块计算得到的结果。在这个例子中,计算正向离散余弦变换(FDCT)之前对源图像中的每个样本数据减去了128,在逆向离散余弦变换之后对重构图像中的每个样本数据加了128。

139144149153155155155155
144151153156159156156156
150155160163158156156156
159161162160160159159159
159160161162162155155155
161161161161160157157157
162162161163162157157157
162162161161163158158158

 源图像样本

144146149152154156156156
148150152154156156156156
155156157158158157156155
160161161162161159157155
163163164163162160158156
163164164164162160158157
160161162162162161159158
158159161161162161159158

重构图像样本

235.6-1.0-12.1-5.202.1-1.7-2.71.3
-22.6-18.5-6.2-6.2-2.9-0.10.4-1.2
-10.9-9.3-1.61.50.20.9-0.6-0.1
-7.1-1.90.21.50.9-0.10.00.3
-0.6-0.81.51.6-0.1-0.70.61.3
1.8-0.2-1.6-0.3-0.81.51.0-1.0
-1.3-0.4-0.3-1.5-0.51.71.1-0.8
-6.21.6-3.8-1.81.91.2-0.6-0.4

 FDCT系数

2400-1000000
-240000000
-140000000
00000000
00000000
00000000
00000000
00000000

逆量化后的系数

1611101624405161
1212141926586055
1413162440576956
1417222951878062
182237566810910377
243555648110411392
49647887103121120101
7292959811210010399

 量化表

1611101624405161
1212141926586055
1413162440576956
1417222951878062
182237566810910377
243555648110411392
49647887103121120101
7292959811210010399

量化表

150-100000
-2-1000000
-1-1000000
00000000
00000000
00000000
00000000
00000000

规格化量化系数

150-100000
-2-1000000
-1-1000000
00000000
00000000
00000000
00000000
00000000

规格化量化系数

图5-19 JPEG压缩编码举例

练习与思考题

  1. 什么叫做真彩色和伪彩色?
  2. PAL制彩色电视使用什么颜色模型?NTSC制彩色电视使用什么颜色模型?计算机图像显示使用什么颜色模型?
  3. 用YUV或YIQ模型来表示彩色图像的优点是什么?为什么黑白电视机可看彩色电视图像?
  4. 彩色显象管使用红、绿、蓝这三种磷光材料发光合成彩色,这就需要把用YUV、YIQ或者YCrCb表示的图像信号转换成用RGB表示的图像信号。分别写出NTSC彩色电视、PAL彩色电视和计算机图像显示与RGB的彩色空间转换关系式。
  5. 分别用3,3和2位表示的一幅图像,问该幅图像的颜色数目最多是多少?
  6. 如果有一幅256色的图像,问该图的颜色深度是多少?
  7. 按照JPEG标准的要求,一幅彩色图像经过JPEG压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,问此时的最大压缩比是多少?
  8. JPEG压缩编码算法的主要计算步骤是:①DCT变换,②量化,③Z字形编码,④使用DPCM对直流系数(DC)进行编码,⑤使用RLE对交流系数(AC)进行编码,⑥熵编码。假设计算机的精度足够高,问在上述计算方法中,哪些计算对图像的质量是有损的?哪些计算对图像的质量是无损的?
  9. 什么叫做γ校正?在计算机中找一幅彩色图像,使用Office 97中的Microsoft Photo Editor或者其他图像处理软件显示该图像,然后使用γ校正功能修改γ值,观察图像有什么变化。
参考文献和站点
  • 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 imgc5 Part 1,Requirements and Guidelines. July 1992
  • Dr. Ze-Nian Li,http://fas.sfu.ca/cs/undergrad/CourseMaterials/CMPT365/index.html,(浏览日期:1999年1月)
  • γ校正:http://www.inforamp.net/~poynton/colour_and_gamma/GammaFAQ.html,(浏览日期:1999年2月)
  • 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 

  JPEG编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样的组织的数据通常称为JPEG位数据流(JPEG bitstream)。

  量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排,如图5-17所示。这样就把一个8 ´ 8的矩阵变成一个1 ´ 64的矢量,频率较低的系数放在矢量的顶部。

 


  伪彩色图像的含义是,每个像素的颜色不是由每个基色分量的数值直接决定,而是把像素值当作彩色查找表( color look- up table,CLUT)的表项入口地址,去查找一个显示图像时使用的R,G,B强度值,用查找出的R,G,B强度值产生的彩色称为伪彩色。
  彩色查找表CLUT是一个事先做好的表,表项入口地址也称为索引号。例如16种颜色的查找表,0号索引对应黑色,... ,15号索引对应白色。彩色图像本身的像素数值和彩色查找表的索引号有一个变换关系,这个关系可以使用Windows 95/98定义的变换关系,也可以使用你自己定义的变换关系。使用查找得到的数值显示的彩色是真的,但不是图像本身真正的颜色,它没有完全反映原图的彩色。如图5-08(b)所示。
   3. 直接色(direct color)
  每个像素值分成R,G,B分量,每个分量作为单独的索引值对它做变换。也就是通过相应的彩色变换表找出基色强度,用变换后得到的R,G,B强度值产生的彩色称为直接色。它的特点是对每个基色进行变换。
  用这种系统产生颜色与真彩色系统相比,相同之处是都采用R,G,B分量决定基色强度,不同之处是前者的基色强度直接用R,G,B决定,而后者的基色强度由R,G,B经变换后决定。因而这两种系统产生的颜色就有差别。试验结果表明,使用直接色在显示器上显示的彩色图像看起来真实、很自然。
  这种系统与伪彩色系统相比,相同之处是都采用查找表,不同之处是前者对R,G,B分量分别进行变换,后者是把整个像素当作查找表的索引值进行彩色变换。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值