Motivation
Morse 函数是微分拓扑的概念:涉及了微分几何以及同调的概念。
Some Concepts
切空间就是曲面经过一个点处所有曲线的切线张成的空间。
如上图,一个流形有一个图册,对流形上的函数 \(f: M \to \mathbb R\) 在 \(x \in M\) 点处求所谓的梯度,实际上是:
- 给定图册中的一个包含 \(x\) 的坐标卡,\(\varphi: U (\subset M) \to \mathbb R^n, \text{ s.t. }x \in U\),我们求 \(f \circ \varphi^{-1}: \mathbb R^n \to \mathbb R\) 在 \(\varphi(x)\) 的梯度。
- 假如 \(f \circ \varphi^{-1}\) 在 \(\varphi(x)\) 处梯度为 0,那么对于其它任意的坐标卡 \(\xi: U \to \mathbb R^n\),一样梯度为 0: $$ \begin{aligned} \left[\grad (f\circ \varphi^{-1})\circ(\varphi \circ \xi^{-1})\right] (\xi(x)) &= \left\grad (f\circ \varphi^{-1})\right \times \left[\grad (\varphi \circ \xi^{-1})\right] (\xi(x)) \newline &= \left\grad (f\circ \varphi^{-1})\right \times \left[\grad (\varphi \circ \xi^{-1})\right] (\xi(x)) \newline &= \mathrm O \times \left[\grad (\varphi \circ \xi^{-1})\right] (\xi(x)) = \mathrm O \end{aligned} $$
- 因此,\(f\) 的临界点是良定义的。
当然,还有一种方法,就是将我们研究的流形限制为 Riemann 流形。
- Riemann 流形具体定义我也不是非常清楚,但是直观想一想,我们平时用到的“性质良好”的流形,其“梯度”是显然的。
- 比如说一个流形上的函数,其函数值就是流形上的点的 height。那么,任意一个点的梯度,显然是“往上走”的。其临界点,就是最高的点。
称一个光滑函数是 Morse 函数,如果其所有临界点满足以下条件:
- 非退化
- 函数值不同
Morse Lemma
本质上来说,就是:
如果 \(\nabla f(\mathrm x) = 0, \det H_f(\mathrm x) \neq 0\),那么,我们可以变换一下坐标系,使得上面的图片成立。成立的原因如下:
在代数学中,西尔维斯特惯性定理(Sylvester's law of inertia)是指在实数域中,一个形如的二次型通过线性变换可以化简成惟一的标准型。其中的正项数(称为正惯性系数)、负项数(称为负惯性系数)以及 0 的数目惟一确定,其中的为系数矩阵的秩。正惯性系数-负惯性系数的值称作符号差。
积分曲线
积分曲线就是由实数 parameterize(i.e.实数到流形上的一个映射)的一个曲线。满足积分曲线每一处的切向量都和 Morse 函数的梯度方向是一致的。
- 注意,如果 \(M \subset \mathbb R^m\),那么积分曲线是向量值函数,Morse 函数是多元函数。因此,前者的“梯度”应该是纵坐标,后者的“梯度”应该是横坐标。
积分线的性质如下:
- 第一条,可以通过常微分方程的性质得出
- 第二条,因为每一个点都有一条经过它的积分线,因此易得
- 第三条,直观上来看,好像挺有道理。但是仔细一看,为啥起点和终点必须在临界点处?还得是靠常微分方程的性质。
Example
以 \(f(x,y) = x^2 + y^2\) 为例,按照上面的说法,那就必须满足方程:
显然,解就是:
也就是可以沿着任意从原点发出去的射线到达无穷远处。又 \(\lim_{x \to -\infty}\beta(x) = (0,0), \lim_{x \to +\infty}\beta(x) = (+\infty, +\infty)\),因此显然是满足上图的三个要求的。
稳定和不稳定流形
如第一张图,稳定流形,就是给定一个临界点(一般而言,要么是极小值,要么是极大值),我们可以得到一个区域。所有经过这个区域中某一个点的积分曲线,都以这个临界点为终点;不稳定流形的定义也类似。
如第二张图,每一个左侧的区域(由实线包围起来),都是该区域中的极大值点的稳定流形;每一个右侧的区域(由虚线包围起来),都是该区域中的极小值点的稳定流形。
Morse-Smale 函数
如果两个流形的边界交于 p 点,那么,两个子流形的边界的切线(i.e. 边界是线,而线的切空间就是切线),必须能够张成流形的切空间。
- 也就是说:两个切线不平行
- 这样,两个流形的相交区间才是有形的
Morse-Smale 复形
由 Morse-Smale 的良好性质,对于任意两个 U(p) 和 S(q),其相交区域就是一个 M-S 复形中的一个四边形单元(如右侧所示),而且这个单元必然由两个鞍点、一个极大值和一个极小值所构成。
如图,对于二维情况,就和上面所说的一样;对于三维情况,
- 1-鞍点,就是惯性系数为 1(i.e. Hessian 矩阵的合同标准型有 1 个负号)
- 2-鞍点,就是惯性系数为 2(i.e. Hessian 矩阵的合同标准型有 2 个负号)
- ……
离散情况:分片线性函数
我们可以通过以下的方法获得分片线性函数:
- 在一个光滑流形上均匀采点,对每一个点算出对应的函数值
- 将这些点连线,建立一个 mesh
- 在每个三角网格中,采用重心坐标插值来近似函数值
判断离散的临界点
Lower Link 的定义: $$ Lk_u = \set{\sigma \in Lk_u | x \in \sigma \implies f(x) < f(u)} $$ 这和 lower star(\(Lk_u = \set{\sigma \in Lk_u | x \in \sigma \implies f(x) < f(u)}\))略有不同。
如上图,粉红色+黑线条的就是 lower star,仅黑线条的就是 lower link。
对于极小值、鞍点、极大值,它们分别有不同的拓扑特征。
分片线性函数的 Morse 理论
对于不满足上面条件的函数,有时候可以通过一些小操作,就变成了满足条件的函数。
Unfolding
如图,中间的那一个点,旁边有三个高点和三个矮点,其 0 阶约化贝蒂数为 2(连通分支有 3 个)。
- 因此,既不是一般点(不与单点同调);也不是 PL 简单点(因为 0 阶约化贝蒂数为 2)
但是,我们可以将中间点视作重叠的两个点,然后再进行计算。此时发现,这两个点分别都是鞍点。
Perturbation
如果存在两个值一样的 PL 简单点,那么就加一个小扰动,让两个值不一样就好了。
Reeb 图
给定一个流形以及流形上的光滑实值函数,我们就可以求出每一个实数值对应的流形上的水平集(也就是函数值等于这个实值函数的点)。f
我们将每一个水平集的连通关系当作等价类(通俗来说,就是将圆圈缩成点),就可以得到一个 Reeb 图。
Reeb 图的性质
Morse 函数的 Reeb 图
Morse 函数相比一般函数性质更好,因此 Reeb 图也能更好地反映原始的拓扑信息。
对于一个可定向的、有 g 个洞的二维流形,Morse 函数确定的 Reeb 图中有 g 个环路。
因此,可以使用 Reeb 图,来快速地求出该二维流形的洞数,而不必仰仗计算同调。
离散 Reeb 图的构造
我们可以通过之前所说的分片线性函数,来构造离散的 Reeb 图。
我们将所有点按照 Morse 函数的值从小往大排。然后,每一个值对应的水平集,实际上就是三角形面片上的点,也就对应着若干个三角形。随着值的增加,不断有三角形被移出,同时不断有三角形进入(我们可以构建一个循环链表来实现高效的移除、进入)。
具体来说,每加入一个点的时候,就是对应以下几种情况:
极小值点
一般顶点
鞍点
对于鞍点的情况,就是要么合并,要么分裂: 1. 如果是合并,就将这个鞍点的对应的 lower star 在两个链表中分别删除,然后将两个循环链表”粘“起来,并且加入这个鞍点的 upper star 2. 如果是分裂,就将这个链表对应的 lower star 删除,然后不要把断开的部分连起来,此时这个链表应该可以分裂成多个链表了。 3. 假如说是一些奇葩的不可定向克莱因瓶之类的,可能会出现绕行方向的突变,此时需要重拍(当然,图形学中,我们遇到的都是可定向的,因此不用在意这种情况)
极大值点
首先,我们先移除这个极大值点的 lower star 的三角形。而且此时,它的链表应该已经为空了。
如何根据上面的信息绘制 Reeb 图?
我们在 Reeb 中,绘制出所有临界点即可。然后对于临界点之间的连线,就是根据一个链表的出生到消亡来绘制的。
一些应用
几何图形骨架提取
我们在关键点处(上图中,就是左脚、右脚、两手和头顶共四个点)设立一个热源,然后在流形上模拟热扩散。
之后,加入这个温度标量场性质足够良好,就将它当作 Morse 函数。
然后就是求出这个 Morse 函数的 Reeb 图。这个 Reeb 图就是其几何骨架。
还可以进行 3D mesh 的匹配。众所周知,计算两个 3D 形状的相似性是困难的事情。因此,我们将 3D 形状通过某种离散 Morse 函数,构建出 Reeb 图。然后,我们就可以对两个不同的 Reeb 图之间进行匹配。
Morse 复形算法简介
如何计算 Morse 复形?具体来说,如何在二维三角面片上,使用离散 Morse 函数,计算 Morse 复形?主要有下面三种方法:
- Boundary Based:就是试图计算出从极大/极小值点出发,到达鞍点的线。而这些线就能够分割出一个个(不)稳定流形
- Region Growth:从极大/极小点开始,逐渐加入临近的三角面片,从而逐渐得到该点对应的稳定/不稳定流形
- Watershed:将“一盆水”从极大值点“泼下去”,使之留到不同的极小值点。留到同一个极小值点的那些水,就属于同一个“流域”。而这个流域,就是一个 Morse 复形
TODO