今天写的内容是关于在level set方法中用到的Eikonal方程。具体讲解如何求解这个方程。
方程的定义:其中d(x)是指x到S的距离
简单介绍一下fast sweeping method。它采用了差分方法和轮换次序的Gauss-Seidel迭代来解决这个离散问题的。我们今天的描述在2D中进行。这种算法分为3步。
我们将需要求解的区域进行网格化,使用xi,j代表计算区域中的网格点,h代表网格的宽度,dij代表在点xij处的距离函数数值解。
1.初始化:
首先我们标定在S中的点的距离,d(x)=0,或者靠近网格S的点确切距离函数值。也就是我们先找到包容散乱数据点的每一个网格,计算出该网格顶点到数据点的确切距离函数值。这个值在以后的计算中是固定的。然后对于求解区域中的其它点赋予一个很大的正值,这些值在以后的计算中会被更新。
2.计算点xij处的距离函数值dij:
每个网格点的距离函数就唯一的被相邻网格点的具有最小值的距离函数所决定。在网格边界点(不包括四个角点),要用到一边的差分,例如在xij,x方向上只用了一边的差分:
在四个角点上:在两个方向上都用一边差分的格式。
我们可以得到第一个方程的解:
3.用轮换次序的Gauss-Seidel迭代:在每个距离函数值未被固定的网格点,根据上式计算得到距离dij,和原值进行比较,取较小的值为当前的dij。按照四个方向进行扫描:
然后加上任意次序的扫描即可。
上述算法可以直接扩展到高维的情况。