本模块内容绝大部分是在慕课上看中国农业大学网客时的笔记,因此算作转载,在此鸣谢赵明、李振波两位老师,感谢他们录制该门课程供大家学习!
其实,在之前绘制直线算法中,画出来的直线经放大会有明显的“锯齿”,这就是俗称的走样(Liasing)现象。下面介绍如何通过特定算法降低这种不友好现象的影响
反走样技术
走样
产生原因
光栅显示器的固有性质,走样产生的原因是像素本质上的离散性。比如,想要用离散的点表示连续的直线,就必然会有“锯齿”现象出现,这是走样的形式之一。
走样形式
除了上面的直线锯齿之外,微小物体的显示问题也是一个令人头痛的事。如果图形相对微小,一些部分占不满半个像素,那么就会被四舍五入“舍”掉。而且,小物体在快速移动过程中的闪烁问题也是走样的形式之一,具体情况如下图所示:
反走样技术
为了解决上述问题,研究人员开发出了一些用于减少或消除走样效果的技术,称为反走样(Antialiasing)随现在对图形质量要求越来越高,几乎所有图形处理系统都需要对基本图形进行反走样处理
提高分辨率
简单粗暴,但是开销巨大。比如显示器长宽分辨率各加一倍,则要以4倍(2*2)的存储器代价和扫描转换时间解决问题,且对硬件要求提高,无法适应更高要求的反走样。
“模糊”
通过模糊,我们可以淡化锯齿,从而产生更平滑的图像。比如在白色背景下绘制黑色直线时,可以通过在直线周围添加一些灰色像素来柔化黑色到白色的锐变。“模糊”的方式有以下两种。
非加权区域采样方法
根据物体的覆盖了吧计算像素颜色,即某个像素区域被物体覆盖的比例决定颜色参数的大小。
这个方法计算较简单,但缺点也比较明显:
- 像素亮度只与相交区域面积大小成正比,而与相交区域在像素内的位置无关,这仍然会导致锯齿的出现。
- 直线条上沿直线方向上的相邻两个像素有时色差会很明显
两个不足之处出现的本质原因是每个像素的权值相同
加权区域采样方法
更符合人视觉系统对图像信息的处理方式,效果更好。
将直线段看作具有一定宽度的狭长矩形。当直线段与像素有交时,根据相交区域与像素中心的距离(即通过计算一次点到直线距离)来决定其对象素亮度的贡献。
- 像素中心离直线段越近,权值越大,亮度就高;
- 设置相交区域面积与像素中心距离的权函数(高斯函数)反映相交面积对整个像素亮度的贡献大小
这样,利用权函数积分求相交区域面积,乘以像素可设置的最大亮度值,就得到该像素实际亮度。
加权区域采样方法的计算
在计算时,由于像素点的离散型,其实并不需要算出很精确的权值,可以将像素分成3*3的子像素,然后做出加权表如下:
这样,在计算时只要求出所有中心位于直线狭长矩形的子像素,然后加权计算就可以算出亮度权值了。
关于更多对反走样技术的改进与研究,知网中有如下文章: