蔡仁濂
(大連交通大學計算機和通信工程學院 遼寧 大連 116000)
我國提出探地雷達至今,探索工作已經十余年,而如今的儀器也日益商品化,因此亟需對可視化方法進行針對性探索??梢暬夹g是把復雜的數(shù)據(jù)通過成圖形為使用者提供了一種直觀的視角并審查處理后的結果,但因為探地雷達信息量過大,其三維可視化方法還存在著程序有效性、代碼復用性等主要問題。根據(jù)中國探地雷達的特點,很有必要運用軟件開發(fā)思路和計算語言,研制出功能強大的回波數(shù)據(jù)處理系統(tǒng)軟件。
從可視化方面來說,國內外主要有中國地質大學(武漢)的MAGS和武漢中地數(shù)碼科技有限公司的Mapgis,兩者都是我國地理信息科學的重要代表;國外企業(yè)如Geosoft和澳洲Encom集團的Modelversion,在工程可視化領域也做得非常優(yōu)秀。
本文使用了網格文檔的輸入文檔格式,在對球體建模使用VC和MATCOM混合編程語言和OpenGL的基礎上,對探水雷達科技的三維數(shù)據(jù)可視化技術開展了深入研究,對探水雷達科技數(shù)據(jù)進行三維立體圖像的描繪,并對三維立體圖作切片、旋轉、分層顯示等操作。
近年來,電腦圖形學上有幾個熱點,第一是電腦可視化,第二是電腦視頻,第三是虛擬現(xiàn)實,三維圖形顯示是其核心競爭力。二維雷達剖面的局限性較強,三維可視化可以用來解決這種局限性。一般來說,在研究人員分析相同區(qū)域的剖面時,需要從各個角度觀察各個剖面,并得出分析結果,這樣三維可視化才擁有勘測地下目標體結構的功能,這種功能的整體性較強,可以從各個角度,各個層面出發(fā)來勘測地下目標體,還可以發(fā)現(xiàn)沒有被二維剖面發(fā)現(xiàn)的細微特征[1]。如果從探地雷達的角度出發(fā),那么識別線性才是三維可視化的特點。若在勘測地區(qū)中,存在一些線狀連續(xù)物體,例如混凝土、電纜等,那么三維可視化可以輕松地識別它們。
隨著電腦繪圖技術發(fā)展得越來越快,三維顯示技術也越來越完善,而在社會上也產生了更多的三維建模開發(fā)語言以及建模軟件。OpenGL、Direct3D等都是使用頻率較高的三維開發(fā)語言,各有各的特色,有些是針對用戶,有些是針對文件格式?,F(xiàn)階段,較為完整的三維圖形標準便是OpenGL,其研發(fā)公司為SGL。因為PC機性能越來越高,因此,通過OpenGL來開發(fā)性能比較高的圖像產品的難度也會降低。
設備啟動接口為Device Drive Interface,即DDI,而其中的繪圖啟動接口為Graphics Drive Interface,即GDI,是一個Windows繪圖程序使用的接口,使用軟件,比如畫筆、畫刷等來描繪圖像,是工程師們最先要思考的問題。因為Windows操作系統(tǒng)中如果采用了OpenGL,就相當于采用了一種完整的繪圖程序模型,程序員就能夠分解三維畫面,通常情況下都是分解多邊形比如三角形等等。之后OpenGL通過光照、紋理等數(shù)據(jù)來計算,并根據(jù)計算的結果為圖片上色,在開發(fā)工具交互場景的時候,主要通過一些成熟的應用程序,例如VC、VB等。
它和圖形硬件的相關程度也不高,它的本質是應用程序接口,也就是API,其中的變量只有200個左右,而利用這200個變量所開發(fā)出的三維景象,同真實世界特別接近。OpenGL可分為以下幾大類。
(1)核心函數(shù):目前總共有115個最常用的核心函數(shù)出現(xiàn)在OpenGL中,前綴都是gl,在任何的OpenGL系統(tǒng)中,都能夠用到這些函數(shù)。圖形繪制、場景變換、紋理映射等都可以通過核心函數(shù)來完成。因為核心函數(shù)支持使用其他函數(shù),所以其有300多個函數(shù)可供使用。
(2)實用函數(shù):這種函數(shù)的等級要求略高于內核函數(shù),但由于它重新構建并封裝了核心變量,因此提供了更加簡單的功能,從而大大減輕了開發(fā)人員的負擔,共計43種前綴為glu的實際變量,所有的OpenGL平臺中都可以使用這些函數(shù)[2]。紋理映射、多邊形劃分等都是實用函數(shù)的應用范圍。
(3)輔助函數(shù):這一類功能比較特殊,總共包括了31個前綴為aux的輔助參數(shù),目前所有的OpenGL系統(tǒng)暫不能夠使用此類功能,其常用在Windows應用程序中,一般用其來管理函數(shù)窗口、繪制三維實體等。
(4)專用函數(shù):它是由兩個函數(shù)所構成的一個函數(shù),其前綴為wgl和Win32API函數(shù),個數(shù)分別是6位和5位,在Windows平臺中針對較主要的平臺,一般使用它來進行opengl的應用程序。前者直接連接了Windows的OpenGL,主要功能是初始化窗口,支持通過OpenGL繪制窗口;后者負責交換緩存以及處理像素存儲格式。
三維效果的渲染:首先,OpenGL通過RGBA和索引模型來實現(xiàn)對模型顏色的指定。還支持配合明暗處理以及平滑明暗處理,也就是Flat和Smooth,這樣渲染出來的顏色與現(xiàn)實世界更加貼近。之后,它還可以提供光線以及材質,使得三維建模更為接近于真實物體。OpenGL支持4個燈光模式:放射光、環(huán)境光、鏡面光、漫反射光。而在定義材質的時候,可以依照不同性質光所表現(xiàn)出的反光特征來建立不同的模型表面,以完美的方式匹配光線,呈現(xiàn)出質量更高的渲染效果[3]。
經過設計之后,OpenGL的硬件,運行過程為流水線,見圖1。圖形和幾何圖形都是作為輸入輸出端,在通過光柵化以后的圖像就是最后的傳輸結果,而圖像在通過幀緩沖區(qū)以后,再通過硬件到現(xiàn)在的輸出設備上。如圖1所示,頂點集、多邊形集等都包含在模型中,圖片集、位圖集等也包含在圖片信息里面。進行了光柵化、片元管理等工作之后,保存到了緩存中,從這里我們可以得知,其通過以頂點或者是像素建模為主的基元,雖然簡化了操作步驟,但提高了建模難度。
經過各種變換,通過幾何基元得到的場景才可以真正地在屏幕上顯示出來,圖2是整個轉換過程。除此,OpenGL還利用光線、圖像的特征等信息來增強其真實感,這也降低了開發(fā)三維圖像的可視化難度,提高了建模能力。
由圖1可知,通過OpenGL技術能夠更好地融合三維圖形與二維圖像,從而創(chuàng)造了一個嶄新的融合機制。該融合機制一方面讀取了圖形數(shù)據(jù)以后,再通過數(shù)據(jù)加工形成合理的紋理圖像,最后再從模型上反映出來,這樣產生的三維場景的真實性會比較強,也就是紋理映射。另一方面則是支持操作幀緩存數(shù)據(jù),也就是Framebuffer,其可以將圖像變換成一個像素塊,然后在三維空間中選取一個平面,將其融入進去。在攝像機攝取視頻圖像的時候經常會使用這種方法,AVI或者VCD都是攝取視頻圖像的文件格式,MJPEG以及MPEG是壓縮標準。
利用映射來把R二顯示在R三維上的某一物體上,這也叫作紋理映射。從物理觀點來看,雙變量紋理方程,也就是t(u,v)一般用于描述二維紋理,像是可以用長峰波函數(shù)來表示紋理函數(shù)。還有一些紋理,沒有明顯的規(guī)律性,找到合適的數(shù)學函數(shù)的難度較大,因此在表示這種二維紋理的時候,通常會使用數(shù)字化的圖像,也就是用一個矩陣T表示,該矩陣的規(guī)格為m×n×k。圖像的分辨率和取值范圍分別用m×n和2k表示。
還能夠通過使用雙線性插值法來在二維紋理圖形的區(qū)域內,構造出相似程度較高的紋理函數(shù)。我們在二維紋理中,假設一個(u,v),經過取整后,坐標點變?yōu)?U,V),那么這個坐標點紋理值可以通過雙線性插值得出,也就是(U,V)、(U+1,V)、(U,V+1)、(U+1,V+1),即:
設計出映射函數(shù),也就是F(·),這就是紋理映射的最終目的,這樣才可以實現(xiàn)一一對應,特別是(u,v)與F(x,y,z)。(x,y,z)和(u,v)可以分別表示為在物體位置空間中被映射物品的方位,和為紋理范圍中的物品方位和紋理值。
在構建出三維地質體模型之后,想要讓模型更加貼合于擬合空間實體,就必須進行插值運算。比如線行插值、樣條插值、多項式插值、克里金插值等都是使用頻率較高的插值算法。
線性插值方法是使用頻率最高以及最簡單的一種方法。在形成三維曲面時,通常會使用分段線性差值的方法來完成,公式(3)是這種方法的計算式,其中分段線性插值函數(shù)用ln(X)來表示,區(qū)間[Xk,Xk+1]上的所有函數(shù)都代表線性函數(shù)。通過線性差值來完成三維建模,不僅可以提高計算速度,還可以簡化計算步驟,在地質體形態(tài)中經常使用這種方法,特別是層狀地質體或者區(qū)塊地質體[4]。通過插值計算出來的單元體界面的棱角比較分明,這也是該方法的缺點。
多項式插值法又稱為拉格朗n次多項插值法,其作用是用來模擬三維曲面,其公式為(5)。
其中:
多項式插值法的優(yōu)勢在于當多項式處于低頻率時,模擬處理的曲面是光滑且沒有棱角的,能模擬出最真實的地質地貌特征。但如果多項式的次數(shù)過多模擬就會出現(xiàn)振蕩誤差與實際地質地貌存在很大的差距。
克里金插值法更適用于地質地貌特征不規(guī)則的情況下,其建立的三維模式更容易生成準確的三維曲面圖。本文設計的模型有兩種,首先是球狀模型,其次是指數(shù)模型。公式見(7):
其中Zi是一組離散值(i=1,2...,n),λi由下組公式求出:
協(xié)方差函數(shù)C(h)與驗前方差C(0)以及變差函數(shù)Y(h)之間的關系為:塊金常數(shù)用來C0表示,拱高用來C1表示,變程用來a表示。
對于指數(shù)模型,塊金常數(shù)用來C0表示,拱高用來C1表示,a不再是變程,變程是3a。利用克里金插值法計算數(shù)據(jù)時,會將身處變程內的所有數(shù)據(jù)統(tǒng)計算一遍,這樣使得計算出來的數(shù)據(jù)與實際情況存在一定的相關性,不僅能更好地模擬地質地貌特征,還能模擬出地質的內部結構圖[5]。但由于會將變程內所有數(shù)據(jù)計算一遍,所以計算速度相對比較緩慢。
若:yj=f(xj),(j=0,1,2,...,n),則3次樣條插值函數(shù)為:
其中aj(x)和βx(x)是插值基函數(shù),由下式計算:
mj由下式計算:
其中:
與多項式插值法相比,樣條插值法能更好地克服高次多項式導致的振蕩現(xiàn)象,模擬出來的地質空間形態(tài)更加符合實際情況,而且計算量比克里金插值法小得多。
實測某路段探地雷達原始數(shù)據(jù)的三維成像效果見圖3,對原始數(shù)據(jù)進行切片處理后的結果見圖4,從兩圖可以看出探地雷達對不同層面探測的細節(jié)區(qū)別。對原始數(shù)據(jù)切片處理后又做旋轉處理的效果見圖5,可從其中不同角度觀察測量體的特征。對原始數(shù)據(jù)進行透明顯示的效果見圖6,通過打開或關閉特定的顯示圖層可以幫助我們更加深入地探測目標體不同底層的特征。
綜上所述,三維可視化技術在探地雷達數(shù)據(jù)分析中的實際運用,采用了Opengl繪圖,大幅精簡了原來煩瑣的計算機圖形學算法,設計簡潔,實現(xiàn)方便。通過混合程序進行對三維空間信息的圓滑,結合浮動水平面方法繪出三維空間圖形。整個編寫過程中采用了軟件工程開發(fā)思維并充分地引入面向對象理念,把核心的繪圖程序封裝成類,以此增強了復用度,從而改善了原有的物探編程方法,著重于計算邏輯而不是物理實現(xiàn)。當然,上述研究成果并不能結合數(shù)據(jù)處理算法進行圖像加強計算,是對三維空間信息可視化的探索性工作。