水平集方法(Level Set Method)是一種用于界面追蹤和形狀建模的數(shù)值技術(shù)。水平集方法的優(yōu)點(diǎn)是可以在笛卡爾網(wǎng)格(Cartesian grid)上對(duì)演化中的曲線曲面進(jìn)行數(shù)值計(jì)算而不必對(duì)曲線曲面參數(shù)化(這是所謂的歐拉法(Eulerian approach))。水平集方法的另一個(gè)優(yōu)點(diǎn)是可以方便的追蹤物體的拓?fù)浣Y(jié)構(gòu)改變。例如當(dāng)物體的形狀一分為二,產(chǎn)生空洞,或者相反的這些操作。所有這些使得水平集方法成為隨時(shí)間變化的物體建模的有力工具,例如膨脹中的氣囊,掉落到水中的油滴。

方法

理解水平集方法的最簡(jiǎn)單有效的方式是先學(xué)習(xí)相應(yīng)的例子,然后學(xué)習(xí)技術(shù)性很強(qiáng)的定義。右側(cè)的圖片示例了水平集的幾個(gè)重要思想。在左上角有一個(gè)形狀--由一個(gè)良性邊界包圍的有界區(qū)域。在它的下面,紅色的曲面是相應(yīng)的水平集函數(shù)

的圖像,

的某個(gè)水平面決定了左上角的形狀,假設(shè)其中的藍(lán)色平面即為

平面,則形狀的邊界可以表示為

的零水平集,并且該形狀是平面上滿(mǎn)足

大于等于零的點(diǎn)的集合。

在上面的一行,形狀改變其拓?fù)浣Y(jié)構(gòu),分裂為兩個(gè)形狀。如果用邊界曲線參數(shù)表示形狀,這一演化過(guò)程是很難表達(dá)的。這需要一個(gè)算法能夠檢測(cè)到形狀分裂的時(shí)刻,然后為分裂后的曲線構(gòu)造新的參數(shù)。另一方面,從下面的一行可以看出水平集函數(shù)僅僅是向下方移動(dòng)了一點(diǎn)。由于在直接法中我們需要監(jiān)視所有形狀可能發(fā)生的變化情況,水平集方法處理形狀曲線要比直接方法容易得多。

在二維情況下,水平集方法意味著將平面上的閉曲線

(正如示例中的形狀)表示為二維輔助函數(shù)

的零水平集

然后通過(guò)函數(shù)

隱式的處理曲線

這一函數(shù)便被叫做水平集函數(shù)。假設(shè)

在曲線

的內(nèi)部取正值,在曲線

的外部取負(fù)值。

水平集方程

如果零水平集以速度v沿著其法線運(yùn)動(dòng),這一運(yùn)動(dòng)可以表示為水平集函數(shù)的哈密頓-雅可比方程(Hamilton-Jacobi equation):

這是一個(gè)偏微分方程,并且可以求得數(shù)值解,例如可以在笛卡爾網(wǎng)格上采用有限差分法。

然而,水平集方程的數(shù)值解需要復(fù)雜的技術(shù)。簡(jiǎn)單的有限差分法會(huì)很快導(dǎo)致不收斂。迎風(fēng)方法,諸如Godunov方法前進(jìn)緩慢;然而在水平對(duì)流場(chǎng)中,水平集方法不保持水平集的體積和形狀的守恒。

歷史

美國(guó)數(shù)學(xué)家Stanley Osher和James Sethian于20世紀(jì)80年代開(kāi)發(fā)出了水平集方法。這一方法在許多學(xué)科廣泛使用,例如圖像處理,計(jì)算幾何,最優(yōu)化和計(jì)算流體力學(xué)。

大量的有關(guān)水平集數(shù)據(jù)結(jié)構(gòu)被開(kāi)發(fā)出來(lái),使得水平集方法在計(jì)算中的應(yīng)用變得更加方便。

參閱

??流體體積法