图形学笔记6 反走样

反走样就是抗锯齿一类的技术

上节课的问题

将连续信号离散化的过程跟不上连续信号的变化过程(实数是稠密的)

image-20230416215610223
image-20230416215550302

什么是采样

一般来说, 图形学的采样有时间上的, 也有空间上的, 上节课讲的是空间上的

时间上的采样就是视频

因为视频不是连续的, 而是离散的每一帧构成的, 所以当采样速度过低时就会产生重影

image-20230416215757129

这里有一个专业术语 Artifacts, 用以概括性描述图形学中所有不按照实际现实情况显示的图形缺陷

摩尔纹也是一种artifact

image-20230416215936993

摩尔纹有两种成因

  1. 隔行扫描的显示设备上, 拍摄的某一瞬间, 只有奇数行或者偶数行被扫描出来了, 这导致图像所包含的像素少了一半, 但是图像大小不变, 所以产生了摩尔纹;这是一个成像设备去拍摄另一个成像设备过程中产生的
  2. 成像设备/拍摄设备为了显示/拍摄某些高密度花纹时, 对于显示设备/感光器而言, 这是一种高频信息(所谓高频就是变化率很快, 比如花纹的边界两边快速变化颜色) 当这种高频信号的频率与成像设备原件像素的空间频率相近的时候, 就可能导致某一行像素由于差拍原理(类似于干涉)无法被记录, 从而产生成因一, 像素变少了, 但是图像大小没变化, 这样就会让某些地方很空旷, 形成花纹

学术一点的说法:

图形学中的摩尔纹是指在采样图像时,由采样序列与图像中信号的周期性或间隔性相互作用形成的一种视觉伪影。它们通常出现在采样频率接近或等于信号频率的情况下。

具体来说,摩尔纹的成因与采样定理(后面会讲)有关。根据采样定理,为了避免信号重建时出现失真,采样频率应该至少是信号最高频率的两倍(严格大于)。如果采样频率稍微低于两倍信号频率,就会产生一系列频谱镜像,其中一些镜像可能会重叠并与原始信号的谐波部分形成相互干扰。

从视觉角度来看,这些相互干扰可以在信号中形成周期性条纹或亮度变化,这就是摩尔纹的成因。当信号的周期长度与采样序列的间隔长度非常接近时,摩尔纹会变得尤为明显。

摩尔纹在数字摄影和计算机图像处理中很常见,对于理解图像采样和信号处理的基本原理非常重要。

再来一个时间采样artifact, 反向旋转的转盘

image-20230416222001661

那么这些东西的本质都是什么呢? 其实本质上都是原始数据信号变化率过大, 导致成像设备(采样设备)的采样率跟不上原始信号的变化率造成的

采样前预处理

采样前做模糊的操作可以一定程度上缓解

image-20230416222232777

也就是说, 把二元离散信号转换成32位的离散信号

从布尔值转换为了浮点值, 虽然采样率没有直接变化,但是可以承载的信息更多了

效果图

处理前
处理后

采样定理

信号的变化速率与频率有关:

image-20230416222620149

频率的分解

傅里叶展开可以用来写傅里叶变换

简而言之就是任何信号都可以写作一系列正弦波余弦波之和加上一个常数项

用于描述原始信号中, 各频率成分的信号的占比

image-20230416222942657
image-20230416223002482

我们可以把空域(空间)上的信号(图像)转换到频域上面, 形成一张频域图

image-20230416223126379
image-20230416223147275

频域图的中心意味着低频信号

频域图的外侧意味着高频信号, 高频信号也就是图像的边界

频域图的两条明亮的线不是坐标轴, 而是由于计算频域图时, 我们会把原始图像平铺, 这导致原始图像边界处形成了明显的一个竖向或横向的边界, 形成了频域图的两条明亮的线

采用低通高通和FFT的方法处理图像是比较古早的办法了, 现在一般是机器学习

采样定理

image-20230416223233298

采样率需要严格大于原始频率两倍

