三維網格補洞算法(Radial Basis Function)

  在逆向工程中,因爲設備或模型的緣由,咱們獲取獲得的三維模型數據每每並不完整,從而使得生成的網格模型存在孔洞,這對後續的模型分析會形成影響。下面介紹一種基於徑向基函數(RBF:Radial Basis Function)的三角網格補洞方法。node

Step 1:檢測孔洞邊界網絡

  三角網格是由一系列頂點(V)以及由這些頂點所構成的三角面片(F)所組成,由三角面片能夠獲得網格的邊(E)。一般一條邊鏈接兩個三角面片,這種邊稱爲網格內部邊,而若是某條邊僅鏈接一個三角面片,那麼稱這條邊爲網格邊界邊,全部的邊界邊按順序鏈接以後就造成了網格的孔洞。ide

Step 2:初始化網格函數

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

  (1)獲得孔洞邊界點信息,計算邊界邊長度的平均值lspa

  (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
View Code

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.

相關文章
相關標籤/搜索