天天看点

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

本章节建议参考另一位前辈写的笔记,自己整理的较为混乱。

因为计算机按照01 bit储存的特征,其值是离散的。在人眼看显示器的过程中,是将离散值转换成连续值脑补的过程,类似于动画帧数足够,哪怕有间隔看起来也是连续的。与其相反在计算机读入或者储存的时候,需要将连续值转换为离散值。一个常用的方法是采样(sampling)再重建(Reconstruction),可以参考知乎的这个链接。下图是一个典型的录音机模型,将连续的声波转换成磁带内的电压值,再可以通过播放器转换回来。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理
需要注意sample rate,即选取sample点的间隔是多少,会对结果产生较大影响。例如下图是两个一模一样的连续函数,high rate的上图很好的模拟了原函数,但low rate的下图则完全错误了。实际操作时因为sample rate是固定的,我们需要移除过高频率的连续函数,否则较低的sample rate对这些过高频率函数的采样一定会有错误的结果。在重建的过程中,我们需要使用filter将离散的阶梯状的线变为连续平滑的曲线。在重建的时候,可能存在采样点重建时有两种可能的情况,而我们选择了错误的那一条并产生了奇怪的效果,这样就称为走样(aliasing)或者混叠。为了提高采样与重建的稳定性,显然我们需要选择正确的采样速度,采样与重建的过滤器以及重建曲线的平滑度。
【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

1. 卷积Convolution

一个中文的介绍链接见此知乎回答。卷积会利用两个函数生成一个新的函数,连续或者离散以及domain的维度都可以是多变的,记住里面包含了翻转和滑动两个意思。即\((a\star f)(x)=\sum_i a[i]f[x-i]\)中\(-i\)代表了翻折,\(x\)代表了对齐的滑动。反转的原因是因为过滤器\(f(x)\)代表了一个信号在相对位置x下依然能产生的影响,故\(x-i\)说明的是以\(i\)为坐标系原点,\(x\)在哪里的相对位置,因此\(f[x-i]\)形容的是信号\(a[i]\)能传递到\(x\)节点的比重。

1.1 简单离散卷积

下图是一个简单的离散卷积,其中a代表了值,b代表了权重,卷积结果为加权和。注意b序列中6为原点对应的中心值,然后往外的权重依次减少,同时拥有整体权重和为1的特征(一共十六份,每份1/16)。在实际操作的时候我们通常将b的相对可用范围设置为\([-i,i]\)而不是\((-\infty,\infty)\)。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

1.2 过滤器

对于卷积过滤器而言,上文的\(b\)可作为一个简单的box filter,即使用在\([-r,r]\)之间平分1的方法,每份占据\(\frac{1}{2r+1}\)。如下图所示,一个01的阶梯方程经过卷积后成为了一个较为平滑,类似sigmoid函数的样子。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

需要注意的是,虽然我们将ab分为了值和权重,但实际上两者是互相影响对称的,在这种思考环境下过滤器也不一定序列和必须为1。卷积操作满足commutative,associative和distributive的特征。如同矩阵乘法一样,我们可以认为\(0,0,0,1,0,0,0\)这样的序列,即仅在原点为1的过滤器为单位1,也被称为discrete impulse。因此,如下的常规algebra操作也是可行的。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

1.3 简单连续卷积

对于连续函数而言是类似的,我们将过滤器\(g(x)\)中的原点\(g(0)\)移动至与f(t)对齐,故使用\(g(x-t)\)向右移动t各单位。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

与discrete impulse类似,continuous function版本的单位1被称为Dirac Impulse或者Dirac delta function,写作\(\delta(x)\),他拥有除了\(f(0)\)较大以外任何\(f(x)=0\)的性质,如下所示。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

1.4 连续与离散空间的转换

连续到离散空间的采样较为简单,可以直接按照采样频率选择离散点即可。重建的过程我们会使用一个连续的filter \(f(x)\)让以下卷积发生。这里要注意虽然a是离散的,但是f是连续的便可以给最后的卷积带来一些连续的变化。卷积的思想可以被轻松拓展到更高维度,这里不做阐述。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

2. 卷积过滤器

需要注意过滤器\(f(i)\)代表的是信号在\(i\)轮以后的影响力,拓展多维也是类似的,即基于相对量的影响因子。这一节主要对不同的常用过滤器进行介绍,默认情况下每个过滤器有自己的半径,例如box filter的半径是1/2, cubic filter的半径是2等。同时过滤器的积分应该为1来保持信号的平均值不变。当我们需要改变半径的时候,我们写作\(f_s(x)=\frac{f(x/s)}{s}\),即将宽度拉长s倍,长度降低s倍。分类如下

  • Box Filter,平均分布的过滤器,需要注意连续函数需要一边封闭一边开口。
  • Tent Filter,三角形分布的过滤器,半径为1,主要与\(1-|x|\)相关。
  • Gaussian Filter,正态分布的过滤器,更为平滑。因为正态分布没有边界,我们通常基于需求取一个半径来剪裁正态分布。当进行拉伸操作的时候,我们可以直接选择将standard deviation和选择的半径同时增加s倍即可,因为这样只是横向拉伸但是总体的面积依然为1。本书推荐了一个\(\sigma=1,r=3\)的初始值。
  • B-Spline Cubic Filter, 是由分段三阶多项式构成的一个特殊函数,拥有连续的一阶微分和二阶微分,通常的半径为2,值得注意的是它可以写作四个box filter的卷积形式。
    【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理
  • Catmull-Rom Cubic Filter,是上个的修改版,其顶端至1,但是存在一些负数部分在[1,2]之间。
    【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理
  • Mitchell-Netravali Cubic Filter, 结合了上两个filter,分别的权重为1/3和2/3。
    【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

另外我们有一些术语,例如Impulse指的是之前的单位1,Impulse Response说的是函数(在单位1的impulse下产生的效果),插值过滤器指重建的函数经过原函数的采样点并连接他们(例如Catmull-Rom filter,\(f(0)=1,f(i)=0\))。

带有负值的过滤器会造成被称为ringing或者overshoot的效果,让原函数值变动较大点在重建函数处有更大的波动性(该点会在前后被用于负值过滤器的部分),如下图所示。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

过滤器如果将定值序列重建成定值方程,我们称这个过滤器是ripple free的,这个条件与之前提到的过滤器整数位求和为1是一致的(因为我们使用的是sequence所以不能使用积分的思想,得看成discrete point)。例如下图有四个采样点,半径为1的tent filter是ripple free的但标准差为0.5的正态分布filter则不是的。更为直接的理解方式是如果把一个直线或者稳定的信号采样再重建结果应该也是一个稳定的直线信号。按照求平均值的逻辑可直接得到公式。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

我们至此介绍的所有过滤器中除了正态分布以外在标准半径下都是ripple free的,但是拉伸后则需要额外判断。当然我们永远可以选择修正滤波器(P205,看不懂怎么操作的)。另外对于连续的过滤器而言还有degree of continuity的概念,即最高几阶微分在所有地方都是成立的。

对于高维的过滤器而言,有称作separable filter的方法,即将多维设置成1D的连乘形式。例如以下是二维的tent filter与正态分布filter的函数。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

这么做的好处是因为双重求和的时候两个维度的值可以如下加以化简,并储存\(S[i]\)的值,在重复利用时直接使用,可大大减少计算量。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

3. 图像的信号处理

3.1 常用的过滤器视觉效果

我们可以通过重建过滤器的方法来实现模糊的效果,具体如下

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

与其相反,我们可以增加一部分强度再减去卷积来达到强化边缘的效果,具体如下

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

对于平移操作我们可以形成一个过滤器\(d_{m,n}\)让原图信号位移到相对距离\((m,n)\)处,见下。这么一来去掉RGB可以形成一个平移后的阴影。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

3.2 处理走样aliasing

如下图所示,采样表示的像素图在人眼还原时会有奇怪的现象发生,例如左侧纱帘上的moire pattern以及右侧直线的抖动与颜色不均。从根本上,走样和清晰度之间存在一个trade off的关系,如果用更平滑的filter则会增加模糊度但是走样的情况会更低。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

3.3 重新采样Resample

当改变采样速率以及更改图片大小的时候我们需要重新采样,例如将大屏幕改到小屏幕的过程中我们可以丢掉一部分的像素,也可以利用重新采样的方法来实现,即基于原尺寸重建再采样,一维版本如下由下图可见。要注意的是使用的filter是斜着的两次filter的和。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理
【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

在改变图片大小时,我们可以选择去掉边缘,加上一个边缘或调整过滤器。一般使用第二种快捷有效的方法或者第三种表现最好的方法。当低维往高维变换时重建过滤器更为重要,高维往低维变换的时候采样过滤器更为重要。实际操作的时候,一般box filter, tent filter和三阶B-spine用的比较多。可分过滤器依然能很大程度上为我们减少计算时间,可以一个维度一个维度的逐步变化而不影响结果。

3. 采样理论

采样理论主要运用到了卷积和傅立叶变换。

3.1 傅立叶变换

傅立叶早期提出了任何连续周期信号都可以由一组适当的正弦曲线组合而成,傅立叶级数使用不同频率的sin函数加权叠加来模拟任何一个函数。后来推导出来的傅立叶变换则去掉了周期信号的条件,对于非周期信号也可以进行模拟(认为其周期无穷大)。其中傅立叶变换将函数转换为基的系数,逆傅立叶变换则将基的系数还原为函数。一个基础的科普可以参考此知乎链接,另外这个B站链接包含了以重心来思考的方法。傅立叶变换的过程类似于下图,是一个时域往频域转换的过程。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

里面需要注意的有彼此正交的\(\{1,sin(x),cos(x),\cdots, sin(nx),cos(nx)\}\),正交函数的定义(相乘积分为0),欧拉定理(\(e^{ni}\)代表单位圆沿着逆时针走距离n)。傅立叶变换因为是按照顺时针运动因此多了一个负号,而积分内的\(f(x)\)可以理解为在单位圆上行走时振幅的改变量,积分并除以长度就能得到重心,傅立叶变换得到的\(\hat{f}(x)\)则没有除去长度,而是指向了重心方向的一个点。

【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理
【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

傅立叶变换还有以下的一些性质

  • \(\int (f(x))^2 dx = \int(\hat{f}(u))^2du\),这代表了时空域能量是一样的。
  • \(\mathcal{F}{af}=a\mathcal{F}{f}\)
  • \(\mathcal{F}{f(x/b)}\) = b\hat{f}(bx)$,代表时空域的拉伸效果也是一样的
  • f的均值等于\(\hat{f}(0)\)
  • 如果f是实函数,那么\(\hat{f}\)是一个偶函数(沿着y轴对称)。

3.2 傅立叶变换与卷积的联系

3.3 过滤器的傅立叶变换

  • Box, \(\methcal{F}{f_{box}}=\frac{sin(\pi u)}{\pi u}=sinc(\pi u)\)
  • Tent, 两个box叠加所以是\(sinc^2(\pi u)\)
  • B-splin,四个box叠加所以是\(sinc^4(\pi u)\)
  • 正态分布为\(e^{-(2\piu)^2/2}\),需注意这里又变成了一个正态分布,只是标准差变成了\(1/2\pi\)。

    具体情况可以见下图

    【读书笔记】计算机图形学基础(虎书)第9章 - 信号处理

3.4 狄拉克脉冲

3.5 采样和走样

继续阅读