图形学基础——傅里叶变换及球谐函数

2,133 阅读11分钟

本篇文章尽可能以一种通俗易懂的方式讲清除傅里叶变换的意义,以及它在图形学中的应用,尽量不涉及到复杂公式。【文章中内容均为个人理解,如有错误请读者指出】

如何描述信号

说到傅里叶变换,当然会想到它的一个作用就是可以将时域变换为频域。那么首先介绍什么是时域和频域呢?

我们常常用数学模型去抽象物理事件。信号也可以用数学模型来表示。有了信号的数学模型,我们就可以利用数学计算对信号模型做各种各样的改变。如果加以计算机,模电,数电的相关知识,我们就可以将我们对信号模型的改变转换为对物理信号的改变,实现我们的信号处理。

时域(时间域) ——自变量是时间,即横轴是时间,纵轴是信号的变化。其动态信号x(t)是描述信号在不同时刻取值的函数。

image.png 频域(频率域) ——自变量是频率,即横轴是频率,纵轴是该频率信号的幅度,也就是通常说的频谱图。

image.png 时域图显示振幅随时间的变化,可以看出峰值振幅为5V,可以算出频率f=6 Hz。

这里也许可能还是不够直接,再举例一个生活中的例子来帮助大家理解时频域,那就是收音机。我们使用过收音机的人都知道我们想要收听不同的电台内容时,需要对收音机进行调频操作。各个电台发射各个频率的电波,比如fm103.1啊 fm90.5啊,这个数字就是频率,这些频率在空中混在一起,彼此纠缠。手中的收音机其实是能听到各个频率的声音,但是每个台都听不清楚。你调整你收音机的这个动作叫调频,就是调整接收频率的意思。把其他频率的声音过滤掉。只听你想要的频率。

image.png 四个电台同时发送不同频率的波,彼此相互纠缠,变成“一团乱麻”。这团乱麻似的东西相互叠加,传到收音机之后,变成了四段波的矢量和。如下图。

image.png 如果将上面的信息直接播放,将会什么都听不见,为了听清楚,收音机要做的事情就是从上面叠加之后的声波中挑选出特定频率的声音。为了达到这个目的,需要做一个傅立叶变换【重点】 ,得到它的频域图

image.png

傅里叶变换

把同一件事从时域换到频域,就是傅立叶变换。把频域换到时域,就是傅立叶逆变换。为了方便理解,也可以说傅里叶变换就是将一个乱糟糟的东西按照频率的不同依次分组,傅立叶变换前后信息本质不会改变。

听说当年傅里叶老人家创造傅里叶变化是由于做热力学有关的研究时,解一个非稳态偏微分方程不太好解,但是看函数图像弯弯曲曲有点和正弦波相似,于是用几个正弦波模拟叠加成原图像,于是产生了一系列故事了~

傅里叶变换是有史以来最伟大、最深刻的数学发现之一。但不幸的是,初次见它的公式似乎很难理解其中的内涵。例如,对满足狄里赫利(Dirichlet)条件的周期信号做傅里叶变换可以得到一组傅里叶级数,其可以表示为:

image.png 这里不用管这个公式怎么来的,只要知道傅里叶变化可以将周期信号表示为一系列成“谐波关系”的正弦信号的叠加。

下图引用的是Games101中对傅里叶变换的描述

image.png

image.png

傅里叶变换在图形学中的应用

频谱图

图形学中,我们主要要讲的是二维图像傅里叶变换,但是我们首先来看一张很厉害的一维傅里叶变换动图。

v2-674ebbd43e39e73c4856c6bdb236f605_b-164992705668212.webp

一张一维图像通过傅里叶变换得到的结果是清晰可见的,那么二维图像通过傅里叶变换应该得到什么样子的结果呢?

