基於網格的分割線優化算法(Level Set)


  本文介紹一種網格分割線的優化算法,該方法能夠找到網格上更精確、更光滑的分割位置,並且分割線能夠自由地合並和分裂,下面介紹算法的具體原理和過程。

  曲面上的曲線可以由水平集(level set)形式表示,通常表示為φ(r) = 0,其代表曲面上具有相同函數值的等值曲線,由於函數值為零,一般稱為零水平集。當曲線在曲面上移動時,可以用如下水平集方程表示:

上式為函數φ(r)對時間t的偏導,即函數φ(r)隨時間t的變化情況,等式右邊v表示曲線移動速度,▽φ表示曲面上函數φ(r)的梯度。

  驅動曲線在曲面上移動有多種方式,而測地曲率流(geodesic curvature flow)是其中最常見的形式,如果以測地曲率來驅動曲線移動,那么曲線的水平集方程可以表示為:

此時函數φ(r)就是曲面上各點到曲線的測地距離(曲線的一側為正,另一側為負),而移動速度就是曲線的測地曲率

  上述方程表示在測地曲率的作用下曲線長度不斷減小,並且本身保持光滑,同時曲面上測地曲率越大的區域曲線移動速度越快。如果在方程中加入曲面的幾何特性g(r)權重之后,那么曲線可以移向期望的目標區域,此時對應的水平集方程表達式為:

其中g(r)的范圍為[0,1],在目標區域g(r) → 0。

  上述水平集方程有不同的求解方式,文章[Kaplansky et al. 2009]采用顯式積分的方式來進行求解:

其中φ(tn)代表tn時刻曲面上函數φ(r)值。

  文章[Zhang et al. 2010]采用半隱式積分的方式來求解水平集方程:

其中φ(tn)代表tn時刻網格曲面上函數φ(r)值;S是一個對角矩陣,其表達式為S = diag(s1, s2, …, sn),式中si是頂點vi周圍1環鄰域三角片面積的1/3;G也是一個對角矩陣,其表達式為G = diag(|▽φ|1, |▽φ|2, …, |▽φ|n),式中|▽φ|i是頂點vi上函數φ(r)的梯度模長;H的表達式如下:

式中τ1τ2以及αijβij的含義如下圖所示:

  對比上面兩種求解方式,半隱式積分的求解方式更加穩定,迭代步長能夠取相對較大值,但是在每次迭代過程中都需要求解線性方程組,因此計算過程相對更加耗時。

% Pseudocode
1. Initialize the level-set function U
for i = 1:iter
    2.1. Calculate the gradient ▽U
    2.2. Normalize the gradient ▽U/|▽U|
    2.3. Calculate the divergence div(g*▽U/|▽U|)
    2.4. Update the level-set equation ΔU = step * |▽U| * div(g*▽U/|▽U|)
    2.5. Determine the new curves as its zero level-set
end
View Code

 

本文為原創,轉載請注明出處:http://www.cnblogs.com/shushen

 

 

參考文獻:

[1] Kaplansky, L. and Tal, A. (2009), Mesh Segmentation Refinement. Computer Graphics Forum, 28: 1995–2003.

[2] Zhang, J., Wu, C., Cai, J., Zheng, J. and Tai, X.-c. (2010), Mesh Snapping: Robust Interactive Mesh Cutting Using Fast Geodesic Curvature Flow. Computer Graphics Forum, 29: 517–526.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM