1. 程式人生 > >3D三角形網格補洞演算法及原始碼(轉)

3D三角形網格補洞演算法及原始碼(轉)

在逆向工程中,由於裝置或模型的原因,我們獲取得到的三維模型資料往往並不完整,從而使得生成的網格模型存在孔洞,這對後續的模型分析會造成影響。下面介紹一種基於徑向基函式(RBF:Radial Basis Function)的三角網格補洞方法。

Step 1:檢測孔洞邊界

  三角網格是由一系列頂點(V)以及由這些頂點所構成的三角面片(F)所組成,由三角面片可以得到網格的邊(E)。通常一條邊連線兩個三角面片,這種邊稱為網格內部邊,而如果某條邊僅連線一個三角面片,那麼稱這條邊為網格邊界邊,所有的邊界邊按順序連線之後就形成了網格的孔洞。

Step 2:初始化網格

  為了使孔洞填充簡單、健壯,可以採用最小角度法進行網格修補,具體步驟如下:

  (1)得到孔洞邊界點資訊,計算邊界邊長度的平均值l

  (2)計算每個邊界點的兩條相鄰邊的夾角大小。

  (3)找出具有最小夾角的邊界點,計算它的兩個相鄰邊界點的距離s,判斷s < 2×l是否成立:若成立,則按下圖所示增加一個三角形,若不成立則增加兩個三角形。

  (4)更新邊界點資訊。

  (5)判斷孔洞是否修補完整,若未完整,轉(2),否則結束。

Step 3:最小二乘網格

  初始化補洞得到的網格質量不是很好,我們需要優化網格頂點的位置,優化的條件是:

其中di為頂點vi的1環鄰域頂點數。

  上式可以用一個線性方程組來描述:LV = 0,其中L是Laplace矩陣,具體形式為:

                                                     

     矩陣L的秩等於n – k,n為網格頂點的數目,k為網格連通區域的個數,如果網格是全連通的,那麼矩陣L的秩是n – 1。因此如果我們要使方程有解,需要加入m(m ≥ k)個控制頂點座標vs作為方程的邊界條件,在實際中我們將初始化網格的邊界頂點作為控制頂點。

  其實上述線性方程組的求解等價於如下能量函式最小化的求解:

  能量函式的第一部分是使得網格頂點儘量光滑,即每個頂點位於其1環鄰域頂點的中心,第二部分是為了控制頂點的位置滿足要求。

  最小二乘網格的優勢是能夠生成高質量的光滑網格,生成過程僅需要網格的拓撲連線關係和少數控制點的座標資訊。

Step 4:徑向基函式(RBF)隱式曲面

  徑向基函式是一個僅依賴於離控制點c距離的函式,即h(x,c) = h(||x - c||),距離通常是歐式距離,也可以是其他形式距離。徑向基函式網路是一個三層BP網路,其可以表示為多個基函式的線性組合:

  下面列出2個最常用的基函式形式:

  (1)Gaussian:h(r) = e-(εr)2

  (2)Polyharmonic spline:h(r) = rk,k = 1、3、5、… 或h(r) = rkln(r),k = 2、4、6、…

  利用徑向基函式網路並通過給定控制點xi和對應的值fi之後,可以求解得到網路中的係數λi,因此徑向基函式網路能夠解決空間散亂資料點的平滑插值問題,函式的零等值面就是我們要求的曲面。

  在實際求解時函式f(x)表示式中通常會增加一個一次多項式P(x),如下:

                                                   

                                            其中:

                                                    

  將控制點位置xi和值fi代入函式f(x)可以得到如下方程,求解之後即可確定隱式曲面f(x)。

  控制點xi可分為三類:

  (1)邊界控制點:曲面通過的點,f(xi) = 0

  (2)外部控制點:將邊界控制點沿法向正方向移動一小段距離而得到的控制點,取f(xi) = -1

  (3)內部控制點:將邊界控制點沿法向負方向移動一小段距離而得到的控制點,取f(xi) = 1

  計算時我們選擇的基函式為h(r) = r3,其實此時隱式曲面函式滿足Δ3f = 0,將基函式代入後得到隱式曲面的表示式如下:

Step 5:牛頓插值

  為了得到插值隱式曲面的網格,我們需要把最小二乘網格的頂點投射到隱式曲面上,這裡我們採用牛頓迭代法:

  最小二乘網格的頂點位置作為迭代初始條件,當||xk+1 – xk|| < ε時,迭代停止,ε為設定的誤差。上式中梯度表示式如下:

效果:

參考文獻:

[1] Olga Sorkine and Daniel Cohen-Or. 2004. Least-Squares Meshes. In Proceedings of the Shape Modeling International 2004 (SMI '04). IEEE Computer Society, Washington, DC, USA, 191-199.

[2] Greg Turk and James F. O'Brien. 1999. Shape transformation using variational implicit functions. In Proceedings of the 26th annual conference on Computer graphics and interactive techniques (SIGGRAPH '99). ACM Press/Addison-Wesley Publishing Co., New York, NY, USA, 335-342.

[3] 袁天然. 三角網格模型光順簡化和縫補技術的研究及應用[D]. 南京航空航天大學, 2007.

以上演算法大神已經說得很明白了,就不在此多嘴了,下面找來該演算法實現的開原始碼,感興趣的讀者可自行下載編譯執行,由於使用了C++11新特性,Windows下編譯需使用Visual Studio 2013以上版本。

本人將原始碼下載後經Visual Studio 2015編譯工程,可通過VS直接開啟編譯執行

以下為本人測試效果: