張小青,朱 光,2,侯妙樂,黃 鶴,2
(1.北京建筑工程學(xué)院測繪與城市空間信息學(xué)院,北京100044;2.現(xiàn)代城市測繪國家測繪地理信息局國家重點實驗室,北京100044)
基于四面體的不規(guī)則表面文物體積計算
張小青1,朱 光1,2,侯妙樂1,黃 鶴1,2
(1.北京建筑工程學(xué)院測繪與城市空間信息學(xué)院,北京100044;2.現(xiàn)代城市測繪國家測繪地理信息局國家重點實驗室,北京100044)
鑒于不規(guī)則表面的文物很難直接進(jìn)行體積測量,提出一種從三角格網(wǎng)模型計算不規(guī)則表面文物體積的方法。該方法利用高精度三維激光掃描儀對復(fù)雜表面文物進(jìn)行掃描獲取三維點云數(shù)據(jù),并通過對三維點云數(shù)據(jù)的處理和拓?fù)渲亟ǖ玫轿奈锏娜歉窬W(wǎng)模型,引入四面體的有向體積法,通過求四面體有向體積來計算文物三維模型的體積。同時,分析此類算法的誤差,并在VC# 2008環(huán)境下利用OpenGL對該三維模型進(jìn)行顯示。
四面體;三維模型;三角格網(wǎng);體積計算
隨著自然的侵蝕和人類活動的影響,前人留下的珍貴而豐富的文化遺產(chǎn)正在逐漸被損毀、破壞和消失。如何利用先進(jìn)的技術(shù)手段來保護(hù)、修復(fù)這些寶貴文物,成為迫在眉睫的問題[1]。在文物修復(fù)中經(jīng)常需要估算修復(fù)材料的用量,然而一些文物結(jié)構(gòu)非常復(fù)雜,表面呈不規(guī)則形狀,傳統(tǒng)測量方法無法直接求得精確體積以估算材料用量。因此,通常采用把體積參數(shù)轉(zhuǎn)換成質(zhì)量和密度的關(guān)系而進(jìn)行間接測量。但間接測量方式易受條件、經(jīng)驗的約束,且測量速度慢、精度低、自動化程度不高[2]。而近年來不斷發(fā)展和成熟的三維建模技術(shù),卻給文物保護(hù)工作開創(chuàng)了一個全新的局面。通過三維掃描手段,可將文物的幾何、紋理等信息進(jìn)行數(shù)字化,尤其是對不規(guī)則表面文物的保護(hù)、修復(fù)提供了測量保障。
采用三維激光掃描儀的非接觸掃描,可直接獲得表征物體表面形狀的點云數(shù)據(jù),進(jìn)而測量不規(guī)則表面體的體積。針對基于不規(guī)則表面體三維點云數(shù)據(jù)的體積計算方法,周會成等提出一種從三維點云計算活塞腔體積的方法[3]。該方法通過對三維點云的處理,分割出參考平面,重構(gòu)其曲面幾何模型,用數(shù)值積分的方法計算活塞腔的體積,但這種方法要求物體表面較規(guī)則。劉玉身提出擬蒙特卡羅(Quasi-Monte Carlo)方法計算點模型的體積[4]。該算法雖然克服了重建模型需要消耗大量時間和空間的不足,但判斷點云邊界時的程序繁瑣,不宜處理大規(guī)模的數(shù)據(jù)處理。針對點云生成三角網(wǎng)格模型的體積計算,王泉德提出了一種根據(jù)三角網(wǎng)格模型的三角面片集合計算模型體積的方法[5]。該方法通過指定投影平面,計算每個三角面片及其在投影平面上的投影所圍成的凸五面體的帶符號體積,整個模型的體積為所有凸五面體帶符號體積的代數(shù)和,但該方法需要判斷三角形拓?fù)潢P(guān)系。戴文俊等提出計算三維實體模型體積的適應(yīng)性方法[6]。該方法首先用一組等距的平行平面對網(wǎng)格模型進(jìn)行分層剖分,并利用平面簡單多邊形的帶符號面積公式求取相應(yīng)截面的面積,然后根據(jù)相鄰平面間的距離估算模型體積。這種算法可得到任意實體模型近似值和精確值計算方法,但算法中剖分模型的計算花費較大。
本文利用三維激光掃描儀對具有復(fù)雜表面的文物進(jìn)行掃描獲取其表面幾何信息,將獲取的表面點云數(shù)據(jù)通過拓?fù)渲亟ǖ玫轿奈锏娜蔷W(wǎng)格模型。針對文物的三角網(wǎng)格模型,提出一種四面體有向體積法來計算三角網(wǎng)格模型體積法,并對算法進(jìn)行了改進(jìn)。該算法首先對模型進(jìn)行仿射變換將模型平移,然后計算三角網(wǎng)格中所有三角形與零向量點所構(gòu)成的四面體的體積,所有的四面體帶符號體積的代數(shù)和即為整個模型的體積。
四面體是三維空間最簡單的不規(guī)則體單元,是進(jìn)行三維幾何拓?fù)潢P(guān)系描述的最基本元素之一。利用計算四面體有向體積來計算三角網(wǎng)格模型體積的實質(zhì)是利用三維激光掃描儀對文物進(jìn)行掃描獲取其表面幾何信息點云,然后經(jīng)過對點云數(shù)據(jù)預(yù)處理并通過拓?fù)渲亟ǖ玫轿奈锏娜蔷W(wǎng)格模型,從而計算出表面復(fù)雜的文物的體積。其計算流程包括對文物三維空間數(shù)據(jù)采集、數(shù)據(jù)預(yù)處理、文物三維模型構(gòu)建等數(shù)據(jù)準(zhǔn)備部分和基于四面體的模型體積計算部分。
1.數(shù)據(jù)準(zhǔn)備
為獲取文物表面高精度三維空間點云數(shù)據(jù),本文利用了便攜式關(guān)節(jié)臂測量系統(tǒng)(CIMCORE Infinite 2.0),其三維空間坐標(biāo)測量精度為±0.045 mm。由于掃描實體模型的過程中難免會受到環(huán)境和載物裝置等干擾而出現(xiàn)雜點與噪點,因此需要對數(shù)據(jù)進(jìn)行剔除處理,并且要通過精簡數(shù)據(jù)來減少信息處理量,對多視圖掃描文件進(jìn)行拼合處理。通過掃描獲得的點云模型實質(zhì)上是無數(shù)個具有三維坐標(biāo)的離散點形成的表面形態(tài),各個點之間不存在拓?fù)潢P(guān)系,并沒有構(gòu)成文物的實際表面。本文利用三角格網(wǎng)模型方法來構(gòu)建三維形體,并以一種標(biāo)準(zhǔn)三維模型文件OBJ格式存儲。
對于任一給定的網(wǎng)格模型,只有在它的網(wǎng)格面片圍成有限封閉空間的情況下,求其體積才有意義。因此,在計算體積之前應(yīng)確保模型的每個面片均為三角形,并且三角形的法向量與三角形的3個頂點編號順序為右手規(guī)則,即所有三角形面片的法向一致,均指向體外。本文討論的網(wǎng)格模型也屬于此類模型,且滿足以下條件:① 網(wǎng)格上的每個面片都是平面凸多邊形;②網(wǎng)格上的每條邊由且只由兩個面片共有,并且共用網(wǎng)格上任一頂點的各面片在該頂點處形成的曲面與單位圓拓?fù)渫瑯?gòu)。
2.基于四面體的模型體積計算
對于構(gòu)建完成的文物三角格網(wǎng)模型,采用的基于網(wǎng)格模型體積計算方法如下。
設(shè)網(wǎng)格模型中的任意一個三角形的3個頂點為A(x1,y1,z1),B(x2,y2,z2),C(x3,y3,z3),如圖1所示,則以△ABC為底(按逆時針順序排列),以坐標(biāo)原點O(0,0,0)為頂點的四面體體積為[7]
設(shè)OA方向的單位向量N,△ABC所在平面一側(cè)的單位法向量為NABC,△ABC按逆時針排列時與N成右手系,則當(dāng)內(nèi)積(N,NABC)>0,四面體體積VOABC為正數(shù),否則為負(fù)數(shù)。
圖1 四面體體積計算
如圖2所示,設(shè)三角格網(wǎng)模型表面由n個分片三角形所組成,外側(cè)面第i個三角形的三個頂點為Ai1(xi1,yi1,zi1),Bi2(xi2,yi2,zi2),Ci3(xi3,yi3,zi3),3個頂點的順序按曲面外側(cè)逆時針方向排列,則三維模型總體積計算公式為
式中,Vi為第i個三角形與坐標(biāo)原點構(gòu)成的帶符號體積,其正負(fù)符號同樣根據(jù)原點O和三角形中一頂點構(gòu)成的向量與三角形的法向量的內(nèi)積的正負(fù)號確定。
圖2 三維模型體積計算
由于本文計算的三維模型表面極其復(fù)雜且不規(guī)則,為了提高體積計算精度,專門對其算法進(jìn)行了改進(jìn)。首先在體積計算之前對模型數(shù)據(jù)進(jìn)行預(yù)處理,將原始三角網(wǎng)模型進(jìn)行仿射變換,使模型中心平移到坐標(biāo)原點。然后搜索三角網(wǎng)模型頂點坐標(biāo)在3個坐標(biāo)軸方向上的最大值、最小值,分別記為(xmin,xmax),(ymin,ymax),(zmin,zmax),再以點(xmin,ymin,zmin)和點(xmax,ymax,zmax)為對角頂點構(gòu)成一個包圍邊界包圍整個模型,最后求出模型中心,并在此基礎(chǔ)上進(jìn)行體積計算(如圖3所示)。
圖3 四面體模型體積計算算法及改進(jìn)算法
本文以重慶大足石刻千手觀音為例(如圖4所示)。該千手觀音修復(fù)中需要貼金箔,而其造型相當(dāng)復(fù)雜,其中準(zhǔn)確計算需要修復(fù)金箔數(shù)量是千手觀音修復(fù)的關(guān)鍵。本文截取了千手觀音的一只手作為試驗樣品(如圖4(a)所示),構(gòu)建了其三角格網(wǎng)模型(如圖4(c)所示),并基于上述算法及改進(jìn)算法進(jìn)行了計算。計算算法是在VC#2008環(huán)境,調(diào)用OpenGL函數(shù)庫編程實現(xiàn)。圖5表示針對千手觀音單只手計算出的體積,四面體模型體積算法結(jié)果為5 681.594 cm3(M1);四面體模型體積計算的改進(jìn)算法結(jié)果為5 683.660 cm3(M2)。將兩種算法得到的結(jié)果和該只手的體積理論值比較,改進(jìn)算法能提高0.4%的精度。
圖4 千手觀音部分?jǐn)?shù)據(jù)體積計算實例
圖5 四面體模型體積算法及改進(jìn)算法的計算結(jié)果
通過對此試驗數(shù)據(jù)計算的整個過程可見,影響模型體積計算精度的因素主要有兩個方面:①三維點云獲取過程。在三維點云數(shù)據(jù)的獲取過程中,掃描儀掃描的點云的密度大小直接影響其精度的離散性,而掃描儀本身的誤差與環(huán)境因素,也影響實際獲得點云數(shù)據(jù)的精度,因此數(shù)據(jù)準(zhǔn)備過程中的預(yù)處理非常必要。②數(shù)據(jù)建模誤差,其體積計算精度與三角格網(wǎng)模型構(gòu)建數(shù)量、精度有關(guān)。
本文提出基于三維激光掃描儀獲得復(fù)雜表面文物三維點云數(shù)據(jù),并通過三角格網(wǎng)模型的四面體體積計算算法及改進(jìn)算法計算其體積的方法。此方法可有效提高復(fù)雜表面目標(biāo)物的體積計算精度,并可利用OpenGL實現(xiàn)簡易、高效的模型可視化,可廣泛利用于復(fù)雜表面文物的體積、面積等計算。
[1] 張瑞,駱巖林,周明全,等.文物數(shù)字化的關(guān)鍵技術(shù)[J].北京師范大學(xué)學(xué)報:自然科學(xué)版,2007,43 (2):150-153.
[2] 劉震.逆向工程對不規(guī)則表面物體的體積測量[J].計算機(jī)技術(shù)應(yīng)用,2009(3):19-20.
[3] 周會成,陳吉紅,黃生華,等.用三維點云計算活塞腔的體積[J].現(xiàn)代測量與實驗室管理,2003(2):16-17.
[4] 劉玉身.離散模型光滑算法的研究[D].北京:清華大學(xué),2006.
[5] 王泉德.任意三角網(wǎng)格模型體積的快速精確計算方法[J].計算機(jī)工程與應(yīng)用,2009,45(18):32-35.
[6] 戴文俊,龐明勇,武港山,等.一種任意三維實體網(wǎng)格模型的體積特征提取算法[J].計算機(jī)科學(xué),2006,33(4):198-201.
[7] ZHANG Cha,CHEN Tsuhan.Efficient Feature Extraction for 2d/3d Objects in Mesh Representation[C]∥ICIP2001.Greece:Thessaloniki,2001:935-938.
Volume Calculation of Surface Irregular Cultural Relic Based on Tetrahedron
ZHANG Xiaoqing,ZHU Guang,HOU Miaole,HUANG He
0494-0911(2011)10-0050-03
P258
B
2011-05-05
張小青(1980—),女,江西撫州人,碩士生,主要研究方向為精密工程測量。