在逆向工程中,因爲設備或模型的緣由,咱們獲取獲得的三維模型數據每每並不完整,從而使得生成的網格模型存在孔洞,這對後續的模型分析會形成影響。下面介紹一種基於徑向基函數(RBF:Radial Basis Function)的三角網格補洞方法。node
Step 1:檢測孔洞邊界網絡
三角網格是由一系列頂點(V)以及由這些頂點所構成的三角面片(F)所組成,由三角面片能夠獲得網格的邊(E)。一般一條邊鏈接兩個三角面片,這種邊稱爲網格內部邊,而若是某條邊僅鏈接一個三角面片,那麼稱這條邊爲網格邊界邊,全部的邊界邊按順序鏈接以後就造成了網格的孔洞。ide
Step 2:初始化網格函數
爲了使孔洞填充簡單、健壯,能夠採用最小角度法進行網格修補,具體步驟以下:優化
(1)獲得孔洞邊界點信息,計算邊界邊長度的平均值l。spa
(2)計算每一個邊界點的兩條相鄰邊的夾角大小。code
(3)找出具備最小夾角的邊界點,計算它的兩個相鄰邊界點的距離s,判斷s < 2×l是否成立:若成立,則按下圖所示增長一個三角形,若不成立則增長兩個三角形。orm
(4)更新邊界點信息。blog
(5)判斷孔洞是否修補完整,若未完整,轉(2),不然結束。ci
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 = 一、三、五、… 或h(r) = rkln(r),k = 二、四、六、…
利用徑向基函數網絡並經過給定控制點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,將基函數代入後獲得隱式曲面的表達式以下:
function options = RBF_Create(x, y, type) % x: input data; y: input data value options = []; options.nodes = x; switch type case 'linear' options.phi = @rbfphi_linear; case 'cubic' options.phi = @rbfphi_cubic; end [n, dim] = size(x); A = zeros(n,n); for i = 1:n r = normrow(bsxfun(@minus, x(i,:), x)); temp = feval(options.phi, r); A(i,:) = temp'; A(:,i) = temp; end % Polynomial part P = [ones(n,1) x]; A = [ A P P' zeros(dim+1, dim+1)]; B = [y; zeros(dim+1, 1)]; coeff = A\B; options.coeff = coeff; end % Radial Base Functions function u = rbfphi_linear(r) u = r; end function u = rbfphi_cubic(r) u = r.*r.*r; end
Step 5:牛頓插值
爲了獲得插值隱式曲面的網格,咱們須要把最小二乘網格的頂點投射到隱式曲面上,這裏咱們採用牛頓迭代法:
最小二乘網格的頂點位置做爲迭代初始條件,當||xk+1 – xk|| < ε時,迭代中止,ε爲設定的偏差。上式中梯度表達式以下:
效果:
本文爲原創,轉載請註明出處:http://www.cnblogs.com/shushen
參考文獻:
[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.