蔣先剛,陶龍風,馬得安
(華東交通大學 1.信息工程學院;2.基礎科學學院,江西 南昌330013)
三維空間數據場的顯示與計算是計算機圖形學中一個重要的應用研究范圍,它是分析和描述三維數據內部結構信息的有效方法。工廠煤儲量的數據是一個變化的曲面體數據,通過實時的激光掃描,可將煤堆每一截面的頂部曲線數據獲取,依據截面二維數據就可構建和顯示出三維數據場。我們通過OLE自動化把測量的煤堆的自定義格式數據轉換為通用格式的二維切片數據并轉換為三維數據場以直觀的效果圖顯示出來,通過三維數據的體積計算以獲得煤場的儲存量。
工廠煤場體積測量系統主要功能模塊包括圖像攝入(即利用Lase激光系統測量二維橫截面數據,且測量的精確度達到0.1 mm)、OLE自動化獲取二維截面數據、用Marching Cubes和直接體繪制顯示和計算三維曲面體體積。本文運行的環境是Windows XP操作系統,Delphi7開發平臺,具體的軟件流程如圖1所示。

圖1 煤堆體積估算與顯示的軟件流程圖
通過Lase激光掃描硬件系統獲得的數據一般以Excel格式保存,需要采用合理的接口文件得到這個三維掃描數據,因此需要利用客戶程序(如工廠煤場的顯示和測量估算三維重構系統)控制和訪問服務器程序(Excel小型數據分析軟件系統)這樣的OLE自動化技術。OLE自動化的技術可使得客戶程序能控制其他應用程序或DLL中的對象的屬性和方法。典型的的OLE自動化服務器的例子是外部調用Excel和Word[1]。Excel即為一個服務器程序,它除了完成數據輸入,計算排序等功能外,還提供供外部程序訪問內部數據的對象、方法和屬性。
本文中的三維重構程序作為客戶程序通過OLE自動化技術訪問服務器程序(Excel)的方法和屬性,以讀取不同y位置的Excel中每一截面的離散x,z坐標。由于本文涉及的Excel中的數據是用空格來分隔各組不同數據的,程序設計時以空格作為數據各字段的分隔標志進行分析。
三維數據體繪制技術可以分為兩大類[2]:面繪制(Surface Rendering)和直接體繪制(Direct Volume Rendering)。面繪制技術是從3D數據場中抽取有意義和直觀信息的一種重要手段。它實際上是把體數據轉換成一種逼近面形式,從而可以進一步利用計算機圖形的OpenGl的顯示技術。直接體繪制技術是以某種方式將整個數據場半透明地投影到2D屏幕上,并不借助中間幾何圖形,在本系統設計中可快速顯示二維截面的一般分布情況。Lase得到的數據只是煤堆截面的表面數據,它在顯示曲面體時,通過將等值面上不完整立方體(如圖2右上角所示小塊)和曲面內完整的立方體(如圖2左下角四方塊)的體積累計就可獲得曲面立方體的總體積。因此在進行體積計算時主要用到的重構方法采用Marching Cubes面繪制技術。
Marching Cubes[2]提出的有關算法主要針對三維規則網絡數據提出,這類數據常見于計算機X光斷攝影(CT)、磁共振(MR)、單光子發射計算機斷層攝影(SPECT)、地震測定以及工廠煤量的測量。Lorensen和Cline則以立方體單元為研究對象,每個立方體由相鄰兩層切片上的8個數據組成。對于一個已知的等值面(其中某一變量取常數值的面)的值,立方體每個頂點處的值或大于或小于或等于該值。若頂點數據值大于或等于等值面的值,則該頂點位于等值面之上,賦值為1;否則該頂點低于等值面,賦值為0。等值面只與那些兩端取不同值的邊相交。通過利用Marching Cubes方法的這些特點將有利于煤場體積計算的程序設計,本文應用基于Marching cubes的煤堆顯示與計算的主程序界面如圖2所示,圖的左邊是重構的煤場曲面體圖形,曲面體由有限個規則立方體和被截立方體組成,圖的右邊是截取的二維截面圖。

圖2 基于Marching cubes的煤堆顯示與計算的主程序界面
對三維曲面體體積的計算有很多方法[3],如DTM法、單位立方體累計計算法—方格網法、基于橫截面的體積計算方法—等截面法、等高線法等,考慮到三維數據場的顯示與體積計算能夠都兼顧到,本文主要應用的是方格網法和等截面法。
2.3.1 單位立方體累計計算方法
通過激光技術可以得到煤場的二維數據,但是要利用這些數據估算它的體積,我們可以應用單位立方體累計的計算方法—方格網法。利用Marching Cubes重構三維圖形時[4],令i,j,k分別表示重構出來曲面體的x,y,z方向的不同單位序號的取值,將i,j,k與等值面相交進行比較,如果沒有交點,則得到的單位立方體都是完整的,此時需將規則立方體個數k加1,特別需要注意的是在i=0或j=0或k=0時等,即移動的立方體處在外表面時,它是等值面上的一個規則立方體,此時規則立方體個數k仍需加1;在對立方體內的等值面進行三角片化時將會出現不完整立方體,此時就按照計算不規則立方體的方法計算體積。
利用立方體單元的兩種對稱性,可以將不規則立方體三角片分布的種類由256種情況減少到15種[2]。本文列舉了其中比較常見的3種不完整立方體被截面的幾何構成圖,如圖3所示。我們就不規則立方體的體積的計算參照如圖3中的(b)[5]所示,先根據Marching cubes等值面的計算得到交點的坐標分別為C(a1,b1,c1),B(a2,b2,c2),D(a3,b3,c3),不規則立方體的體積等于規則立方體的體積減去上部被截部分,這樣就可以根據體積公式算出我們所要求的不規則立方體的體積為


圖3 被截不完整立方體構成的3種常見圖形
通過上面程序設計可以算出煤場中煤的保存量,同樣我們也由此得到工廠里煤的消耗量,根據每天的產電耗煤指標就可合理組織煤場煤的調度,以保證工廠有合理而經濟的煤儲量,實現對煤的合理管理和調用。
2.3.2 基于橫截面的曲面體積計算方法
利用橫截面計算煤堆的體積是另一種高效的體積計算方法,這種方法也稱斷面法[3]求體積。此方法首先將煤堆y軸方向的長度平均等份為n等份(n為正整數),如圖4所示,且設在yi點的橫截面的面積為si,在yi+L點的橫截面的面積為si+1,這時當si與si+1形狀相似,相對誤差不大于20%,采用棱柱體體積計算公式求體積,否則采用截錐體體積計算公式,即

式中:v為煤堆的體積,L為相鄰截面的距離,si為第i個截面的面積。
據煤的煤化程度和工藝性能指標煤可以分為褐煤、煙煤、無煙煤和硬煤等,它們的比重分別為1.30×103kg?m-3,1.28×103kg?m-3,1.56×103kg?m-3,1.21×103kg?m-3,又根據經驗公式可知質量 =體積×比重,即m=v×p,用上述兩種方法獲取三維煤堆曲面體的體積,繼而求得煤堆的質量。單位立方體累計計算總體積的方法求得消耗掉煤的重量與實際消耗掉的煤重量(稱量出實際用掉的煤量)相比,計算精度達到98.76%,基于橫截面的曲面體積計算方法求得的重量與實際的煤重相比,計算精度達到96.47%。
上述2種二維體積計算方法盡管都可以計算出煤堆的體積,但是2種方法之間各有優缺點。單位立方體累計計算三維曲面體體積的方法得到煤堆的體積與實際量相比誤差較小,尤其是在單位立方體的取值越小,即曲面體劃分成 n×n×n,當n較大時,程序處理與計算的時間會稍長,而基于橫截面計算體積的方法得到煤堆體積的時間相對而言較短,但誤差會大些,這兩種體積計算方法的精確度都能滿足工程的要求。
利用Lase測得的截面數據并通過Marching Cubes方法重構煤場的三維圖像的同時,可以同時計算得到三維數據場的體積,即利用不參加等值面構造的單位立方體累計和參加等值面構造的不完整立方體的體積累加而計算三維曲面體總體積的方法實現對三維圖像體積的計算,基本上等值面構造和體積計算是并行的,程序的運行效率大大提高。因此在獲取曲面體體積時,盡量采用單位立方體累計計算體積的方法。

圖4 二維截面組成的曲面體體積單元計算示意圖
[1]蔣先剛.三維數據場重構與顯示工程軟件設計[M].北京:中國水利水電出版社,2009:9.
[2]DAVID R.計算機圖形學的算法基礎[M].石教英,彭群生,等譯.北京:機械工業出版社,2006:7.
[3]廖克武,金永強.南方CASS基礎礦山儲量與斷面法計算誤差分析[J].西部探礦工程,2009,(3):187-191.
[4]程東旭.一種改進的Marching Cubes算法[A].第十二屆(北京)全國圖象圖形學學術會議(NCIG'2005)[C].北京:清華大學出版社,2006,(4):426-431.
[5]徐毅,李曉梅,許潤濤,等.對體可視化Marching Cube算法的改進[J].計算機工程,1999(11):100-105.