图形学-反走样/抗锯齿

news2024/12/23 19:29:47

1.反走样

1.1 什么是走样

在上一篇文章中,我们通过采样的方式把一个三角形变成离散的点显示在屏幕上。在采样过程中,我们会产生很多锯齿,这些锯齿的学名就叫做走样

1.2 反走样

如何消除锯齿(走样),我们就要引入反走样技术,之所以会产生走样的原因是因为采样的速度比信号频率慢,对于图像来说,信号代表的就是图片上的每个像素,而信号频率代表的是这个像素对于周围像素颜色差异的程度。

常见的走样分为以下几种:、

  • 锯齿:空间上采样产生的走样;
  • 摩尔纹:空间上下采样产生的走样;
  • 车轮效应:时间上采样产生的走样。
    这些我们也会称为采样的瑕疵(Artifacts)

1.3 反走样方法

为了能够减轻走样带来的影响,我们会对要采样的图形先进行模糊操作,再根据模糊后的图形进行采样,这就是反走样的过程。
在这里插入图片描述
为什么把一个图片模糊就可以解决锯齿问题?实际上在我们光栅化的过程中,采样的目的是为了用采样的像素来描述一个三角形,好那我举个例子,如果一个圆,我采样取四个点,那这四个点连起来实际上是个正方形,不能够准确描述这是个圆,那我提高采样频率,我采5个点,6个点,7…随之而来连接起来是5边形,6边形,7边形…随着采样的点(频率)数量越来越多,那么连接起来就越来越接近个圆,同样我们是不是可以提高采样率来抗锯齿,答案是可以的,但是我们不能要求你有抗锯齿就要求客户换一个分辨率更高的显示器,这是不合理的,那么相对的我不能提高采样率,那能不能降低信号频率,我们可以看到对于这个三角形信号频率最高的像素在三角形边缘,红色=>白色,颜色差异很大所以变化率高,但是我们通过模糊后的三角形边缘有了渐变效果实际上就是降低了信号频率,从而实现的抗锯齿效果。当然这是大白话,在数学上我们会有更抽象的证明方式,往后看。

1.4 傅里叶变换

任何一个信号都可以表示为一些正弦波和余弦波以及常数的线性表示,我们称之为傅立叶展开。而傅立叶变换指的是将一个时域上的信号转换到频域的过程。

1.5走样和滤波

走样更为学术的定义应该是两个不同频率的信号在使用相同采样的方法后产生的结果无法进行区分
在这里插入图片描述
图中的红色信号和蓝色信号是两个频率不一样的信号,绿色虚线处是采样点,我们发现两个不同频率的信号在同一个采样方式下结果相同,这就产生了走样。

滤波是把特定频率的波过滤掉。如果仅保留高频信息,那么这称为高通滤波;如果仅保留低频信息称为低通滤波;如果既删除高频信息,还删除低频信息,只保留中频信息称为带通滤波。

在这里插入图片描述
对于一个图片我们进行傅立叶变换后,得到的是上面右图的样子。我们进行解释:中心代表了低频信息,边缘代表了高频信息,亮度代表对应频率的能量。对于图片而言,一般低频信息更加的丰富,而高频信息比较少。高频信息一般代表边缘信息,因为边缘信息频率比较高;低频信息是图片模糊后的结果,频率变化小。

为什么傅立叶变换后图片有一束明显的十字交叉?

傅立叶变换中我们会认为图片是“连续”的。我们会在原图上下左右不断重复图片以达到“连续”的效果。而图片的四周一般变换非常的快,属于高频的信息,对应在频谱图上就是会有一束明显的十字交叉,代表了高频的边缘信息。

1.6 卷积和卷积定律

滤波可以看作卷积操作,也可以看作平均操作。卷积(Convolution)操作是用一个卷积核在信号上不断地滑动,每一次卷积操作的结果是卷积核和对应位置信号乘积的和,可以看作一次加权平均的过程。

注: 时域上的卷积等于频域上的乘积,频域上的乘积等于时域上的卷积。

1.6.1 Box Filter

Box Filter 是一个格式如下的滤波器:
在这里插入图片描述
其中,𝑋 是一个全 1 矩阵。这个卷积核对临近的 𝑛 × 𝑛 的像素做平均。𝑛 越大,滤波器得到的频率范围越低。

2.深入了解采样

采样我们可以认为是一个连续函数乘以一系列的脉冲函数的结果。根据卷积定律我们知道,这相当于连续函数的傅立叶变换和脉冲函数傅立叶变换的卷积。脉冲函数的傅立叶变换还是脉冲函数。卷积的结果是信号的频谱在不断地重复。
在这里插入图片描述
当采样率不足时会使得频谱之间的间隔太小,导致频谱间产生重叠,这些重叠就是走样。
在这里插入图片描述
这也就解释了为什么使用低通滤波器可以帮助我们减少走样。这是因为使用低通滤波器只保留更窄的频率范围(干掉高频),可以减少频谱的重叠。

2.1反走样的方法

目前常用的反走样方法有两种:

  • 提高采样率(分辨率)。这是从物理层面上提高采样率来减少走样的方式,但是不够实用;
  • 先进行模糊操作,再进行采样的操作,也就是我们之前所介绍的反走样方法。

在实际的操作中,我们使用 MSAA(Multi-Sampling Antialiasing)的方式来近似进行反走样的操作,具体的步骤如下:

  1. 把每一个像素点拆分成 𝑛 × 𝑛 的小像素点;
  2. 对每一个小像素点判断该点是否在图形中;
  3. 每一个像素点的结果都是这些小像素点的平均结果。

MSAA 仅仅指的是模糊的过程,并不包含采样的过程。这样的方法虽然简单,效果好,但是会增加计算量。在工业界中,一般会采用更为有效的方式拆分采样点,甚至会复用采样点以达到更好的效果。除此之外,目前业界还有一些其他的方式进行反走样:

  • FXAA(Fast approximate AA)是通过后期处理的方式处理锯齿。先得到已经有锯齿的图像,找到边界后替换成没有锯齿的边界;
  • TAA(Temporal AA)是通过抖动的方式进行多次采样,将多个帧合成就相当于多次采样。

最后

本文如果没有看过games101的课的话估计很难理解,作者并没有写的非常详细,不过作者发现个写的很细的作者附上链接点我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UNet详细解读(一)论文技术要点归纳

UNet 论文技术要点归纳UNet摘要简介Over-tile策略网络架构训练数据增强小结UNet 摘要 2015年诞生,获得当年的ISBI细胞追踪挑战比赛第一名,在GPU上推理512x512的图像不到1秒钟,开创图像分割的先河。 简介 在当时,卷积神经网络是主…

Win10-GPU服务器-深度学习从零配置环境

1.装anaconda 下载安装anaconda(conda也一并装了) https://www.anaconda.com/products/distribution 配系统变量 将类似这个位置放进path里面“C:\ProgramData\Anaconda3” 2.安装1.5.0版本的pytorch GPU版 2.1确定的你的显卡型号 https://jingyan.…

Redis持久化之AOF

AOF(Append Only File) 将我们所有的命令记录下来, history, 恢复的时候就把这个文件全部执行一遍 以日志的形式来记录每个写操作, 将redis执行过的所有指令记录下来(读操作不记录), 只许追加文件但不可以改写文件, 启动之初会读取该文件重新构建数据…

木犀草素修饰人血清白蛋白(Luteolin-HSA),山柰酚修饰人血清白蛋白(Kaempferol-HSA)

产品名称:木犀草素修饰人血清白蛋白 英文名称:Luteolin-HSA 用途:科研 状态:固体/粉末/溶液 产品规格:1g/5g/10g 保存:冷藏 储藏条件:-20℃ 储存时间:1年 温馨提醒:仅供科…

花2个月时间学习,面华为测开岗要30k,面试官竟说:你不是在....

