水平集方法是一种隐式描述移动界面的欧拉方法, 最早由 Osher 和 Sethian 在1988年引入。
在区域Ω \OmegaΩ 内,考虑随时间t tt 演化的界面Γ = Γ ( x , t ) \Gamma=\Gamma(x,t)Γ = Γ ( x , t ) ,其中x xx 表示Γ \GammaΓ 上的一点。移动界面可以用一个函数Φ ( x , t ) \Phi(x,t)Φ ( x , t ) 的零水平集表示, 即Γ = { x ∣ Φ ( x , t ) = 0 } \Gamma=\{x|\Phi(x,t)=0\}Γ = { x ∣ Φ ( x , t ) = 0 } 。给定Ω \OmegaΩ 上的速度向量场V ⃗ ( x , t ) \vec{V}(x,t)V ( x , t ) ,则方程( 1 ) (1)( 1 ) 描述了Φ \PhiΦ 的水平集以速度V ⃗ ( x , t ) \vec{V}(x,t)V ( x , t ) 在区域Ω \OmegaΩ 中传播的过程,该方程就称为水平集方程。
Φ t + V ⋅ ∇ Φ = 0 (1) {\Phi}_t + V \cdot \nabla\Phi = 0 \tag{1}
Φ t + V ⋅ ∇ Φ = 0 ( 1 )
假设我们关注Φ ( x , y , t ) = 0 \Phi(x,y,t)=0Φ ( x , y , t ) = 0 所表示的移动界面。这意味着界面上的点在移动过程中,始终符合Φ ( x , y , t ) = 0 \Phi(x,y,t)=0Φ ( x , y , t ) = 0 .如此则有:
d d t Φ ( x ( t ) , y ( t ) , t ) = 0 \frac{d}{dt}{\Phi\left(x(t),y(t),t\right)}=0
d t d Φ ( x ( t ) , y ( t ) , t ) = 0
应用链式求导法则:
Φ t + Φ x x t + Φ y y t = 0 {\Phi}_t+{{\Phi}_x}{x_t} + {{\Phi}_y}{y_t} = 0
Φ t + Φ x x t + Φ y y t = 0
Φ t + ( x y , y t ) ⋅ Φ y y t = 0 {\Phi}_t+ (x_y,y_t)\cdot {{\Phi}_y}{y_t} = 0
Φ t + ( x y , y t ) ⋅ Φ y y t = 0
Φ t + V ⃗ ⋅ ∇ Φ = 0 (2) {\Phi}_t+ \vec{V}\cdot{\nabla{\Phi}}=0 \tag{2}
Φ t + V ⋅ ∇ Φ = 0 ( 2 )
其中V ⃗ = ( x y , y t ) \vec{V}=(x_y,y_t)V = ( x y , y t ) .这就是我们需要求解的水平及方程。方程( 2 ) (2)( 2 ) 描述了水平集在外部速度场中的移动,建立了隐式表达与显式表达之间的桥梁。
进一步看,水平集曲面的法向量可以如下表示:
N ⃗ = ∇ Φ ( x , y , t ) ∣ ∇ Φ ( x , y , t ) ∣ \vec{N} = \frac{\nabla\Phi(x,y,t)}{\left|\nabla\Phi(x,y,t)\right|}
N = ∣ ∇ Φ ( x , y , t ) ∣ ∇ Φ ( x , y , t )
观察方程( 2 ) (2)( 2 ) ,V ⃗ ⋅ ∇ Φ \vec{V}\cdot{\nabla{\Phi}}V ⋅ ∇ Φ 这一项可以理解为:这些点在水平集曲面法向上的分量 才会影响曲面的形状。切向上面的速度只是在曲面内部平移。
法向上的分量可以表示为:
V n = V ⃗ ⋅ N ⃗ = V ⃗ ⋅ ∇ Φ ( x , y , t ) ∣ ∇ Φ ( x , y , t ) ∣ {V_n} = \vec{V}\cdot{\vec{N}} = \vec{V}{\cdot} \frac{\nabla\Phi(x,y,t)}{\left|\nabla\Phi(x,y,t)\right|}
V n = V ⋅ N = V ⋅ ∣ ∇ Φ ( x , y , t ) ∣ ∇ Φ ( x , y , t )
继续变换:
V n ∣ ∇ Φ ( x , y , t ) ∣ = V ⃗ ⋅ ∇ Φ ( x , y , t ) {V_n} {\left|\nabla\Phi(x,y,t)\right|} = \vec{V}{\cdot} \nabla\Phi(x,y,t)
V n ∣ ∇ Φ ( x , y , t ) ∣ = V ⋅ ∇ Φ ( x , y , t )
将这一项代入方程( 2 ) (2)( 2 ) ,得到用于计算的方程:
Φ t + V n ∣ ∇ Φ ( x , y , t ) ∣ = 0 {\Phi}_t + {V_n} {\left|\nabla\Phi(x,y,t)\right|}=0
Φ t + V n ∣ ∇ Φ ( x , y , t ) ∣ = 0
这是一个标量方程,很容易用数学方法求解。
∣ ∇ Φ ( x , y , t ) ∣ {\left|\nabla\Phi(x,y,t)\right|}∣ ∇ Φ ( x , y , t ) ∣ 一项,在标准的有向距离场中应该恒等于1,但非均匀速度场下,每一步之后该特征就会被破坏,需要进行重新初始化操作。如果速度场式均匀的,则方程变为:
Φ t + V n = 0 {\Phi}_t + {V_n}=0
Φ t + V n = 0
Φ = C + t V n \Phi = C + t{V_n}
Φ = C + t V n
有解析解。实际上Level Set方法退化为最小距离场方法。
Level Set 方法原始文献:
Osher, Stanley, and James A Sethian. “Fronts Propagating with Curvature-Dependent Speed: Algorithms Based on Hamilton-Jacobi Formulations.” Journal of Computational Physics 79, no. 1: 12–49.
本文参考了:
http://weihuayi.github.io/numerical/Levelset-method.html
附件们