MarchingCubes算法提取等值面的基本原理

http://malagis.com/marching-cubes-algorithm.html


1.等值面的定義及其三角面片近似

等值面是空間中的一張曲面,在該曲面上函數F(x,y,z)的值等於某一給定值。準確地講,是指在某一網格空間中,假若每一結點保存着三變量函數F(x,y,z),而且網格單元在x,y,z方向上的連續採樣值爲F(x,y,z),則對於某一給定值Fi,等值面是由所有滿足

S={(x,y,z) | F(x,y,z)=Fi}

的點組成的一張曲面。

按照此嚴格定義下得到的等值面表達式如下:

F(x,y,z)=a0+a1x+a2y+a3Z+a4xy+a5yz+a6xz+a7xyz

可以看出等值面是三次代數曲面,提取過程複雜而且不利於顯示。爲了簡化等值面的提取,W.ELorenson和H.E.CIine在1987年提取了一種等值面的簡化提取方法,該方法首先找到等值面經過的六面體網格,求出該六面體與等值面的交點,將這些交點按照一定的拓撲連接關係連接起來,作爲等值面在該六面體網格中的近似表示。如圖所示,爲了敘述的方便以及程序的編寫,對所有六面體的頂點採用如下的編碼規定:

假設某一個六面體中頂點3的值比要提取的等值面值小,而其他的7個頂點比等值面值大,則顯然等值面一定經過該六面體,而且該六面體內的等值面可以採用如圖(4.1.1.2)所示的三角面片進行近似。

該方法雖然在處理時是針對數據場中的某一個六面體單元,似乎等值面的構造是相互獨立的。但是處理完所有的六面體單元后,這些等值面之間確是統一,相互關聯和連續的。由於它是以六面體爲單位,一個接一個的處理,因此被稱爲MarehingCubes方法。

2.六面體單元網格與等值面的位置關係

MarhcingCubeS方法是採用三角面片來近似六面體內的實際等值面,假設我們得到了一個六面體與等值面的所有交點,這些交點之間該進行怎麼樣的拓撲連接呢?怎麼樣的拓撲連接纔會保證不同六面體之間拓撲連接的一致性呢?爲此,我們將根據六面體8個頂點的值與等值面的位置關係,制定不同的拓撲連接關係。

就一個六面體而言,假設某一個頂點的值大於(或者等於)給定的等值面值C,我們就將該點標記位置1,表示該頂點位於等值面之內(或者之上)。而如果某一個頂點的值小於給定的等值面值C,我們就將該點標記位置0,表示該頂點位於等值面之外。如果六面體中某一條邊的一個頂點在等值面之內,另一個頂點在等值面之外,那麼該邊一定與等值面相交。根據這一方法,就可以確定等值面是否與當前處理的六面體相交。

每一個六面體有8個頂點,而每一個頂點都有0和l兩種可能的狀態,所以每一個六面體單元根據8個頂點0和1的分佈,共有2/=256種不同的狀態。如果去定義256種可能的拓撲連接,是十分繁瑣的,而且容易出現錯誤。爲此,我們利用兩種不同的對稱性去簡化這256種可能的狀態。

第一種對稱性是利用等值面與8個交點的相對位置關係,如果將等值面的值和8個頂點的物理值的大小關係顛倒過來,六面體內等值面與六面體8個頂點的拓撲關係不會發生改變。也就是說,如果將一個六面體中其物理值大於給定值C的頂點和小於給定值C的頂點所標記的0,1值互換,生成的等值面是相同的(如圖(4.1.1.3)。圖(a)中頂點3的值大於等值面的值,而其他的7個頂點的值都小於等值面的值,圖b()中頂點3的值小於等值面的值,而其他的7個頂點的值都小於等值面的值,在六面體內等值面連接都是一樣的,所以可以歸納爲一起。

第二種對稱性是利用六面體8個頂點的旋轉對稱性,進一步對可能的狀態進行組合”如圖(4.1.1.4)所示,在這兩種六面體內三角面的拓撲連接相對與圖中的黑點來說,是一樣的,因此,我們將它們組合成一類。經過上述兩種對稱性處理之後,我們得到了如圖(4.1.1.5)所示的15種類型。


3.等值面與六面體單元邊的求交

給定一個六面體單元,如何確定該立方體的類型以及等值面與該六面體的哪條邊有交點,交點座標的插值計算?

爲了解決上面提出的問題,我們設計了一個六面體狀態表,如圖(4.1.1.6)所示,該狀態表中的每一位可以表示出該單元體中一個頂點的0和l兩種狀態。根據這一狀態表,我們就可以得到當前單元體的一個索引號。

得到當前單元體的索引號之後,我們就可以在插值邊標記數組中知道該單元體的哪些邊與等值面有交點。

Marchingcubes算法中進行了如下假設:即六面體網格單元在x,少,:方向是函數值是呈線性變化的。基於該假設,等值面與當前單元體邊的交點就可以通過該邊兩個端點函數值的線性插值得到,插值公式如下:

P=P1+(isovalue一V1)(P2一P1)/(V2一V1)

其中P代表等值點座標,P1、P2代表兩個端點的座標,V1、V2代表兩個端點的物理量值,isovalue代表當前提取的數值。求出等值面與當前單元體所有交點之後,就可以將這些交點按照事先定義號的拓撲連接關係連接成三角面片,作爲等值面在該單元中的近似表示。

4.近似等值面三角面片頂點的法向計算

爲了利用圖形硬件顯示提取的等值面圖像,必須給出形成等值面的三角面片的法向矢量方向。對於等值面上的每一點,其沿面的切線方向的剃度分量應該爲零,因此,該點的梯度矢量的方向就代表了等值面在該點的法向方向。對於規則數據場,經常採用中心差分計算出數據體各個頂點處的梯度,然後通過當前單元體邊的兩個頂點的梯度進行線性插值,得到三角面片個頂點的梯度,即三角面片個頂點的法向方向。得到各個頂點的法向量之後,即可用光照模型計算出各數據點出的漫反射分量,更加突出提取的等值面邊界。

假設數據體中數據點的數值以f(xi,yj,zk)表示,採用中心差分方法就可以求出該數據點處的梯度值,即


5.MacrhingCubes算法提取等值面的流程

(1)將原始數據經過預處理之後,讀入特定的數組中;

(2)從網格數據體中提取一個單元體,成爲當前單元體”同時獲取該單元體的所有信息,例如8個頂點的值,座標位置等;

(3)將當前單元體8個頂點的函數值與給定等值面值C進行比較,得到該單元體的狀態表;

(4)根據當前單元體的狀態表索引,找出與等值面相交的單元體棱邊,並採用線性插值的方法,計算出各個交點的位置座標;

(5)利用中心差分法,求出當前單元體8個頂點的法向量,在採用線性插值的方法,得到三角面片各個頂點的法向

(6)根據各個三角面片頂點的座標,頂點法向量進行等值面圖象的繪製.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章