否则就会有两个不同的信号, 采样结果相同, 造成混叠(Aliasing), 是一种失真

卷积

卷积就是求几加权平均值

image-20230416223755568
image-20230416223810570

有一个信号矩阵和一个过滤器矩阵

另外, 时域的卷积等价于频域的乘积, 这里的乘积指的是逐元素算数相乘, 而不是矩阵的乘法

image-20230417175424346

傅里叶变化得到的频域图本质上是一种信息的压缩

一张全黑的图片和一张全白的图片的频域图本质上是相同的

参考下面的例子(左边是时域, 右边是频域)

image-20230417180803763
image-20230417180818761

相同内容越少, 频域图的可视区域越大

相同内容越多, 频域图的可视区域越小

也就是说, 时域的密集程度和频域的密集程度是相反的

有了前面的铺垫, 采样到底是什么

image-20230417181824921

我们来看原始信号(a), 他经过傅里叶变换后转换到频域上(b), 可以看到原始信号中包含了 \([-f_0,f_0]\) 上, 许多不同频率信号, 换句话来说, 原始信号等价于这个频率区间内各种不同信号的叠加, 各信号的强度不同

对于函数(c), 这是一个用于标记采样间隔的函数, 称之为冲激函数, 可以看出来, 冲激函数是一个周期函数, 当采样越密集的时候, 冲激函数的周期越小, 频率越大, 反应到频域图上的结果就是, \(f_s\)\(2f_s\)之间的间隔变大(时域的密集程度和频域的密集程度是相反的)

对于图形(e) 它描述了(a)和(c)的卷积, 由于时域卷积相当于频域乘积, 我们把(d)和(b)相乘, 相当于(b)中的单一一个图形, 连续的向坐标轴两端复制, 当冲激函数的函数值为0时, 复制失败, 当冲激函数为true时, 完成一次复制判定, 所以我们看到了图像(f), 他描述的是采样结果, 也说明了, 采样结果的频域图像就是原始信号频域图像的不断复制、堆叠

当我们的冲激函数频率过低, 导致其在频域图像上 \(f_s\)\(2f_s\)之间的间隔过于小, 这将会导致上述的图像复制判定过程太过于密集, 产生了如下图像

image-20230417183011781

称之为混叠, 也就是说, 采样结果在频域上的图像发生了重合

有了前面的铺垫, 什么是反走样

有两种普遍做法

第一种, 直接增大采样率(冲激函数频率增大), 但这个会增加计算开销

第二种, 正经的反走样算法, 如下所述

最普遍的传统操作(传统指的是不引入机器学习), 首先做一个模糊操作, 然后再采样

我们这个模糊操作, 相当于删除了频域图上, 远离中心的高频信号,只保留低频信号(下面的图很直观)

image-20230426215010844

这样就不会发生混叠了(即使采样率较低)

也就是现实中的MSAA抗锯齿 也就是 多重采样抗锯齿

MSAA抗锯齿

首先, 把连续的, 原本要映射到离散像素上的图片数据留着, 不要直接映射

我们先把这些数据映射到一个虚拟的屏幕上, 这个屏幕的每个像素都是由更多的像素点组成的

image-20230426220203189

下图是四倍采样

由于这些像素点实际上不会映射到硬件上的四倍像素上, 所以运算开销要比真实的四倍像素小得多, 比一倍像素的开销大不了多少, 因为这个只是一个判定问题, 模糊处理后, 数据不会在后续步骤中维持4x4的倍率, 而是维持原始分辨率的数据容量

模糊处理方式是: 判定一条斜线内涵了多少个子像素点, 含有的数量比例, 会被转换为一个比例值

image-20230426220539410

然后加起来子像素, 除以子像素总数, 就可以得到一个模糊的单一像素

image-20230426220616177
image-20230426220630546

其他

介绍了一下FXAA 和 TAA和超分辨率和超采样

课外资料

卷积: https://www.bilibili.com/video/BV1Vd4y1e7pj

https://www.zhihu.com/question/22298352

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2019-2024 kier Val
  • Visitors: | Views: