计算机图形学基础(9.2)

752 阅读7分钟

Category:Higher Mathematics & Computer Graphics Application

正文

9 信号处理

9.2 卷积

在讨论采样和重建算法之前,我们将首先检查它们所基于的数学概念——卷积。卷积是一个简单的数学概念,它是用于采样、过滤和重建的算法的基础。它也是我们将在本章后面分析这些算法的基础。

卷积是对函数的操作:它接受两个函数并将它们组合起来以产生一个新函数。在本书中,卷积算子用星号表示:对函数 f 和 g 应用卷积的结果是 f g。我们说f和g卷积,fg是f和g的卷积。

卷积可以应用于连续函数(为任何实参 x 定义的函数 f(x))或离散序列(仅为整数参数 i 定义的函数 a[i])。它也可以应用于在一维、二维或更高维域上定义的函数(即,一个、两个或多个参数的函数)。我们将首先从离散的一维情况开始,然后继续介绍连续函数以及二维和三维函数。

为了方便定义,我们通常假设函数的域永远存在,当然在实践中它们必须在某个地方停止,我们必须以特殊的方式处理端点。

image.png

9.2.1 移动平均线

要了解卷积的基本情况,请考虑使用移动平均线平滑一维函数的示例(图 9.3)。为了在任何点获得平滑值,我们计算函数在每个方向上延伸距离 r 的范围内的平均值。距离 r,称为平滑操作的半径,是控制平滑程度的参数。

我们可以在数学上为离散或连续函数陈述这个想法。如果我们要平滑一个连续函数 g(x),平均意味着 g 在一个区间上积分,然后除以区间的长度:

image.png

另一方面,如果我们对离散函数 a[i] 进行平滑处理,平均意味着将一系列索引的 a 相加并除以值的数量:

image.png

在每种情况下,都会选择归一化常数,这样如果我们平滑一个常数函数,结果将是相同的函数。

这种移动平均线的思想是卷积的本质;唯一的区别是,在卷积中,移动平均值是加权平均值。

9.2.2 离散卷积

我们将从最具体的卷积案例开始:将离散序列 a[i] 与另一个离散序列 b[i] 进行卷积。结果是一个离散序列 (a b)[i]。这个过程就像用移动平均线对 a 进行平滑处理,但这次不是对距离 r 内的所有样本进行同等加权,而是使用第二个序列 b 为每个样本赋予权重(图 9.4)。值 b[i - j] 给出了位置 j 处样本的权重,该位置距离我们正在评估卷积的索引 i 的距离为 i - j。以下是 (a b) 的定义,用公式表示:

image.png

image.png

通过省略 j 的界限,我们表明这个和运行在所有整数上(即从 -∞ 到 ∞)。图 9.4 说明了如何计算一个输出样本,使用 b = 1/16 [..., 0, 1, 4, 6, 4, 1, 0,...] 的示例,即 b[0] = 6/16 ,a[±1] = 4/16 等。

在图形中,两个函数之一通常具有有限支持(如图 9.4 中的示例),这意味着它仅在参数值的有限区间内为非零。如果我们假设 b 有有限的支持,那么有一些半径 r 使得当 |k| 时 b[k]=0 > 河。在这种情况下,我们可以将上面的总和写为

image.png

我们可以在代码中表达定义

image.png

卷积过滤器

卷积很重要,因为我们可以使用它来执行过滤。回顾我们的第一个过滤示例,即移动平均值,我们现在可以重新解释该平滑操作作为特定序列的卷积。当我们计算出一些有限范围的索引范围内的平均值时,这与将范围内的点加权相同,并用零点加权其余点。这种过滤器在非零的间隔上具有恒定值,称为框滤波器(因为绘制图形,它看起来像矩形,请参见图9.5)。对于半径为R的盒子滤波器,重量为1/(2R 1):

image.png

image.png

如果将此滤波器代入方程(9.2),您会发现它简化为方程(9.1)中的移动平均线。

如本例所示,卷积滤波器通常设计为总和为 1。这样,它们不会影响信号的整体电平。

示例(框和步骤的卷积)。对于一个简单的滤波示例,让信号为阶跃函数

image.png

过滤器是以零为中心的五点盒式过滤器,

image.png

卷积a和b的结果是什么?如图 9.6 所示,在特定索引 i 处,结果是从 i - 2 到 i 2 范围内的阶跃函数的平均值。如果 i < -2,我们对所有零进行平均,结果为零。如果 i ≥ 2,我们对所有的取平均值,结果为 1。中间有 i 3 个,产生值 (i 3)/5 。输出是一个线性斜坡,在五个样本中从 0 变为 1:1/5 [..., 0, 0, 1, 2, 3, 4, 5, 5,...]。

image.png

卷积的特性

到目前为止,我们编写的方式似乎是一个不对称的操作:A是我们要平滑的序列,B提供了权重。但是,卷积的不错属性之一是,它实际上没有任何区别,即:过滤器和信号是可以互换的。要看到这一点,只需重新考虑等式(9.2)中的总和,而索引从滤波器B的原点计数,而不是从a的原点进行计数。也就是说,我们用i -k代替J。这种变量变化的结果是

image.png

这与等式 (9.2) 完全相同,但 a 充当滤波器,b 充当信号。因此,对于任何序列 a 和 b,(a b)=(b a),我们说卷积是一种交换运算。1 更一般地说,卷积是一种“类似乘法”的运算。就像数字或函数的乘法或加法一样,参数的顺序和括号的位置都不会影响结果。此外,卷积以与乘法相同的方式与加法相关。准确地说,卷积是可交换的和关联的,并且是可分配的。

image.png

如果我们认为卷积像乘法一样,这些属性是非常自然的,并且他们非常方便地了解,因为它们可以通过简化卷积来帮助我们在实际计算它们之前通过简化卷积来节省工作。例如,假设我们要采用一个序列A并与三个过滤器B1,B2和B3进行卷积,也就是说,我们想要((A B1)B2)B3。如果序列很长并且过滤器短(即它们的半径很小),则首先将三个过滤器(计算B1 B2 B3)首先相连,最终将结果与信号相交,计算A(计算A)(计算A)(计算A(计算)B1 B2 B3),我们从关联性中知道的结果相同。

一个非常简单的过滤器用作离散卷积的身份:它是半径零的离散过滤器,或序列d [i] = ...,0,0,0,1,0,0,0,4.(图9.7)。如果我们与信号A进行卷积,则总和中只有一个非零项:

image.png

image.png

很明显,将 a 与 d 卷积只会再次返回 a。序列 d 称为离散内冲。它有时在表示滤波器时很有用:例如,用滤波器 b 对信号 a 进行平滑然后从原始信号中减去它的过程可以表示为使用滤波器 d - b 的单个卷积:

image.png

9.2.3 卷积作为移位滤波器的和

还有另一种完全等效的解释方程(9.2)的方法。一次查看一个 b 的样本会导致我们已经看到的加权平均解释。但是,如果我们省略 [i],我们可以将总和视为将整个序列加在一起。完成这项工作需要一个符号:如果 b 是一个序列,那么向右移动 j 个位置的同一个序列称为 b→j(图 9.8):

image.png

image.png

然后,我们可以将方程式(9.2)作为有关整个序列(a* b)而不是按元素的陈述:

这样看,卷积是 b 的移位副本的总和,由 a 的条目加权(图 9.9)。由于可交换性,我们可以选择 a 或 b 作为过滤器;如果我们选择 b,那么我们将为输入中的每个样本添加一个过滤器副本。

image.png