“raster” 意为光栅、栅格。
在光学中,光栅是一种特殊的光学仪器,它具有一定的干涉效应。而这里所说的,是相互独立的点阵。因此,翻译为 “光栅” 可能会引起歧义。但在有些语境中,“raster” 已经被标准化为 “光栅”,如:“raster display” 的标准翻译为光栅显示器。
本章将尽可能保持翻译的一致性,除了标准化翻译之外,其余所有地方都把 “raster” 译为栅格,以尽可能准确地表达计算机图形学中 “raster” 的含义。
大多数计算机图形、图像通过光栅显示器(raster display)展示。光栅显示器使用矩形物理像素(pixel)阵列呈现图像,常见的有平板电脑显示器、电视等。光栅显示器有一个发光像素阵列,每个像素可以单独设置颜色以生成想要的图像。不同颜色可以通过将不同强度的红、绿、蓝光混合起来得到。大多数打印机,如激光打印机、喷墨打印机,也都是栅格设备(raster device)。
像素(pixel)是图像元素(picture element)的简称。
打印机中的颜色更加复杂,涉及至少四种染料的混合。
栅格在图像输入设备中也很常见。数码相机中的图像传感器是一个感光像素阵列,其中每个像素用于记录打在它上面的光的颜色和强度。台式扫描仪中包含了一排物理像素,用于扫描整个页面。
栅格图(raster image)是最常用的存储、处理图像的方式。栅格图就是存储了一系列像素值(pixel value,通常是颜色)的二维数组。要展示栅格图,可以直接使用所存储的像素值控制显示屏上每个像素的颜色。也可以在展示栅格图之前做一些额外操作,如:改变图像的大小、取向、颜色,甚至是把图像贴在三维曲面上展示。通常,显示屏的物理像素数目不等于图像的像素数目。图像像素和显示屏像素之间没有直接的对应关系。栅格图是对图像的描述,与设备无关。
矢量图(vector image)是另一种描述图像的方式,它存储的是对形状——曲线所包围的有色区域——的描述;本质上,存储的是展示图像的指令(instruction)。矢量图的优点是与分辨率无关(resolution independent),它可以很好地展示在高分辨率设备上;缺点是在展示图像之前必须进行栅格化(rasterized)。矢量图通常用于文本、图表(diagram)、机械制图(mechanical drawings),以及其它的清晰度(crispness)和精度很重要,但无需考虑照片或复杂着色的应用场景。
本章主要讨论栅格图和显示器的基础知识,特别关注显示器的非线性。
栅格设备(Raster Devices)
栅格设备可简单分类为:
-
输出设备
-
显示器(Display)
-
透光型(Transmissive)
液晶显示器(liquid crystal display,简称 LCD)
-
发光型(Emissive)
LED(light-emitting diode,发光二极管)显示器
-
-
硬拷贝(Hardcopy)
-
双色调(Binary)
喷墨打印机(ink-jet printer)
-
连续色调(Continuous tone)
热升华打印机(dye sublimation printer)
-
-
-
输入设备
-
二维阵列传感器
数码相机
-
一维阵列传感器
平板扫描仪(flatbed scanner,又称台式扫描仪)
-
显示器
现代显示器几乎都基于固定的像素阵列,它们可以分为发光显示器和透光显示器。发光显示器本身就是光源,它们直接控制发出多少光。而透光显示器则需要一个额外的光源,显示器自身只负责控制允许通过多少光;例如,对于直视的(direct-viewed)显示器,阵列后面需要有一个背光源(backlight),对于投影仪(projector),灯光穿过像素阵列之后才会投影到屏幕上。
彩色显示器(color display)中的每个像素由三个独立控制的子像素(subpixel)——红、绿、蓝——构成。从远处看时,由于眼睛无法分辨这些子像素,因此感知到的颜色就是红、绿、蓝的混合。
LED 显示器是一种发光显示器。LED 是一种半导体发光器件,发光强度与通过的电流有关。LED 显示器中每个像素均由一个或多个 LED 构成。彩色 LED 显示器中,红、绿、蓝子像素分别对应一个 LED,它们由不同材料制成,因而可以发出不同颜色的光。
液晶显示器(LCD)是一种透光显示器。液晶材料可以控制光的偏振方向,偏振方向的旋转角度可通过电压调控。每个 LCD 像素前后都各有一个偏振片,它们的透光轴互相垂直。通过调节电压,可以让出射光强在最小值和最大值之间变化。彩色 LCD 显示器中每个像素也都包含三个子像素——红、绿、蓝,它们分别带有各自颜色的滤光片。
任何带有固定像素阵列的显示器都有其固定分辨率(resolution)。对于显示器和图像,分辨率就是像素阵列的大小。如果图像的分辨率和显示器的不同,则需要进行转换。显示器的分辨率也称为原始分辨率(native resolution)。
硬拷贝设备
类似显示器,打印机也是栅格设备。但很多打印机都只能打印二值图像(binary image),即每个格点上要么沉积染料要么不沉积,没有中间态。
喷墨打印机的喷头中含有带染料的墨水,它可以在电控下喷出非常小的墨滴。喷头沿纸张横向移动,并在需要的地方喷出墨滴。每次横向扫描之后,纸张稍微向前移动一点,然后打印栅格中的下一行。彩色打印机使用多个喷头,每个带有不同的染料。由于所有墨滴都一样大,因此喷墨打印机打印出的是二值图像。喷墨打印机没有物理像素阵列,它的分辨率由墨滴大小和每次横向扫描后纸张的行进距离决定。
染料热转移(thermal dye transfer)是一种连续色调(continuous tone)打印过程,即每个像素上沉积的染料量是可变的。
含有彩色染料的色带(donor ribbon)压在纸张(或者 dye receiver)和喷头(print head)之间。喷头是由加热元件(heating element)构成的一维阵列。当色带和纸张通过喷头时,需要染色的位置开启加热元件使染料从色带扩散到纸上。调节温度可以控制沉积的染料量,不同颜色的染料均重复一遍上述过程,便可以产生连续色调。加热元件的数目决定了纸张的横向分辨率,纸张的纵向分辨率由加热、冷却速度和纸张行进速度决定。
与显示器不同,打印机的分辨率一般用像素密度(pixel density)描述,常见的单位有:
- ppi(pixels per inch,每英寸像素数),用于连续色调设备,如:染料热转移打印机。
- dpi(dots per inch,每英寸点数),用于双色调设备,如:喷墨打印机。
像喷墨打印机这种的双色调设备,一般需要有更高的分辨率。原因有二,一是为了避免出现阶梯状(stair-stepping)、锯齿状(aliasing)图案;二是为了用可变密度点图——也称为半色调(halftone)——来模拟中间色以打印连续色调图像。
输入设备
栅格图可以由某些算法生成,也可以由栅格输入设备(raster input device)记录下来,如相机、扫描仪等。通常,栅格输入设备使用传感器阵列测量每个像素上的光信号。
数码相机中的图像传感器是由光敏(light-sensitive)像素阵列构成的半导体设备,常见的有 CCD(charge-coupled device,电荷耦合器件)和 CMOS(complementary metal-oxide-semiconductor,补偿金属氧化物半导体)图像传感器。相机的镜头(lens)将图像投影到传感器上,然后由每个像素进行光测量并数字化。类似彩色显示器,大多数彩色相机都使用彩色滤光片阵列(color-filter array,简称 CFA)或者马赛克(mosaic)来让每个像素只识别红、绿、蓝光中的一种,然后由图像处理软件在后续的去马赛克(demosaicking)过程中填充缺省值。
其它相机使用三个独立的阵列或者一个阵列中三个独立的图层,来测量每个像素上的红、绿、蓝光,无需后续处理即可生成一张彩图。相比于使用马赛克传感器的相机,这种相机记录的信息更多。
相机的分辨率用像素总数来描述,常见的单位有:兆像素/百万像素(megapixel,简称为 MP)。
平板扫描仪使用一维阵列扫描纸张并测量每个像素的 RGB 值。纸张的横向分辨率由阵列中像素数目决定,纸张的纵向分辨率由测量频率和扫描速度决定。彩色扫描仪使用的是 阵列,其中 是纸张横向像素数目,三行一维阵列上面分别覆盖红、绿、蓝滤光片。使用一个合适的延迟时间来测量三种颜色,即可测出每个像素点上的 RGB 值。扫描仪的分辨率由 ppi 描述,这也称为光学分辨率(optical resolution)。
图像、像素与几何
任何图像都可以抽象为形式如下的二元函数:
其中, 是一个矩形区域, 是允许的像素值集合, 可以是屏幕发出的光,也可以是打在相机上的光,或是物体的反射率(reflectance)等。对于理想灰度图(idealized grayscale image,阵列中每个点都只有亮度,没有颜色),;对于理想彩图,。
不管是输入设备还是输出设备,像素值都只是图像颜色的局部平均值,也称为图像的点样(point sample)。
像素的坐标需要人为约定,这里约定栅格图中第 列、第 行像素的位置用 来表示,坐标轴原点在左下角,像素中心的坐标为整数,像素边界在半整数上。
在有些 API 和许多文件格式中,图像的行按从上到下的顺序编号,它们的原点在左上角,这种惯例有其历史原因:模拟电视转播(analog television transmission)中的行是从上到下的。
像素值
根据上面的描述,使用浮点数保存像素值是很自然的。但是图像中一般有很多像素,而且存储用的内存以及传输用的带宽总是稀缺的。另一方面,任何设备都有其确定的、有限的最大亮度(intensity)。因此,在很多场景中,有界的像素值完全足够。通常为简单起见,像素值取值范围约定为 ,比如 8-bit 图像中像素值可能的取值为 、、、…、、。
由于取值范围较宽,使用浮点数存储的图像常被称为高动态范围(high dynamic range,简称为 HDR)图像。使用整数存储的图像被称为固定范围(fixed-range)或低动态范围图像(low dynamic range,简称为 LDR)。
常见的像素格式及典型应用如下:
- 1-bit 灰度——文本或无需中间灰度的图片(但要求高分辨率)
- 8-bit 固定范围 RGB 彩色(每个像素包含 24 bit)——网页或邮件应用、一般场景中的照片
- 8-bit/10-bit 固定范围 RGB(每个像素包含 24/30 bit)——计算机显示器的数字接口(digital interfaces)
- 12-bit/14-bit 固定范围 RGB(每个像素包含 36/42 bit)——用于专业摄像的原始相机图像
- 16-bit 固定范围 RGB(每个像素包含 48 bit)——专业摄像、打印;为固定范围图像做图像处理的中间格式
- 16-bit 固定范围灰度(每个像素包含 16 bit)——放射学、医学成像
- 16-bit 半精度(half-precision)浮点数 RGB——HDR 图像;实时渲染中间格式
- 32-bit 浮点数 RGB——HDR 图像渲染和处理软件中的多用途中间格式
减少像素的位数会产生两种人为缺陷(artifacts)。一是,如果像素亮度超过最大值,那么用固定范围(fixed-range)编码图像会产生剪裁(clipping)。二是,用有限精度(limited precision)编码图像会产生离散化(quantization)人为缺陷——条纹(banding),比如四舍五入像素值导致光强或颜色出现明显跃变。条纹缺陷在动画和视频中藏得更深,其中,物体静止时一般没有太大影响,运动时则变得很明显。
显示器亮度与
所有现代显示器都接收数字输入作为像素值,并将其转为亮度。由于屏幕反光,即使关闭状态,显示器亮度也不为零。不过,这里只做简单考虑,假设像素值的取值范围是 , 表示黑色, 表示白色。
为了在屏幕上生成正确的图像,必须注意以下两个关键点。
一是,显示器关于输入是非线性的。也就是说,显示器亮度与输入的像素值之间不成正比。下面是显示器非线性的一种近似描述:
硬件制造商之所以把显示器做成非线性,是因为人眼的感知系统是非线性的。也就是说,人眼所感受到的强度与输入的能量不成正比。
其中, 是输入像素值, 值用于表征显示器的非线性。不管 为何值, 对应亮度为零, 对应最大亮度。一般不需要特别精确地计算设备的 值。一种估计 的视觉方法是,找一个 使之满足:
从而得到:
寻找 的标准方法是,先展示一个黑白棋盘格(checkerboard)阵列和一个同样大小但输入值为 的灰色像素阵列;然后调整 直到两者亮度基本匹配。原因在于,如果在远处看黑白棋盘格,黑白像素会等比混合起来,整体感受到的就是黑白两色正中间的亮度。
一旦知道了 ,就可以对输入进行修正,使得显示器达到像素值 所表达的亮度:
显示器的另一个重要特征是会对输入值离散化。虽然可以使用 之间的浮点数作为亮度,但是输入到显示器之后将被转为整数,常用的是 —。这意味着 的取值范围是离散的:
显示器亮度也是离散的:
其中, 是最大亮度。在需要精确控制亮度的应用中,必须精确地测量 种可能的亮度,这些亮度值在屏幕上不同位置可能也不同,尤其是 CRTs(阴极射线管屏幕)。它们也会依赖于视角(viewing angle)。幸运的是,很少有应用需要这种精确校准。
RGB 颜色
大多数计算机图形图像是用 RGB 颜色来定义的。RGB 颜色是一个简单的空间,它可以直接转换为对计算机屏幕的控制。RGB 色空间(color space)的基本想法是,根据红、绿、蓝三原色,以加色混合(additive color mixing)的方式得到其它颜色。
另一种常见的红、黄、蓝三原色,是一种减色混合(subtractive color mixing)的颜色系统。
在 、 之间调节三原色的强度就可以得到能够在 RGB 显示器上展示的任意颜色。红、绿、蓝像素值构成了一个三维 RGB 色立方体(color cube) 。
真实的 RGB 像素值通常都是离散形式,每个分量都由一个整数来表示。最常用的是 24-bit 颜色系统,其中每个分量都是 到 之间的整数,各占一个字节。对于每个分量同样有前面所讨论的 修正的问题。
合成
我们经常会覆盖(overwrite)像素的值。最常见的例子是合成(compositing),也就是前景(foreground)图像盖在背景图像上面的情形;此时如果涉及半透明(partially transparent)像素,必须要小心处理。当前景物体有半透明区域时,会出现半透明像素。但更常见的情形是,前景物体只盖住了像素的一部分,或者在前景物体的边缘,或者是出现了亚像素孔(subpixel hole),比如远处的树叶之间。
混合前景和背景时,所需的最重要的信息就是像素覆盖率(pixel coverage),即前景图像覆盖像素的百分比。最终混合后的颜色为:
其中 是前景颜色, 是背景颜色。 可以表示不透明前景物体盖住了多少的像素面积,也可以表示透明前景物体遮住了多少的光。
一幅图中所有像素的 值可以单独保存为一副灰度图,这被称为 遮罩(mask)或透明度遮罩。也可以把 保存为 RGB 图像中的第四个通道,称为 通道,这样的图像叫做 RGBA 图像。
图像存储
为了减少存储空间,大部分图像格式都允许进一步压缩。压缩分为无损(lossless)和有损(lossy)两种。无损压缩中没有信息丢失,有损压缩会丢失一些信息而且永远无法恢复。常见的图像存储格式有:
- jpeg. 基于人眼视觉系统的阈值,对图像进行有损压缩,适用于自然图像(natural images)。
- tiff. 常用于保存二值图像,或者对 8/16-bit 的 RGB 图像进行无损压缩。
- ppm. 一种简单的常用于 8-bit RGB 图像的无损、未压缩格式。
- png. 无损格式,有一套很好的开源管理工具。