本节书摘来自华章出版社《计算机科学概论》一书中的第3章,第3.5节图像与图形表示法,作者[美]内尔·黛尔(nell dale)约翰·路易斯(john lewis),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.5 图像与图形表示法
在讨论图像(如照片)和图形(如线条画)的表示法及压缩方法时,它们有些共同点。首先,我们来看看表示颜色的一般方法,然后再介绍各种数字化和表示视频信息的技术。
3.5.1 颜色表示法
颜色是我们对到达视网膜的各种频率的光的感觉。我们的视网膜有三种颜色感光视锥细胞,负责接收不同频率的光。这些感光器分类分别对应于红、绿和蓝三种颜色。人眼可以觉察的其他颜色都能由这三种颜色混合而成。
在计算机中,颜色通常用rgb(red-green-blue)值表示,这其实是三个数字,说明了每种原色的相对份额。如果用0到255的数字表示一种元素的份额,那么0表示这种颜色没有参与,255表示它完全参与其中。例如,rgb值(255,255,0)最大化了红色和绿色的份额,最小化了蓝色的份额,结果生成的是嫩黄色。
rgb值的概念引出了三维“色空间”。图3-10展示了一种显示色空间的方法。
用于表示颜色的数据量称为色深度,通常用表示颜色的位数来表示色深度。增强彩色指色深度为16位的颜色,rgb值中的每个数字由5位表示,剩下的一位有时用于表示透明度。真彩色指色深度为24位的颜色,rgb值中的每个数字由8位表示,即每个数所属的范围是0~255,这样能够生成1670万种以上的颜色。
下表展示了一些真彩色的rgb值和它们表示的颜色:
24位真彩色提供的颜色比人眼能够分辨的颜色多。此外,显示器能显示的颜色也受限于特定的色深度。为了使显示器显示的颜色减少到256色,程序指定的任何颜色都会被映射到硬件能够显示的调色板中与之最接近的一种颜色。图3-11显示了这种受限制的调色板。当想要显示的颜色与硬件能够显示的颜色之间差别太大时,显示的结果通常都不令人满意。令人欣慰的是,大多数现代的显示器都提供了足够大的颜色范围,因而大大减少了这种问题。
3.5.2 数字化图像与图形
照片是图像的模拟表示。它的表面是连续的,一种颜色的色度与另一种颜色的混合在一起。数字化一幅图像是把它表示为一个独立的点集,这些点称为像素,代表图像的元素。每个像素由一种颜色构成。表示一幅图像使用的像素个数称为分辨率。如果使用了足够多的像素(高分辨率),把它们按正确的顺序并排排列,就可以瞒过人眼,使人们认为看到的是连续的图像。图3-12展示了一个数字化的图像,它的一小部分被放大,显示出了独立的像素。
图3-12 由许多独立像素构成的数字化图像
像素(pixel):用于表示图像的独立点,代表图像的元素。
逐个像素存储图像信息的方法称为光栅图形格式。目前流行的几种光栅图形格式有位图(bmp)、gif和jpeg。
**分辨率(resolution):用于表示图像的像素个数。
光栅图形格式(raster-graphics format):逐个像素存储图像信息的格式。**
位图文件是最直接的图形表示之一。除了一些管理细节外,位图文件只包括图像的像素颜色值,按照从左到右、从上到下的顺序存放。虽然位图文件支持24位的真彩色,但是通常会指定色深度,以减小文件。可以使用本章前面介绍过的行程长度编码来压缩位图文件。
compuserve于1987年开发的gif(graphics interchange format,图形交换格式)格式把图像中可用的颜色数量限制在256种颜色。也就是说,gif图像只能由256种颜色构成,不过不同的gif图像可以由包含256种颜色的不同颜色集构成。这种技术叫作索引颜色,由于要引用的颜色少,所以生成的结果文件就比较小。如果需要使用更少的颜色,那么可以采用需要更少位数的色深度。gif文件最适合用于颜色较少的图形和图像,因此,它是存放线条图像的首选格式。有一种gif格式版本还可以通过存储一系列能在浏览器这样的程序中连续显示的图像来定义动画。
jpeg格式利用了人眼的特性。人眼对亮度和颜色的渐变比对它们的迅速改变敏感。因此,jpeg格式保存了短距离内色调的平均值。jpeg格式被看作存储照片颜色图像的首选格式。它采用的压缩模式相当复杂,有效地减小了生成的文件大小。
png是portable network graphics(可移植的网络图像文件格式)的缩写。png格式的设计者是想用png格式来改进当前的gif格式,从而最终取代它。png图像的压缩效果通常比gif图像的更好,同时提供的色深度范围也更广。不过,png图像不支持动画,也不像gif格式那样广受支持。
3.5.3 图形的矢量表示法
矢量图形是另一种表示图像的方法。矢量图形格式不像光栅图形那样把颜色赋予像素,而是用线段和几何形状描述图像。矢量图形是一系列描述线段的方向、线宽和颜色的命令。由于不必记录所有的像素,所以采用这种格式的文件一般比较小。图像的复杂度(如图像中的项目个数)决定了文件的大小。
矢量图形(vector graphics):用线段和几何形表示图像的方法。
光栅图形(如gif图形)要获得不同的大小和比例必须进行多次编码,矢量图形则可以通过数学计算调整大小,这些改变可以根据需要动态地计算。
但是,矢量图形不适用于表示真实世界的图像。jpeg图像是表示真实世界图像的首选,矢量图形则适用于艺术线条和卡通绘画。
当前,网络上最流行的矢量图形格式是flash。flash图像存储为二进制格式,创建flash图像需要专用的编辑器。一种新的矢量格式svg(scalable vector graphics,可缩放矢量图形)正在开发中,它是用纯文本表示的。一旦svg格式完成了,矢量图形可能会成为网络成像的流行方法。
**爱因斯坦对电报的描述
“你看,有线电报就像一只体型非常非常长的猫,”阿尔伯特·爱因斯坦(albert einstein)这样解释道,“你在纽约拉住了它的尾巴,却听到它的脑袋在洛杉矶叫……无线电收发报机也是这样,你在这里发出了信号,他们可以在那里收到。唯一的区别是没有猫。”你认为他会怎样描述计算机呢?**