Category:Higher Mathematics & Computer Graphics Application
正文
3 光栅图像
大多数计算机图形图像在某种光栅显示器上呈现给用户。光栅显示器将图像显示为矩形像素阵列。一个常见的例子是平板电脑显示器或电视,它有一个矩形阵列的小发光像素,可以单独设置为不同的颜色以创建任何所需的图像。通过混合不同强度的红光、绿光和蓝光来实现不同的颜色。大多数打印机,例如激光打印机和喷墨打印机,也是光栅设备。它们基于扫描:没有像素的物理网格,但是通过在网格上的选定点上沉积墨水来顺序放置图像。
像素是“图片元素”的缩写。
光栅在图像输入设备中也很普遍。数码相机包含一个图像传感器,该传感器由一个光敏像素网格组成,每个像素都会记录落在其上的光的颜色和强度。桌面扫描仪包含一个线性像素阵列,这些像素扫过被扫描的页面,每秒进行多次测量以生成像素网格。
打印机中的颜色更为复杂,涉及至少四种颜料的混合物。
由于光栅在设备中如此普遍,光栅图像是存储和处理图像的最常用方法。光栅图像只是一个 2D 数组,它存储每个像素的像素值——通常是存储为三个数字的颜色,分别是红色、绿色和蓝色。通过使用存储图像中的每个像素来控制显示器的一个像素的颜色,可以显示存储在内存中的光栅图像。
或者,也许是因为光栅图像非常方便,光栅设备很流行。
但我们并不总是希望以这种方式显示图像。我们可能想要改变图像的大小或方向,校正颜色,甚至显示粘贴在移动的 3D 表面上的图像。即使在电视中,显示器也很少具有与正在显示的图像相同数量的像素。诸如此类的考虑打破了图像像素和显示像素之间的直接联系。最好将光栅图像视为要显示的图像的与设备无关的描述,而将显示设备视为逼近理想图像的一种方式。
除了使用像素阵列之外,还有其他描述图像的方法。矢量图像通过存储形状的描述(由线条或曲线界定的颜色区域)来描述,而不参考任何特定的像素网格。本质上,这相当于存储用于显示图像的指令,而不是存储显示图像所需的像素。矢量图像的主要优点是它们与分辨率无关,可以在非常高分辨率的设备上很好地显示。相应的缺点是它们必须经过光栅化才能显示。矢量图像通常用于文本、图表、机械制图和其他需要清晰度和精度且不需要摄影图像和复杂阴影的应用。
在本章中,我们将讨论光栅图像和显示的基础知识,特别关注标准显示的非线性。当我们在后面的章节中讨论计算图像时,需要牢记像素值如何与光强度相关的细节。
或者:您必须知道标准显示器的非线性需要特别注意什么。图片中这些数字的实际含义的详细信息。
3.1 光栅设备
在抽象地讨论光栅图像之前,看一下使用这些图像的一些特定设备的基本操作是有启发性的。一些熟悉的光栅设备可以归类为一个简单的层次结构
· 输出
--显示
* 透射式:液晶显示器(LCD)
* 发光:发光二极管(LED)显示
--硬拷贝
* 二进制:喷墨打印机
* 连续色调:热升华打印机
· 输入
--二维阵列传感器:数码相机
--一维阵列传感器:平板扫描仪
3.1.1 显示
当前的显示器,包括电视和数字电影放映机以及用于计算机的显示器和放映机,几乎普遍基于固定的像素阵列。它们可以分为发射式显示器和透射式显示器,发射式显示器使用直接发射可控光量的像素,其中像素本身不发光,而是改变它们允许通过它们的光量。透射式显示器需要一个光源来照亮它们:在直视显示器中,这是阵列后面的背光;在投影仪中,它是一盏灯,发出的光穿过阵列后投射到屏幕上。发射显示器是它自己的光源。
发光二极管 (LED) 显示器是发射型的一个示例。 每个像素由一个或多个 LED 组成,这些 LED 是半导体器件(基于无机或有机半导体),其发光强度取决于通过它们的电流(见图 3.1)。
彩色显示器中的像素分为三个独立控制的子像素——一个红色、一个绿色和一个蓝色——每个子像素都有自己的 LED,使用不同的材料制成,因此它们发出不同颜色的光(图 3.2)。当从远处观看显示器时,人眼无法区分各个子像素,感知到的颜色是红、绿、蓝的混合色。
液晶显示(LCD)是传播类型的一个例子。液晶是一种材料,其分子结构使其能够旋转通过它的光的极化,并且可以通过施加的电压调节旋转程度。 LCD像素(图3.3)在其后面有一层偏振膜,因此它被极化光照亮 - LET假设它是水平化的。
像素前的第二层极化膜定向仅垂直偏振光。如果设置了施加的电压,以使之间的液晶层不会改变极化,则所有光被阻塞,并且像素在“ OFF”(最小强度)状态中。如果设置电压使液晶旋转极化90度,则通过像素背面输入的所有光将通过前部逸出,并且像素完全“打开” - 它具有最大强度。中间电压将部分旋转极化,使前偏振器部分阻断光,从而导致最小值和最大值之间的强度(图3.4)。像颜色LED显示器一样,每个像素内的颜色LCD都具有红色,绿色和蓝色子像素,它们是三个独立的像素,上面有红色,绿色和蓝色的过滤器。
具有固定像素网格的任何类型的显示器,包括这些技术和其他技术,都具有从根本上固定的分辨率,由网格的大小确定。显示和图像,分辨率仅表示像素网格的尺寸:如果桌面监视器具有一个分辨率为1920×1200像素,这意味着它在1920列和1200行中排列了2,304,000像素。
要填充屏幕的不同分辨率的图像必须使用第9章的方法将其转换为1920×1200的图像。
显示器的分辨率有时被称为“本机分辨率”,因为大多数显示器可以通过内置转换处理其他分辨率的图像。
3.1.2 硬拷贝设备
在纸上永久记录图像的过程与在显示器上瞬时显示图像具有非常不同的限制。在印刷中,颜料分布在纸或其他介质上,因此当光线从纸反射时,它会形成所需的图像。打印机是像显示器一样的光栅设备,但许多打印机只能打印二进制图像——颜料要么沉积在每个网格位置,要么不沉积,不可能有中间量。
喷墨打印机(图 3.5)是通过扫描形成光栅图像的设备示例。喷墨打印头包含携带颜料的液体墨水,可以在电子控制下以非常小的液滴喷射。打印头在纸上移动,当它通过应该接收墨水的网格位置时会发出墨滴;在打算保持空白的区域不喷出墨水。每次扫描后,纸张稍微前进,然后放下下一行网格。彩色打印是通过使用多个打印头进行的,每个打印头用不同的颜料喷射墨水,这样每个网格位置都可以接收到不同颜色的墨滴的任意组合。因为所有墨滴都是相同的,所以喷墨打印机打印二进制图像:在每个网格点有墨滴或没有墨滴;没有中间色调。
喷墨打印机没有物理像素阵列;分辨率取决于液滴的大小以及每次扫描后纸张前进的距离。许多喷墨打印机的打印头有多个喷嘴,可以一次完成多次扫描,但最终决定行间距的是进纸,而不是喷嘴间距。
还有一些连续的喷墨打印机,它在缠绕在旋转鼓上的纸上以连续的螺旋路径进行打印,而不是来回移动打印头。
热染料转移工艺是连续色调打印工艺的一个例子,这意味着可以在每个像素上沉积不同数量的染料——它不像喷墨打印机那样全有或全无(图 3.6)。
包含彩色染料的供体色带被压在纸或染料接收器与包含线性加热元件阵列的打印头之间,每个加热元件用于图像中的每一列像素。当纸张和色带经过打印头时,加热元件会打开和关闭以在需要染料的区域加热色带,从而使染料从色带扩散到纸张上。对几种染料颜色中的每一种重复此过程。由于较高的温度会导致更多的染料被转移,因此可以控制在每个网格位置沉积的每种染料的量,从而可以产生连续范围的颜色。打印头中加热元件的数量在整个页面的方向上建立了固定的分辨率,但沿页面的分辨率取决于加热和冷却速率与纸张速度的比较。
与显示器不同,打印机的分辨率是根据像素密度而不是像素总数来描述的。因此,在其打印头上具有每英寸间隔 300 个元素的热染料转移打印机在整个页面上的分辨率为每英寸 300 像素 (ppi)。如果选择沿页面的分辨率相同,我们可以简单地说打印机的分辨率为 300 ppi。将点放置在每英寸 1200 个网格点的网格上的喷墨打印机被描述为具有每英寸 1200 个点 (dpi) 的分辨率。因为喷墨打印机是二进制设备,它需要更精细的网格,至少有两个原因。因为边缘是突然的黑/白边界,所以需要非常高的分辨率来避免出现阶梯状或混叠(参见第 8.3 节)。打印连续色调图像时,需要高分辨率来通过打印称为半色调的不同密度点图案来模拟中间色。
术语“ DPI”通常用来表示“每英寸像素”,但是DPI应参考二进制设备和PPI,参考连续音调设备。
输入设备
栅格图像必须来自某个地方,并且某些算法未计算的任何图像必须由某些栅格输入设备(通常是相机或扫描仪)测量。即使在渲染3D场景的图像中,照片也会不断用作纹理图(请参阅第11章)。栅格输入设备必须对每个像素进行轻度测量,并且(像输出设备一样)通常基于传感器阵列。
数码相机是二维阵列输入设备的一个示例。相机中的图像传感器是具有感光像素网格的半导体器件。两种常见的阵列类型称为 CCD(电荷耦合器件)和 CMOS(互补金属-氧化物-半导体)图像传感器。相机的镜头将要拍摄的场景图像投射到传感器上,然后每个像素测量落在其上的光能,最终产生一个数字,输入输出图像(图 3.7)。
与彩色显示器使用红色、绿色和蓝色子像素的方式大致相同,大多数彩色相机通过使用彩色滤光片阵列或马赛克来让每个像素只能看到红色、绿色或蓝色光,而无需图像处理软件在一个称为去马赛克的过程中填充缺失值(图 3.8)。
其他相机使用三个独立的阵列或阵列中的三个独立层来测量每个像素的独立红色、绿色和蓝色值,无需进一步处理即可生成可用的彩色图像。相机的分辨率由阵列中的固定像素数决定,通常使用像素总数来表示:具有 3000 列和 2000 行的阵列的相机会生成分辨率为 3000 × 2000 的图像,其中有 6百万像素,称为 6 兆像素 (MP) 相机。重要的是要记住,马赛克传感器不能测量完整的彩色图像,因此测量相同数量的像素但具有独立的红色、绿色和蓝色测量值的相机比使用马赛克传感器的相机记录的图像信息更多。
平板扫描仪还测量每个像素网格的红色、绿色和蓝色值,但与热染料转移打印机一样,它使用一维阵列扫描被扫描的页面,每秒进行多次测量。页面上的分辨率由阵列的大小固定,页面上的分辨率取决于测量频率与扫描头移动速度的比较。彩色扫描仪有一个 3 × nx 阵列,其中 nx 是整个页面的像素数,三行由红色、绿色和蓝色滤光片覆盖。在测量三种颜色的时间之间有适当的延迟,这允许在每个网格点进行三个独立的颜色测量。与连续色调打印机一样,扫描仪的分辨率以每英寸像素 (ppi) 为单位报告。
3.2 图像,像素,和图形
我们知道光栅图像是一个大的像素阵列,每个像素都存储有关其网格点图像颜色的信息。我们已经看到各种输出设备如何处理我们发送给它们的图像,以及输入设备如何从物理世界中的光形成的图像中获取它们。但是对于计算机中的计算,我们需要一个独立于任何设备细节的方便抽象,我们可以用它来推理如何产生或解释存储在图像中的值。
当我们测量或复制图像时,它们采用二维光能分布的形式:显示器发出的光是显示器表面位置的函数;落在相机图像传感器上的光作为传感器平面上位置的函数;反射率,或反射光的比例(相对于吸收光),作为一张纸上位置的函数。所以在物理世界中,图像是定义在二维区域上的函数——几乎总是矩形。因此我们可以将图像抽象为一个函数,
其中 R ⊂ R2 是一个矩形区域,V 是一组可能的像素值。最简单的情况是理想化的灰度图像,其中矩形中的每个点都只有一个亮度(没有颜色),我们可以说 V = R(非负实数)。
理想化的彩色图像,每个像素具有红色、绿色和蓝色值,具有 V = (R)3。我们将在下一节讨论 V 的其他可能性。
“一个像素不是一个小方块!” ——阿尔维·雷·史密斯 (A. R. Smith, 1995)
是否有任何不是矩形的光栅设备?
光栅图像与连续图像的抽象概念有何关联?
查看具体示例,来自相机或扫描仪的像素是对像素周围一些小区域上图像平均颜色的测量。具有红色、绿色和蓝色子像素的显示像素被设计为使像素表面上图像的平均颜色由光栅图像中的相应像素值控制。在这两种情况下,像素值都是图像颜色的局部平均值,称为图像的点样本。换句话说,当我们在一个像素中找到 x 的值时,它的意思是“这个网格点附近的图像的值是 x”。第 9 章进一步探讨了图像作为函数的采样表示的想法。
一个平凡但重要的问题是像素在 2D 空间中的位置。
这只是惯例问题,但建立一致的惯例很重要!在本书中,光栅图像由表示像素的列 (i) 和行 (j) 的对 (i, j) 索引,从左下角开始计数。如果图像有 nx 列和 ny 行像素,则左下角的像素为 (0, 0),右上角的像素为 (nx - 1, ny - 1)。我们需要 2D 真实屏幕坐标来指定像素位置。我们将像素的采样点放置在整数坐标上,如图 3.10 中的 4 × 3 屏幕所示。
图像的矩形域具有宽度 nx 和高度 ny 并以该网格为中心,这意味着它在每边的最后一个采样点之外延伸了半个像素。因此,nx × ny 图像的矩形域
同样,这些坐标只是约定俗成的,但是稍后在实现相机和查看变换时要记住它们很重要。
3.2.1 像素值
直接显示的图像需要较小的范围。
虽然可能的光强度范围原则上是无界的,但任何给定的设备都具有绝对有限的最大强度,因此在许多情况下,像素具有有界范围就完全足够了,为简单起见,通常取为 [0, 1]。例如,8 位图像中的可能值是 0、1/255、2/255、...、254/255、1。使用浮点数存储的图像,允许范围广泛的值,通常是称为高动态范围 (HDR) 图像,以将它们与以整数存储的固定范围或低动态范围 (LDR) 图像区分开来。有关高动态范围图像的技术和应用的深入讨论,请参见第 21 章。
以下是一些具有典型应用的像素格式:
• 1 位灰度——文本和其他不需要中间灰度的图像(需要高分辨率);
• 8 位 RGB 固定范围颜色(每个像素总共 24 位)——网络和电子邮件应用程序、消费者照片;
• 8 位或 10 位固定范围 RGB(24–30 位/像素)——计算机显示器的数字接口;
• 12 至 14 位固定范围 RGB(36–42 位/像素)——用于专业摄影的原始相机图像;
• 16 位固定范围 RGB(48 位/像素)——专业摄影和打印;用于固定范围图像的图像处理的中间格式;
• 16 位固定范围灰度(16 位/像素)——放射学和医学成像;
• 16 位“半精度”浮点 RGB——HDR 图像;实时渲染的中间格式;
• 32 位浮点 RGB — 用于软件渲染和处理 HDR 图像的通用中间格式\
减少用于存储每个像素的位数会导致图像中出现两种不同类型的伪影或人为引入的缺陷。首先,使用固定范围值编码图像会在将原本比最大值更亮的像素设置或裁剪为最大可表示值时产生裁剪。例如,一张阳光明媚的照片可能包含比白色表面更亮的反射;当图像转换为要显示的固定范围时,这些将被剪裁(即使它们是由相机测量的)。其次,当需要将像素值四舍五入到最接近的可表示值时,以有限的精度编码图像会导致量化伪影或条带化,这会导致强度或颜色的可见跳跃。条带在动画和视频中可能特别隐蔽,在静止图像中条带可能不会令人反感,但在它们来回移动时会变得非常明显。
3.2.2 监测强度和伽马
所有现代显示器都采用数字输入来获取像素的“值”,并将其转换为强度级别。真正的显示器在关闭时具有一些非零强度,因为屏幕会反射一些光。出于我们的目的,我们可以将其视为“黑色”并将显示器完全打开为“白色”。我们假设像素颜色的数字描述范围从零到一。黑色为 0,白色为 1,介于黑白之间的灰色为 0.5。请注意,这里的“中途”是指来自像素的物理光量,而不是外观。人类对强度的感知是非线性的,不会成为当前讨论的一部分;更多信息请参见第 20 章。
要在显示器上生成正确的图像,必须了解两个关键问题。首先是监视器在输入方面是非线性的。例如,如果您将监视器 0、0.5 和 1.0 作为三个像素的输入,则显示的强度可能是 0、0.25 和 1.0(关闭、四分之一完全打开和完全打开)。作为这种非线性的近似表征,监视器通常由 γ(“伽马”)值表征。这个值就是公式中的自由度
其中 a 是介于 0 和 1 之间的输入像素值。例如,如果监视器的 gamma 为 2.0,并且我们输入的值 a = 0.5,则显示的强度将是最大可能强度的四分之一,因为 0.52 = 0.25。请注意,无论 γ 的值如何,a = 0 映射到零强度,a = 1 映射到最大强度。使用 γ 描述显示器的非线性只是一个近似值;我们在估计设备的 γ 时不需要很高的准确性。衡量非线性的一个很好的可视化方法是找出一个值在黑色和白色之间给出一个强度。这将是
如果我们能找到a,我们可以通过两边取对数来推导出γ:
我们可以通过标准技术找到这个 a,我们在输入 a 的灰色像素正方形旁边显示黑白像素的棋盘图案(图 3.11),
然后要求用户调整 a(例如,使用滑块)直到两侧的平均亮度匹配。当您从远处观看此图像时(或者如果您近视,则不戴眼镜),当 a 产生介于黑白之间的强度时,图像的两侧看起来大致相同。这是因为模糊的棋盘格混合了偶数个白色和黑色像素,因此整体效果是介于白色和黑色之间的均匀颜色。
一旦我们知道 γ,我们就可以对我们的输入进行 gamma 校正,以使 a = 0.5 的值以介于黑白之间的强度显示。这是通过转换完成的
当这个公式被代入方程(3.1)时,我们得到
真实显示器的另一个重要特征是它们采用量化的输入值。因此,虽然我们可以在浮点范围 [0, 1] 内操作强度,但监视器的详细输入是一个固定大小的整数。这个整数最常见的范围是 0-255,可以保存在 8 位存储中。这意味着 a 的可能值不是 [0, 1] 中的任何数字,而是
这意味着可能显示的强度值约为
对于带有模拟接口的显示器,难以沿水平方向快速改变强度,水平黑白条纹比棋盘效果更好
其中 M 是最大强度。在需要控制精确强度的应用中,我们必须实际测量 256 种可能的强度,这些强度在屏幕上的不同点可能不同,尤其是对于 CRT。它们也可能因视角而异。幸运的是,很少有应用需要如此精确的校准.
3.3 RGB 颜色
大多数计算机图形图像是根据红绿蓝 (RGB) 颜色定义的。 RGB 颜色是一个简单的空间,允许直接转换为大多数计算机屏幕的控件。在本节中,从用户的角度讨论 RGB 颜色,操作设施是目标。第 19 章对颜色进行了更深入的讨论,但 RGB 颜色空间的机制将允许我们编写大多数图形程序。 RGB色彩空间的基本思想是通过混合三种原色光来显示颜色:一红一绿一蓝。灯光以相加的方式混合
在小学时,您可能已经知道原色是红色、黄色和蓝色,例如,黄色蓝色 = 绿色。这是减色混合,它与显示器中更常见的加色混合有着根本的不同。
在 RGB 加色混合中,我们有(图 3.12)
“青色”是蓝绿色,“品红色”是紫色。
如果允许我们将主灯从完全关闭(由像素值 0 表示)调暗到完全打开(由 1 表示),我们可以创建可以在 RGB 监视器上显示的所有颜色。红色、绿色和蓝色像素值创建具有红色、绿色和蓝色轴的三维 RGB 颜色立方体。轴的允许坐标范围从零到一。颜色立方体如图 3.13 所示。
立方体角落的颜色是
实际的 RGB 级别通常以量化的形式给出,就像 3.2.2 节中讨论的灰度一样。每个组件都用一个整数指定。这些整数最常见的大小是每个一个字节,因此三个 RGB 分量中的每一个都是 0 到 255 之间的整数。三个整数一起占用三个字节,即 24 位。因此,具有“24 位颜色”的系统对于三种基色中的每一种都有 256 个可能的级别。第 3.2.2 节中讨论的伽马校正问题也分别适用于每个 RGB 分量。
3.4 阿尔法合成
通常我们只想部分覆盖像素的内容。这种情况的一个常见示例发生在合成中,我们有一个背景并希望在其上插入一个前景图像。对于前景中的不透明像素,我们只需替换背景像素。对于完全透明的前景像素,我们不改变背景像素。对于部分透明的像素,必须小心。当前景对象具有部分透明的区域(例如玻璃)时,可能会出现部分透明的像素。但是,必须混合前景和背景的最常见情况是前景对象仅部分覆盖像素,或者在前景对象的边缘,或者当存在子像素孔(例如在远处树的叶子之间)时.
将前景对象与背景对象混合所需的最重要信息是像素覆盖率,它告诉前景层覆盖的像素比例。我们可以称这个分数为α。如果我们想在背景色cb上合成一个前景色cf,并且前景色覆盖的像素的比例为α,那么我们可以使用公式
对于不透明的前景层,解释是前景对象覆盖像素矩形内的区域 α,而背景对象覆盖剩余区域,即 (1 - α)。对于透明层(想想在玻璃或描图纸上绘制的图像,使用半透明涂料),解释是前景层阻挡了从背景穿过的部分 (1 - α) 光并贡献了部分 α它自己的颜色来代替被删除的东西。图 3.14 显示了使用公式 (3.2) 的示例。
图像中所有像素的 α 值可能存储在单独的灰度图像中,然后称为 alpha 蒙版或透明度蒙版。 或者可以将信息存储为RGB图像中的第四个通道,在这种情况下称为alpha通道,图像可以称为RGBA图像。 对于 8 位图像,每个像素占用 32 位,这在许多计算机体系结构中是一个方便大小的块。
虽然公式 (3.2) 是常用的,但在许多情况下 α 的使用方式不同(Porter & Duff, 1984)。
由于前景和背景层的重量加起来为1,因此,如果前景和背景层具有相同的颜色,则颜色不会改变。
3.4.1 图像存储
大多数 RGB 图像格式对每个红色、绿色和蓝色通道使用 8 位。这导致单个百万像素图像的原始信息大约为 3 兆字节。为了减少存储需求,大多数图像格式都允许某种压缩。在高层次上,这种压缩要么是无损的,要么是有损的。在无损压缩中不会丢弃任何信息,而在有损系统中某些信息会不可恢复地丢失。流行的图像存储格式包括:
• JPEG 。这种有损格式根据人类视觉系统中的阈值压缩图像块。这种格式适用于自然图像。
• tiff 。这种格式最常用于保存二进制图像或无损压缩的 8 位或 16 位 RGB,尽管存在许多其他选项。
• ppm。尽管存在许多选项,但这种非常简单的无损、未压缩格式最常用于 8 位 RGB 图像。
• PNG。这是一套无损格式,带有一套很好的开源管理工具。
由于压缩和变体,可能涉及为图像编写输入/输出例程。幸运的是,通常可以依靠库例程来读取和写入标准文件格式。对于快速而肮脏的应用程序,简单性比效率更重要,一个简单的选择是使用原始 ppm 文件,通常可以通过将存储图像的数组转储到文件中来编写原始 ppm 文件,预先添加适当的标题.
经常问的问题
• 他们为什么不让监视器线性化并避免所有这些伽马业务?
理想情况下,监视器的 256 种可能强度看起来应该是均匀分布的,而不是线性分布的能量。因为人类对强度的感知本身是非线性的,所以 1.5 到 3 之间的伽马(取决于观察条件)将使强度在主观意义上近似均匀。这样,伽玛就是一个特征。否则,制造商将使监视器成为线性的。
练习
- 通过拍摄自然图像(最好是扫描照片而不是可能已经应用了拜耳马赛克的数码照片)并创建由交错的红/绿/蓝通道组成的灰度图像,模拟从拜耳马赛克获取的图像。这模拟了数码相机的原始输出。现在从该输出创建一个真正的 RGB 图像并与原始图像进行比较。