一、引子
對于一個標量場資料,我們可以描繪輪廓(Contouring),包括2D和3D,2D的情況稱為輪廓線(contour lines),3D的情況稱為表面(surface),他們都是等值線或等值面,
以下是一個2D例子:

為了生成輪廓,必須使用某種形式的插值,這是因為我們只在資料集中的一個有限點集上有標量值,而我們的等高線值可能位于這兩個點的值之間,由于最常見的插值技術是線性插值,我們通過沿邊緣的線性插值在輪廓表面上生成點,如果一條邊在其兩個端點上有標量值10和0,如果我們試圖生成一條值為5的等高線,則邊緣插值計算該等高線通過邊緣的中點,
二、Marching cubes演算法——從2D理解
運用了分治思想,對每個單元格(cell)獨立地進行處理,該技術的基本假設是,一個輪廓只能以有限數量的方式通過一個單元格,我們可以構造一個案例表(case table),它列舉一個單元的所有可能的拓撲狀態(topological state),拓撲狀態的數量取決于單元格頂點的數量,以及一個頂點相對于輪廓值可以具有的內部/外部關系的數量,標量值大于輪廓值的頂點被稱為在輪廓之內,標量值小于輪廓值的頂點被稱為在輪廓之外,例如,如果一個單元格有四個頂點,并且每個頂點可以在輪廓內部或外部,則有2^4 = 16種可能的方式通過單元格(在實作時可以用bit來實作),在案例表中,我們不感興趣的是輪廓通過單元格的位置(例如,geometrical intersection),感興趣的只是它如何通過單元格(即單元格中輪廓的topology),

一旦我們選擇好屬于哪一種case之后,就可以使用插值來計算contour line與cell edge相交的位置,該演算法處理一個單元格,然后移動,或行進到下一個單元格,在訪問所有單元格后,將完成輪廓,因此稱為marching cubes,
演算法的步驟如下:

四、演算法需要注意的事項
在2D中,輪廓模糊(ambiguos cases,如Fig6.5中的Case 5和Case 10)很容易處理:對于每個模糊的情況,我們選擇實作兩種可能的情況中的一種,根據選擇的不同,輪廓可以延伸或打破當前的輪廓,如Fig 6.9所示,任何一種選擇都是可以接受的,因為產生的等高線(contour line)將是連續的和封閉的(或將在資料集(data set)邊界結束),

在3D中,這個問題更為復雜,我們不能簡單地選擇一個獨立于所有其他模糊案例的模糊案例,例如,Fig 6.9顯示了如果我們不小心實作了兩個相互獨立的情況,會發生什么,在這個圖中,我們使用了通常的情況3,但用它的互補情況替換了情況6,互補的情況是通過將“暗”頂點與“光”頂點交換而形成的,(這相當于將頂點標量值從等值面值以上切換到等值面值以下,反之亦然,)將這兩種情況配對的結果是在等值面上留下了一個孔(hole),
一個簡單而有效的解決方案通過添加額外的互補案例(complementary cases),擴展了原來的15個marching cubes案例,這些情況被設計成與鄰近的情況兼容,并防止在等值面上產生孔,需要6個互補的情況,分別對應于行進立方體的情況3、6、7、10、12和13,互補的行進立方體案例如Fig 6.10所示,

此外,盡管我們說該演算法用于規則型別,如四邊形和立方體,但marching cubes可以應用于任何拓撲上等同于立方體的單元型別(例如,六面體或非立方體體素),
五、應用
Fig 6.11d是由marching cubes創建的等值面,圖6.11b是一個來自計算機斷層掃描(CT)x射線成像系統的恒定影像強度(image intensity)的表面,(圖6.11a是該資料的二維子集,)其強度水平對應于人的骨骼,圖6.11c為恒定流密度(flow density)的等值面,圖6.11d為鐵蛋白分子的電子勢等值面,由于我們熟悉人體解剖學,圖6.11b中所示的影像可以立即被識別出來,然而,對于計算流體動力學和分子生物學領域的從業者來說,圖6.11c和圖6.11d同樣熟悉,正如這些例子所顯示的,輪廓形成的方法是各領域可視化資料的強大而又通用的技術,

參考檔案:VTKTextBook Scalar Algorithms
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/550261.html
標籤:其他