【文章末尾给大家留下了大量的.。。。。】 背景介绍 计算机专业,代码能力一般,之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发,第二份实习由于大三暑假回国的时间比较短(小于两个…

要如何才能抑制局部放电试验干扰?

局部放电产生的信号在微伏量级。就信号而言,很容易被外界干扰信号淹没。因此,必须考虑抑制干扰信号的影响,采取有效的抗干扰措施。局部放电测试仪测试中一些干扰的抑制方法如下: (1)电源的干扰可以通过滤波器来抑制。滤波器应该能够抑制…

Linux进程控制

文章目录进程创建fork函数进一步探讨写时拷贝进程终止进程退出场景进程终止时,操作系统做了什么?三大终止进程函数进程等待(阻塞)进程等待的必要性进程等待的两种函数获取子进程参数status如何通过status获取子进程的退出码。为什…

数字IC设计 - 逻辑综合简介与Design Compiler使用(GUI方式)

逻辑综合 定义 逻辑综合就是将前端设计工程师编写的RTL代码,映射到特定的工艺库上,通过添加约束信息,对RTL代码进行逻辑优化,形成门级网表。约束信息包括时序约束,线载模型约束,面积约束,功耗…

我的Mysql突然挂了(Communications link failure)

在一个风和日丽的下午,我照常继续做着我的项目,今天的主题是一个涉及多表的分页查询 老复杂了!写了半天才搞好。当我满怀期待运行项目,进入页面后发现登陆后台却怎么也登陆不上,吓得我连忙回去查看后台日志&#xff0…

互联网快讯:天猫好房正式入驻六安;搜狗又一业务关停

国内要闻 搜狗又一业务关停:搜狗科学百科将于11月11日正式停止服务与运营; 提振生产效能、促进研发创新,smart品牌获逾80亿元银团综合授信; 微博联合淘宝联盟推出“天猫双11”特惠政策:将免除原15%佣金;…

Linux设置终端的个数(tty的个数)。

1.什么是tty? 就是终端设备,比如终端1叫做tty1,终端2,就叫做tty2,以此类推。 官方解释: 在Linux中,TTY也许是跟终端有关系的最为混乱的术语。TTY是TeleTYpe的一个老缩写。Teletypes&#xff…

机器人轨迹规划:On-Line Trajectory Generation in Robotic System关于机器人运动控制的介绍翻译

文章目录写在前面机器人运动控制路径规划与轨迹跟踪基于传感器制导的机器人运动控制这本书的语言问题的制定和动机定义:“sensor-guarded”机器人运动控制游走:人类的神经生理系统On-Line这本书的概要参考文献写在前面 致敬大佬! 毫无疑问&a…

SuperMap GIS基础软件天地图服务QA

目录 一、天地图有哪些类型? 二、国家天地图提供哪些服务? 三、使用前你应该知道的天地图知识 1.天地图服务协议 2.天地图相关参数 3.如何申请天地图key 4.天地图瓦片预览 四、天地图在SuperMap产品中的使用方式 1.iDesktop&iDesktopX 2.iServer 3.i…

【CMU15-445数据库】bustub 项目介绍及环境配置

开新坑啦 突然想起来之前一直想做的 CMU 15-445 课程的 2022 Fall 学期开课了,所以决定把 Pintos 项目先放一放,开个新坑跟着 CMU 同步把这个项目做了。 课程网站:CMU 15-445/645 (FALL 2022) 老规矩课程内容就不说了,课程网站…

第十三届蓝桥杯C++B组国赛H题——机房 (AC)

目录1.机房1.问题描述2.输入格式3.输出格式4.样例输入5.样例说明6.数据范围7.原题链接2.解题思路3.Ac_codetarjan倍增LCA1.机房 1.问题描述 这天, 小明在机房学习。 他发现机房里一共有 nnn 台电脑, 编号为 1 到 nnn, 电脑和电脑之间有网线连 接, 一共有 n−1n-1n−1 根网线…

【Linux】基本的指令(三)

大家好我是沐曦希💕 Linux专栏:Linux零基础学习 文章目录1.时间相关的指令2.Cal指令3.find指令:(非常重要)-name4.grep指令5.zip/unzip指令6.写在最后1.时间相关的指令 date显示 date 指定格式显示时间: date %Y:%m:%d date 用法: date [OPT…

基于javaweb的oa办公管理系统(java+layui+ssm+mysql+jsp+html)

基于javaweb的oa办公管理系统(javalayuissmmysqljsphtml) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 功能说明 基…

迅为iMX6ULL开发板NXP嵌入式ARM核心板Linux系统i.MX6ULL超STM32

核心板参数 尺寸: 38mm*42mm PCB: 6层 CPU: iMX6ULL ARM Cortex-A7架构 单核 iMX6ULL 商业级: 内存:512M 存储:8G EMMC iMX6ULL 工业级: 内存:256M 存储:512M FL…

python正态分布中的normal函数

python正态分布中的normal函数 概念 1、正态分布又名高斯分布,是人们最常用的描述连续型随机变量的概率分布。 在金融学研究中,收益率等变量的分布假定为正态分布或者对数正态分布(取对数后服从正态分布)。因为形状的原因,正态分布曲线也被…

Mysql实战调优拾遗三

Mysql实战调优拾遗三优化小细节(续)索引监控查询优化查询慢的原因优化数据访问执行过程的优化查询缓存语法解析和预处理查询优化器优化器的优化策略优化器的优化类型关联与排序优化优化特定类型的查询优化count查询优化关联查询优化子查询优化group by 和…