摘 要: 結(jié)合三維地震層位數(shù)據(jù),使用OpenGL圖形庫(kù)和NURBS模型,分析了NURBS 構(gòu)造自由曲面的方法。討論和總結(jié)了相關(guān)關(guān)鍵算法和技術(shù),實(shí)現(xiàn)了地震層位的三維多方顯示,為很多領(lǐng)域的空間數(shù)據(jù)曲面擬合提供了通用性方法。
關(guān)鍵詞: NURBS OpenGL 地震層位 可視化
地震數(shù)據(jù)和測(cè)量數(shù)據(jù)能否被正確解釋是準(zhǔn)確定位礦藏位置的關(guān)鍵,只有對(duì)上述原始測(cè)量數(shù)據(jù)做大量處理之后才能獲得正確地層結(jié)構(gòu)信息[1]。近年來,三維可視化技術(shù)被成功應(yīng)用到地質(zhì)勘探領(lǐng)域中,它可對(duì)各種復(fù)雜的地質(zhì)模型和三維地震數(shù)據(jù)進(jìn)行描述,并以直觀的形式在三維空間顯示。通過三維空間對(duì)地震數(shù)據(jù)的可視化顯示,使油氣勘探工作者能更加深刻和準(zhǔn)確地理解地質(zhì)構(gòu)造以及各種地質(zhì)現(xiàn)象的發(fā)生、發(fā)展和影響,從而提高鉆井的準(zhǔn)確率和成功率。
地震層位的三維顯示是地質(zhì)勘探可視化的基本功能之一。它把經(jīng)過速度場(chǎng)解釋后的層位信息在三維空間中實(shí)現(xiàn)多方顯示。本文研究了地震層位的NURBS曲面擬合方法,并在Sun Blade 2000工作站Solaris平臺(tái)下,基于NURBS使用OpenGL,在X/Motif環(huán)境下實(shí)現(xiàn)了地震層位模型的建立和顯示。
1 地震層位模型的表達(dá)
地層面又稱層面,是地層與地層的分界面,也是通過地震剖面來識(shí)別層序的關(guān)鍵界面之一。在一個(gè)油氣探區(qū)內(nèi),經(jīng)過處理獲得的地震層位信息可能由若干層組成。一般情況下,各地層在地下由淺到深排列,每個(gè)特定層位可以由一個(gè)空間曲面來擬合。但在復(fù)雜地質(zhì)情況下由于斷層的錯(cuò)斷切割,一個(gè)層位可能由若干個(gè)空間曲面組成,但這些空間曲面一般是相互獨(dú)立的[2]。因此,地震層位的表達(dá)問題就可以轉(zhuǎn)換成多個(gè)空間曲面的表達(dá)問題。
地震層位信息是一個(gè)離散的四維數(shù)據(jù)集{x,y,z,p},其中x、y、z描述了空間某點(diǎn)的坐標(biāo)信息,p是該點(diǎn)的物性,一般可以用顏色等來標(biāo)注。關(guān)鍵問題是如何通過插值的方法,描述這些空間離散數(shù)據(jù)點(diǎn)集,從而還原地質(zhì)層面或者斷面的空間形態(tài),并最終多方位顯示給用戶。下面就以一個(gè)層位數(shù)據(jù)集中的空間曲面為對(duì)象,以該曲面的數(shù)據(jù)集為基礎(chǔ),用一個(gè)計(jì)算機(jī)能生成的曲面來插值這些數(shù)據(jù)點(diǎn)。通過對(duì)多個(gè)獨(dú)立的曲面進(jìn)行這樣的處理,來模擬地層和斷層的形態(tài)、空間位置和相互關(guān)系。
2 地震層位模型的NURBS曲面建立
NURBS 方法是最廣為流行的自由曲線和自由曲面描述技術(shù)。應(yīng)用NURBS方法可統(tǒng)一表示初等解析形狀和自由型曲線曲面、有理非有理Bezier曲線曲面和非有理B樣條曲線曲面[4]。本文采用NURBS對(duì)地震層位的單個(gè)獨(dú)立曲面進(jìn)行擬合,由多個(gè)曲面的組合來表達(dá)復(fù)雜的層面和斷面。
2.1 NURBS的定義
K次NURBS曲線的數(shù)學(xué)表達(dá)式如下:
式中Pi是特征多邊形頂點(diǎn)位置矢量,Wi是相應(yīng)控制點(diǎn)的權(quán)因子,分別與控制頂點(diǎn)Pi相聯(lián)系,節(jié)點(diǎn)向量中節(jié)點(diǎn)個(gè)數(shù)m=n+k+1,n為控制點(diǎn)數(shù),k為B樣條基函數(shù)的次數(shù),Ni,j(u)是k次B樣條基函數(shù),其遞推公式如下:
NURBS曲面是曲線的推廣,由雙參數(shù)變量分段有理多項(xiàng)式定義的NURBS曲面如下式:
2.2 NURBS曲面擬合地震層位的步驟和關(guān)鍵算法
2.2.1 地震層位數(shù)據(jù)預(yù)處理
找一個(gè)曲面使之通過已知數(shù)據(jù)點(diǎn),實(shí)際上就是已知型值點(diǎn)求相應(yīng)樣條曲面的控制點(diǎn),即控制點(diǎn)的反算問題。由于反算曲面要求型值點(diǎn)為矩形網(wǎng)格數(shù)據(jù),而實(shí)際層位數(shù)據(jù)常常在XOY投影平面內(nèi)并不呈矩形分布,因此要對(duì)層位數(shù)據(jù)進(jìn)行重采樣,使之最終在形式(數(shù)目)上表現(xiàn)為矩形,常用如下3種方法:
(1)如果原始數(shù)據(jù)較為密集,可以重新采樣,摒棄一些多余數(shù)據(jù),使之成為矩形網(wǎng)格分布。
(2)對(duì)于各行上點(diǎn)數(shù)目不相等的情況,可以在點(diǎn)少的行上使用最末網(wǎng)格點(diǎn)重復(fù)法。
(3)對(duì)于點(diǎn)數(shù)目較多的行,以最短的行的點(diǎn)數(shù)為基準(zhǔn),隔點(diǎn)采樣,構(gòu)造不等間距網(wǎng)格。
2.2.2 反算B樣條曲面控制點(diǎn)
本文使用NURBS的退化形式——雙三次B樣條曲面來擬合地震層位的方法,可以滿足精度要求。反算控制點(diǎn)有雙向曲線反算法、廣義矩陣法等方法[4]。本文采用雙向曲線反算法,即對(duì)n×m的型值點(diǎn)矩陣P,先橫向使用B樣條曲線的邊界條件及反算公式,求出n×(m+2)的n組樣條曲線控制點(diǎn)矩陣M;再把M的每列看成曲線上的型值點(diǎn),以相同的方法縱向反算控制點(diǎn),得到(n+2)×(m+2)的曲面控制點(diǎn)矩陣Q。對(duì)于B樣條曲線,控制點(diǎn)Q和型值點(diǎn)P應(yīng)滿足:
2.2.3 確定節(jié)點(diǎn)矢量
3 震層面的OpenGL繪制
確定了控制點(diǎn)和節(jié)點(diǎn)矢量后就可以使用OpenGL來生成NURBS曲面了。OpenGL是目前跨平臺(tái)最廣泛的三維圖形引擎,也是目前應(yīng)用最廣泛的事實(shí)上的三維圖形工業(yè)標(biāo)準(zhǔn)。它具有的GLU庫(kù)提供了NURBS曲線和曲面接口。繪制NURBS曲面的基本步驟如下[3]:
(1)調(diào)用gluNewNurbsRenderer( )創(chuàng)建NURBS對(duì)象指針,在繪制曲面時(shí)使用該指針。
(2)調(diào)用gluNurbsProperty( )控制NURBS對(duì)象的采樣方式及顯示模式等屬性。
(3)調(diào)用gluBeginSurface( )開始繪制曲面。
(4)調(diào)用gluNurbsSurface( )創(chuàng)建并繪制曲面。
(5)調(diào)用gluEndSurface( )結(jié)束繪制曲面。
由于直接關(guān)系到對(duì)NURBS的正確理解和曲面能否生成,因此,下面重點(diǎn)說明函數(shù)gluNurbsSurface(GLUnurbs *nurb,Glint sKnotCount,Glfloat*sKnots,GLint tKnotCount,Glfloat*tKnots,GLint sStride,GLint tStride,Glfloat*control,GLint sOrder,GLint sOrder,GLint tOrder,Glenum type)的各個(gè)參數(shù)和用法。其中sKnots和tKnots分別為曲面在u和v方向的節(jié)點(diǎn)序列,程序中一般要規(guī)約處理到區(qū)間[0,1]內(nèi),節(jié)點(diǎn)的取法上文已詳細(xì)討論。sKnotCount和tKnotCount為這二個(gè)方向的節(jié)點(diǎn)數(shù)目,而sOrder 和tOrder為這二個(gè)方向上的多項(xiàng)式基函數(shù)的階數(shù)。本文采用雙4階的NURBS曲面。變量sStride和tStride表示每個(gè)參數(shù)方向上控制點(diǎn)之間浮點(diǎn)數(shù)的個(gè)數(shù)。變量control指定控制點(diǎn)數(shù)組。由于NURBS中節(jié)點(diǎn)、控制點(diǎn)、階數(shù)間在u、v方向上必須分別滿足m=n+k+1,其中m、n、k+1分別為該方向上節(jié)點(diǎn)個(gè)數(shù)、控制點(diǎn)個(gè)數(shù)、階數(shù),所以control數(shù)組中必須有(sKnotCount-sOrder)×(tKnotCount-tOrder)個(gè)控制點(diǎn)。
提供了控制點(diǎn)及節(jié)點(diǎn)數(shù)據(jù)后就可以調(diào)用函數(shù)gluNurbsSurface生成NURBS曲面來擬合地震層位。利用OpenGL的強(qiáng)大功能和友好接口,可以很方便地加上材質(zhì)、光照和紋理效果,并且通過平移、旋轉(zhuǎn)來實(shí)現(xiàn)多方顯示。本文采用勝利油田實(shí)際地震采樣數(shù)據(jù),擬合后,某地層單個(gè)層位的點(diǎn)云方式和NURBS曲面方式的實(shí)現(xiàn)分別如圖1和圖2所示。多個(gè)地層的點(diǎn)云方式和NURBS曲面方式的實(shí)現(xiàn)分別如圖3和圖4所示。由圖可見,NURBS對(duì)連續(xù)層位的形態(tài)描述取得了很好的擬合效果。
4 結(jié)束語(yǔ)
本文基于NURBS模型,分析了NURBS構(gòu)造地震層面的方法,討論和總結(jié)了相關(guān)關(guān)鍵算法,使用OpenGL實(shí)現(xiàn)了地震層位的三維多方顯示。OpenGL是性能優(yōu)秀的圖形接口,具有穩(wěn)定、可靠、易用、易擴(kuò)展和擴(kuò)充等優(yōu)點(diǎn),是進(jìn)行三維可視化開發(fā)的的首選底層引擎。NURBS方法是建立在非有理Bezier方法和非有理B樣條方法基礎(chǔ)上,為自由型曲面的精確表示提供了公共的數(shù)學(xué)表達(dá)式。該方法具有計(jì)算穩(wěn)定、速度快,且在比例、旋轉(zhuǎn)、平移和投影等圖形變換下具有不變性。所以基于NURBS使用OpenGL擬合地震層位具有建??臁⑺惴ㄇ逦?、程序穩(wěn)定的特點(diǎn)。相對(duì)于其他建模方法而言,更利于實(shí)現(xiàn)。但對(duì)于更復(fù)雜的模型,如被多個(gè)斷層作用的地震層位,模型表達(dá)和實(shí)現(xiàn)都將有一定難度。這時(shí),結(jié)合其他優(yōu)秀建模方法,如三角網(wǎng)格法(Delaunay三角剖分)是一個(gè)行之有效的思路。這也將是下一步需要繼續(xù)做的工作。
參考文獻(xiàn)
1 石教英,蔡立文.科學(xué)計(jì)算可視化算法與系統(tǒng).北京:科學(xué)出版社,1996
2 張劍秋,張福炎.地震層位信息三維可視化方法.石油地球物理勘探,1998;33(1)
3 李穎,薛海斌,朱伯立.OpenGL技術(shù)應(yīng)用實(shí)例精粹.北京:國(guó)防工業(yè)出版社,2001
4 孫家廣,楊長(zhǎng)貴.計(jì)算機(jī)圖形學(xué).北京:清華大學(xué)出版社,1995
5 卓磊.地震勘探三維可視化方法研究與實(shí)現(xiàn).中國(guó)科學(xué)院地質(zhì)與地球物理研究所碩士學(xué)位論文,2002
6 施法中.計(jì)算機(jī)輔助幾何設(shè)計(jì)與非均勻有理B樣條.北京:高等教育出版社,2001