image.png 第一眼见到这张图你一定不知道它在描述什么,他到底是怎么通过频率的信息来表示左边这种图的?这里给出原文链接,我觉得解释的非常好。通俗讲解:图像傅里叶变换 - 知乎 (zhihu.com)

image.png 上图是对一张图像的理解,那么怎么用用频谱图表示呢

image.png

右边图中,每一个点

1)它到中点的距离描述的是频率

2)中点到它的方向,是平面波的方向

3)那一点的灰度值描述的是它的幅值

所以切不可理解为左图中的每个点与右图的每个点是叠加的关系哦,而是左图一张图像实际上是对应着n张图像的组合,右图的频谱图是代表着n张不同频率的图像如何组合的。理解了上述基础知识后,我们谈谈如何利用信号处理的知识来解释图形学中遇到的一些问题。

走样(aliasing)

走样是因为信号变化太快,采样太慢,如下图。随着信号变化速度提升,使用较少的采样点采样出的信息无法恢复原来的信号。

image.png

滤波(Filtering)

滤波表示去除某种特定的频率(如高频、低频)信息。

下图是原图:

image.png

  • high-pass filter 高通滤波

下图展示了高通滤波的效果。高通即只有高频信息留下,而滤掉低频信息。那什么是高、低频信息呢?

简单理解就是颜色变化剧烈的就是高频信息,比如上面右图中心基本上都是白色的,这就是低频信息,所以使用高通滤波后中间的光亮就被去掉了。同理,对于左图而言,高频信息指的就是那些边界,因为边界的颜色或者光亮变化更强烈,可以看到最后剩下的是人的轮廓。

image.png 之前上面提到过离中心的距离代表频率,那么把右边频谱图中中间低频率的置为0,再通过逆傅里叶变换就得到了左边的图形。

  • low-pass filter 低通滤波

image.png

  • band-pass filter 带通滤波

image.png

卷积(convolution)

通过上面的分析可以知道一张图可以看作是由低频、高频、和其他频段的信号组成的。如果我们想要得到高频信号,那么就等价于给高频信号权重为1,其他频段信号权重为0。换言之,滤波其实就是加权求和,也就是卷积,即

Filtering = Convolution = Average

image.png

卷积定理: 时域(spatial domain)上的卷积等价于频域(frequency domain)上的乘积; 时域上的乘积等价于频域上的卷积; 比如我对一张图片做卷积操作,等价于我们先把图片和卷积核通过傅里叶变换转化到频域上,然后在频域上将两者相乘(可以理解成乘了一个mask),最后将相乘的结果做逆傅里叶变换即可。

image.png 时域上卷积核的大小和频域上是什么关系?

答案是负相关。时域上卷积核越大,那么对应地频域上的卷积核就越小。

采样(sampling)

采样等价于重复频率信息。 Sampling = Repeating Frequency Contents

下图左侧(a,c,e)表示信号时域上的表示,右侧(b,d,f)表示对应信号频域上的表示。

(c)表示冲激采样信号,即每隔一段时间就采样一次,它在频率上的其实也和冲激信号长得一样(d)。

在时域上的采样(e)其实就是信号和冲激采样乘积, 那么对应到频域就是二者做卷积

这里可以跳过中间步骤的理解,可以根据效果得出结论

在频域上其实就是对原频域信号不断的重复。

image.png 当然上面给出的是一种比较理想的情况,如果采样间隔较长(或者说采样较慢)的话则会导致下面sparse sampling的情况,即频域信号之间在重复时发生了混叠,及导致了aliasing现象。

image.png

(注意:上图表示的是频域上的信号表示,横轴表示频率,纵轴表示幅度,即信号强度)

反走样(Antialiasing)

上面介绍了走样发生的原因,那么如何反走样呢?

一种本质的方法是提高采样速率。但是很多情况下这不现实,我总不能随便改变一个手机或者电视的刷新频率吧?

那么另外一种替代的方法就是我对信号做截断处理,如下图示。可以看到通过截断高频信号(注意横轴表示频率),这样我们就可以避免了走样现象发生,即实现了反走样。

image.png 到此为止,也就解释了我们最前面给的例子,即先对三角形做滤波(模糊操作),然后再采样。

image.png 那么对三角形模糊处理具体是怎么做的呢?其实就是在频域上使用低通滤波将器乘以这个三角形的频域信号即可,也就是模糊操作(高通滤波的效果是保留轮廓),那对应到时域上我们可以使用一个像素大小的卷积核对单个像素做卷积操作。

球谐函数 (Spherical Harmonics)

简介

接下来将介绍大家耳熟能详的球谐函数。尽量不用各种术语来讲清楚SH(Spherical Harmonics)系数,以及SH在简单光照描述上的应用。 SH,球谐函数,归根到底只是一组基函数,至于这组基函数是怎么来的,不管他。

image.png

SH 是分阶数的:在第0阶(l=0)有1个基函数(m=0);第1阶(l=1)有3个基函数(m=-1,0,1)...第n阶(l=n)有2n+1个基函数(m=-l,...,0,...,l)。实际上,阶数越低的基函数所代表的信息就越是低频。如果要完全复原一个任意函数,我们需要无穷阶的 SH;而如果我们只要复原一个任意函数的近似(换句话说只重建出该函数的低频信息),那么我们完全可以只需要前几阶的 SH(包含 l=0,l=1,...,l=n 每一阶的所有基函数)

这里从看三维图像难免有点晕,那么我们先退化到二维图像,看他如何表示一个二维图像.

image.png 那么用它如何来表示下面的图像呢

image.png

他可以表示为 [公式]

只记系数,这个函数就压缩为了:0.5, 0.1, 0.07, 0.05, 0.3 .回到三维的情况这几个数字其实就是SH系数啦。当SH的系数用的越多,那么表达能力就越强,跟原始的函数就越接近.

image.png 当描述不同方向光照的SH基函数我们一般用到二阶或者三阶,二阶是4个系数:拓展到rgb,就是4 * 3 = 12个系数

image.png

性质

球谐函数作为基函数,还拥有一组优良的性质:

image.png

  • 基函数之间具有正交性(orthonormal)

  • 通过 投影(Projection) 可以很方便得到 SH 系数(SH coefficients)

  • 通过系数向量组与基函数组的点积(前n阶的基函数/系数共有 n*n 个)可以很方便重建球面函数

  • 支持插值,对 SH 系数的插值相当于对重建的函数值的插值。

  • 旋转不变性(rotational invariance),对函数 f 的旋转 RSH 等价于对 f(ω)的自变量的旋转 R3D;

    任意一个SH基函数都可以用同阶的基函数线性表示

应用

球谐函数的应用通常是存储一些光照信息来的,可以节省大量内存,并且简化运算,在这里不做过多描述了。

  • 预计算辐射度传输(Precomputed Radiance Transfer,PRT)

  • 光照探针(Light Probe)

    .......

参考

(36条消息) 什么叫时域和频域?蓝绿色~菠菜的博客-CSDN博客频域和时域

通俗讲解:图像傅里叶变换 - 知乎 (zhihu.com)

(5 条消息) 为什么傅里叶变换可以把时域信号变为频域信号? - 知乎 (zhihu.com)

球谐函数介绍(Spherical Harmonics) - 知乎 (zhihu.com)

(36条消息) 聊聊傅里叶变换的意义和定义泡视界的博客-CSDN博客傅里叶变换的意义和理解

Games101 计算机图形学课程笔记: Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering)almost的博客-程序员ITS404 - 程序员ITS404

【GAMES101-现代计算机图形学课程笔记】Lecture 06 光栅化 2 (反走样) - 知乎 (zhihu.com)

基于预计算的实时环境光照(Real-time Environment Lighting Based On Precomputation) - KillerAery - 博客园 (cnblogs.com)