反走样算法

日常不写简介😓

06.png

概述

对于直线、圆以及椭圆这些最基本元素的生成速度和显示质量的改进,在图形处理系统种具有重要的应用价值

但是它们生成的线条具有明显的“锯齿形”,即:发生走样现象

00.png

“锯齿”是走样的一种形式,而走样是光栅显示的一种固有性质,产生走样现象的原因是像素本质上的离散性

走样是数字化的必然产物

走样现象:

  • 光栅图形产生的阶梯形(锯齿形)
  • 图形中包含相对微小的物体的时候,这些物体在静态图形中容易被丢弃或忽略,在动画序列中时隐时现,产生闪烁

如果对一个快速变化的信号采样频率过低,所得到的样本表示的会是低频变化的信号,原始信号的频率看起来被较低的走样频率所代替

反走样技术

用于减少或者消除走样效果的技术叫做反走样技术

由于图形的走样现象对于图形的显示质量影响很大,几乎所有的图形处理系统都要对基本图形进行反走样处理

采用分辨率更高的显示设备,对解决走样现象有所帮助,因为可以使锯齿相对物体会更小一些

01.png

但是这样的反走样方法是以成倍的存储器代价和扫描转换时间为代价获得的

为了稳定屏幕上的图像,电子枪至少要以 $\frac{1}{24}$ 秒 1 次的速度轰击屏幕上的所有像素,如果像素提高一倍,电子枪轰击的速度就要提高 4 倍

反走样技术涉及到某种形式的“模糊”来产生更加平滑的图像

eg. 对于在白色背景中的黑色矩形,可以通过在矩形的边界附近添加一些灰色像素,可以柔化由黑色👉白色的尖锐的变化,从远处观察这幅图像时,人眼能够把这些缓和变化的暗影融合在一起,从而感知到更加平滑的边界

02.png

两种反走样方法:

  1. 非加权区域采样法
  2. 加权区域采样法

非加权区域采样法

根据物体的覆盖率计算像素的颜色,覆盖率是指某个像素区域被物体覆盖的比例

eg.

03.png

把一个多边形放在方格之中,其中每个小正方形的中心对应显示器上的像素中心,被多边形覆盖了一半的像素亮度赋值为 $\frac{1}{2}$,覆盖了三分之一的像素亮度赋值为 $\frac{1}{3}$,以此类推

如果这时缓冲区的每个像素有 4bit,那么 0👉15 表示颜色由 黑色👉白色

非加权区域采样法的缺点:

  • 像素的亮度与相交区域的面积是呈正比的,而与相交区域落在像素内的位置无关,这样依然会产生锯齿效应
  • 直线条上沿理想直线方向的相邻的两个像素有时会有较大的灰度差

造成这些缺点的主要原因是因为每个像素的权值一样

加权区域采样法

这种方法的反走样效果更好,其更符合人的视觉系统对于图像信息的处理方式

04.png

将直线段看作是具有一定宽度的狭长矩形,当直线段与像素相交时,根据相交区域与像素中心的距离来决定其对像素亮度的影响

直线段对于一个像素亮度的影响与相交区域到像素中心的距离成正比

离像素中心越近,显示的亮度越亮

则通过设置相交区域面积与像素中心距离的权函数(高斯函数),可以反映相交面积对于整个像素亮度的影响大小

利用权函数积分求相交区域面积,用它乘以像素可以设置的最大亮度值,即可以得到该像素实际显示的亮度值

为了简化计算,一般采用离散计算方法

eg.

05.png

将一个像素划分为 $n = 3 \times 3$ 个子像素,加权表可以取作:

$$\begin{bmatrix} w1 & w2 & w3 \ w4 & w5 & w6 \ w7 & w8 & w9 \end{bmatrix} = \begin{bmatrix} 1 & 2 & 1 \ 2 & 4 & 2 \ 1 & 2 & 1 \end{bmatrix}$$

加权方案: 中心子像素的加权时角子像素的 4 倍,是其他像素的 2 倍,对 9 个子像素的每个网格计算出的亮度进行平均

然后求出所有中心落于直线段内的子像素

最后计算所有这些子像素对原像素亮度影响之和

反走样是图形学中的一个根本问题,是不可能避免的,是图形学中的一个永恒问题