Ch03 光栅算法
像素(pixel)即图像元素(picture element),图像使用像素阵列进行显示,像素采用 RGB 颜色空间。
3.1 光栅显像
假设像素排成矩形阵列,称为光栅(raster)。
像素
光栅显示上的可显示元素称为像素。在显示器上,用有序对$(i,j)$表示像素的索引,即表示该像素所在的行与列。如果一台显示器具有$n_x$行,$n_y$列像素,则左下角的元素是像素$(0,0)$,右上角的元素是像素$(n_x-1,n_y-1)$。
使用整数点阵作为像素的中心,由于像素占据一定的空间区域,所以距离像素中心具有0.5个单位的过冲(overshoot)。
3.2 显示器的亮度和$\gamma$值
显示器上产生图像的两个关键问题:
- 显示器对输入信号的处理是非线性的:$\text{显示亮度}=(\text{最大亮度})a^{\gamma}$,其中$a$为0到1之间的输入亮度值。 知道$\gamma$值后可以对输入进行伽马校正,通过输入值在屏幕上显示出介于黑白之间的灰度效果。
- 输入值经过了量化处理。
3.3 RGB 颜色
颜色混合(参考:Ch20):
- 加性颜色混合
- RGB 颜色空间:将红、绿、蓝三种基本光混合产生新的颜色
- 三维 RGB 颜色立方体:将红、绿、蓝作为坐标轴,坐标值从0到1变化
- 实际 RGB 数值以量化形式给出,各成分都用整数表示
- RGB 颜色空间:将红、绿、蓝三种基本光混合产生新的颜色
- 减性颜色混合
- 三基色:红、黄、蓝
3.4 $\alpha$通道
在有像素孔洞时,为了将前景与背景混合,就要权衡像素作为前景的分数(fraction)。该分数用$\alpha$表示。如果将前景色$c_f$与背景色$c_b$混合,并且被前景覆盖的像素的分数为$\alpha$,则计算公式为:
$$
c=\alpha c_f+(1-\alpha)c_b
$$
3.5 直线绘制
基于两种直线方程绘制直线:
- 隐式方程
- 参数方程
3.5.1 基于隐式方程绘制直接
中点算法(Pitteway,1967; Van Aken & Novak, 1985, Bresenham, 1965)的重要假设:绘制没有间隔的最细的直接,两对角像素之间的连接不产生间隔。
绘制直线的两种情况:
- 绘制一个像素时,和左边所绘像素高度相同或者高出一个像素;
- 在两个端点之间每一列,有且只有一个像素
注:没有像素说明有间隔;有两个像素说明直线太粗。
3.5.2 基于参数方程绘制直线
算法简洁,并且无论$x_1>x_0$是否成立都能正常运行。
3.6 三角形光栅化
过三个二维点绘制二维三角形,希望能够根据顶点数值插入颜色或者其他性质,如果存在重心坐标系,就可以直接计算插入值。这种颜色插值为Gouraud插值法(Gouraud, 1971)。
对具有公共顶点和公共边的那些三角形进行光栅化意味着这些三角形是相邻的,相互之间没有空隙。使用中点算法画出每个三角形的轮廓,然后填充内部像素,从而实现三角形光栅化。相邻三角形在邻边处都绘制了相同的像素。如果两个相邻的三角形颜色不同,则图像将由两个三角形的绘制顺序来确定。为了避免出现顺序问题,并且消除空隙,约定:当且仅当一个像素的中心位于三角形内部时,才绘制该像素。
处理三角形边上的像素
如果一个像素正好落在三角形的边上,还位于相邻三角形的边上,需要有明确的方式来确定这个像素到底属于哪个三角形。
3.7 简单反走样技术
构造「无锯齿」图像的最直接方法是采用盒式滤波器,将像素设置为盒式区域的平均颜色值,要把所有可以绘制的实体都看作已经明确定义的区域。
图像中由中点算法产生的锯齿状直线称为走样(aliasing),术语来自信号处理。
谨慎选择像素值来避免出现锯齿现象的技术,称为反走样(antialiasing)。
3.8 图像捕捉与存储
3.8.1 扫描仪和数码摄像机
使用CCD或者CMOS阵列这类光感芯片来记忆光能。通过三色滤光器产生三路光线,再使用三个芯片记录不同颜色的光能,就可以记录彩色图像。
3.8.2 图像存储
使用某种形式的压缩技术记录图像:
- 无损压缩:信息不会丢失
- 有损压缩:丢失部分信息,并且不可恢复
常见的图像存储格式:
- gif:有损压缩格式,只能表示256种颜色,适用于自然图像
- jpeg:有损压缩格式,以人类视觉系统的阈值作为基础,适用于自然图像
- tiff:无损压缩格式,每个像素通常占用24位的常用压缩图像格式
- ppm:无损压缩格式,每个像素通常占用24位的常用未压缩图像格式
- png:无损格式的集合,具有很好的开源管理工具