本文整理自西安交通大学软件学院祝继华老师的计算机图形学课件,请勿转载
在光栅显示器上显示图形时,直线段或图形边界或多或少会呈锯齿状
图形信号是连续的,而在光栅显示系统中,采用离散的象素表示图形
-
走样:用离散量表示连续量引起的失真现象。
-
阶梯状边界;
-
图形细节失真;
-
狭小图形遗失(左):动画序列中时隐时现,产生闪烁(右)。
-
反走样
在图形显示过程中,用于减少或消除走样现象的方法或技术
反走样几种方法:
- 提高分辨率方法;
- 非加权区域采样;
- 加权区域采样;
- 半色调技术。
提高分辨率
把显示器分辨率(水平、垂直)提高一倍
帧缓存容量则增加到原来的4倍,而扫描转换同样大小的图形却要花4倍时间
评价:方法简单,但代价非常大,不经济
区域采样
- 直线段对一个像素亮度的贡献:
- 与两者相交区域的面积成正比;
- 和像素中心点距直线段的距离成反比。
- 当直线段和某个像素不相交时,它对该像素的亮度无影响;
- 相同面积的相交区域对像素的亮度贡献相同,而与这个相交区域落在像素内的位置无关。
非加权区域采样
假设一条直线段的斜率为m(0≤m≤1),且所画直线为一个象素单位,则直线段与象素相交有五种情况。
面积计算:
- 情况(1)(5)阴影面积为: D 2 / 2 m D^2/2m D2/2m;
- 情况(2)(4)阴影面积为: D − m / 2 D-m/2 D−m/2;
- 情况(3)阴影面积为: 1 − [ ( 1 − D ) 2 + E 2 ] / 2 m , E = D + m − s q r t ( 1 + m 2 ) 1-[(1-D)^2+E^2]/2m,E=D+m-sqrt(1+m^2) 1−[(1−D)2+E2]/2m,E=D+m−sqrt(1+m2)。
像素实际显示的灰度值=所得面积(0-1间)*该像素的最大灰度值
为了简化计算可以采用离散的方法
- 首先将屏幕象素均分成n个子象素;
- 然后计算中心点落在直线段内的子象素的个数k;
- 将屏幕该象素的亮度置为相交区域面积的近似值可k/n。
加权区域采样
思想:改进非加权区域采样方法的第3条性质,相交区域对象素亮度的贡献依赖于该区域与象素中心的距离
可采用离散计算方法
- 将象素分割成n个等面积的子象素,计算每个子象素对原象素的贡献,并保存在一张二维的加权表中;
- 求出所有中心落于直线段内的子象素;
- 计算所有这些子象素对原象素亮度贡献之和的值;
- 该值乘以象素的最大灰度值作为该象素的显示灰度值。
对n=9的情况:
对n=25的情况:
例子
半色调技术
对于给定的分辨率,通过将几个像素组合成一个单元来获得多级灰度;
例:在一个显示器中将四个像素组成一个单元,可产生5种光强。
评价
- 对于两级灰度显示器可能构成的灰度数等于单元中像素个数加1;
- 若有m级灰度, n × n n\times n n×n个像素组成一个单元,则灰度级别数为 n × n × ( m − 1 ) + 1 n\times n\times (m-1)+1 n×n×(m−1)+1;
- 单元越大,灰度级别越高;
- 它是以牺牲空间分辨率为代价的。
•例:灰度级别=4,每个单元=2*2