基於模糊聚類和最小割的層次化三維網格分割算法(Hierarchical Mesh Decomposition)


  網格分割算法是三維幾何處理算法中的重要算法,具有許多實際應用。[Katz et al. 2003]提出了一種新型的層次化網格分割算法,該算法能夠將幾何模型沿着凹形區域分割成不同的幾何部分,並且可以避免過度分割以及鋸齒形分割邊界。算法的核心思想是先利用模糊聚類的方法分割幾何模型,並保留分割邊界附近的模糊區域,然后利用最小割的方法在模糊區域里尋找准確的分割邊界。算法主要包含以下4個步驟:

  1. 計算網格中所有相鄰面片之間的距離;

  2. 計算每個面片屬於不同分割區域的概率;

  3. 迭代調整每個面片的概率,直到收斂;

  4. 在模糊區域里尋找准確的分割邊界。

  下面以模型二分為例具體介紹上述計算過程,如果模型需要分割成多個部分,可以以此為基礎進行層次化分割。

Step 1

  對於相鄰面片fifj,定義它們兩者之間的測地距離和角度距離(如下圖所示)。測地距離為相鄰面片質心之間的距離,而角度距離表達式如下:

上式中αij為相鄰面片之間的二面角,對於凹邊η = 1,對於凸邊η取較小值(例如0.2)。

圖:測地距離和角度距離示意圖

構建網格的對偶圖(如下圖所示),網格中的每個面片對應對偶圖中的一個頂點,同時如果網格中的兩個面片相鄰,那么對偶圖中對應的兩個頂點相連。圖中邊的權重定義為:

  給定網格中任意的兩個面片,它們之間的距離等於對偶圖中兩點之間的最近距離。在預處理階段,需要計算並記錄對偶圖中所有頂點之間的最近距離。

圖:網格與對偶網格

Step 2

  選擇相距最遠的兩個面片REPA和REPB作為兩個分割區域的種子面片,對於面片fi計算其分別屬於兩個區域的概率,面片fi屬於區域B的概率為:

  上式表明一個面片距離哪個區域更近,那么其屬於哪個區域的概率更大。

圖:概率分布圖,紅色點代表種子面片

Step 3

  利用模糊聚類的方法迭代更新兩個區域的種子面片,具體如下:

  1. 計算每個面片分別屬於兩個區域的概率;

  2. 重新計算種子面片:

  3. 迭代上述步驟直到種子面片不再發生變化。

  當迭代收斂之后,可以將網格分為3個區域A,B和C,其中C區域為模糊區域,對應下圖b中的紅色部分。

A = {fi | PB(fi) < 0.5 – ε}

B = {fi | PB(fi) > 0.5 + ε}

C = {fi | 0.5 – ε ≤ PB(fi) ≤ 0.5 + ε}

Step 4

  在模糊區域中利用最小割的方法尋找准確邊界,首先需要構建模糊區域的網絡s-t圖G = (V, E)(如下圖所示),V和E如下:

V = VC∪VCA∪VCB∪{S,T}

E = EC∪{(S, v), ∀v∈VCA}∪{(T, v), ∀v∈VCB}∪{eij∈E | i∈VC, j∈{VCA∪VCB}}

其中VCA和VCB代表對偶圖中與VC相連的VA和VB頂點集,而VA, VB, VC為對偶圖中A, B, C區域面片所對應的頂點集。

  s-t圖中邊的容量定義為:

根據上述定義,網絡圖最小割的結果對應網格中模糊區域內二面角最大的分割邊界。

       如果模型需要分割成多個部分,可以對每個區域繼續進行分割,直到滿足終止條件。

 

 

參考文獻:

[1] Sagi Katz and Ayellet Tal. 2003. Hierarchical mesh decomposition using fuzzy clustering and cuts. ACM Trans. Graph. 22, 3 (July 2003), 954-961.

 

附錄

K-means算法:

  給定一系列數據樣本(x1, x2, … , xn),其中每個數據都是一個d維向量,K-means聚類算法的目標是將這n個數據樣本歸類成k(≤n)個簇,並且滿足如下最小能量函數:

其中μi表示第i個簇Si中數據點的平均值 。

  算法具體步驟:

  1. 隨機設定k個聚類中心點的初始值μ1(0), μ2(0), …, μk(0)

  2. 將每個數據點歸類到離它最近的那個聚類中心點所代表的簇中。

  3. 重新計算每個簇的聚類中心點

  4. 重復第二步,直到迭代到最大步數或者前后兩次能量函數的差值小於設定的閾值為止。

K-medoids算法:

  K-medoids算法是K-means算法的一個變種,兩者不一樣的地方在於聚類中心點的選取。在K-means算法中,我們將中心點取為當前簇中所有數據點的平均值,而在K-medoids算法中,我們從當前簇中選取一個點作為聚類中心點,它滿足到當前簇中其他所有點的距離之和最小。

  在某些情況下,K-medoids聚類算法的結果要優於K-means算法,如下圖所示,但從K-means算法變到K-medoids算法,時間復雜度會增加許多:K-means算法中計算聚類中心點只要求一個平均值O(N)即可,而在K-medoids算法中則需要枚舉每個點,並求出它到所有其他點的距離之和,復雜度為 O(N2)。

 

圖:在相同的數據和初始條件下,K-means算法(1a - 1f)的結果陷入局部最優解,而K-medoids算法(2a – 2h)的結果更加合理

Max-flow/Min-cut算法

  圖論中一個常見的問題是網絡圖中兩個節點之間的最大流是多少?這個問題具有重要的現實意義,例如交通工程師希望知道兩個城市之間道路的最大通行能力是多少,因為這個信息將決定如何擴建道路,最大流問題的數學描述如下:

s.t.

解決最大流問題的一個經典方法是Ford&Fulkerson算法,其方法如下:

  我們以下圖為例,解釋Ford&Fulkerson算法的求解過程。網絡圖中邊上方的標簽代表該條邊的最大容量,例如邊AB上方靠近節點A的標簽代表從節點A到節點B的最大容量,而靠近B節點的標簽代表從節點B到節點A的最大容量。

  求解從節點A到節點G的最大流,首先需要在當前網絡圖中尋找從節點A到節點G的路徑,接着建立殘余網絡圖,即從當前網絡圖中減去該路徑上的最大流量,然后重復上述步驟直到網絡圖中不存在從節點A到節點G的路徑為止。

  通過上述方法可以發現當算法終止時,可以尋找得到5條從節點A到節點G的路徑,所以該網絡圖的最大流值為4+3+4+2+1=14。而最大流的網絡圖如下:

  最大流問題與最小割問題密切相關,網絡圖中的割是指網絡圖中一些邊的集合,當網絡圖中移除這些邊時能夠導致網絡流中斷,而最小割就是指所有割中權重之和最小的一個割,下圖給出了網絡圖中一些割集的情況。最小割問題的數學描述如下:

  最大流/最小割定理指出,網絡圖中從源點到匯點的最大流值等於網絡圖中的最小割值。但真正問題是最小割的邊在網絡圖中的位置,因為假如交通工程師決定擴展道路,那需要知道該擴展哪些道路。可以想象擴展那些最大流值還未達到最大容量的那些邊是毫無意思的,而那些最大流值已達到最大容量的邊才是我們關心的,也就是最小割的位置。

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

 

 

參考:

https://en.wikipedia.org/wiki/K-means_clustering

https://en.wikipedia.org/wiki/K-medoids

http://blog.pluskid.org/?page_id=78

http://www.sce.carleton.ca/faculty/chinneck/po/Chapter9.pdf


免責聲明!

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



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