劉慧婕,卿粼波,熊淑華,張余強
(1.四川大學 電子信息學院,四川 成都 610065;2.成都西圖科技有限公司,四川 成都 610065)
測井曲線是在不同的地質條件下和地層環(huán)境中采用不同的測井方法,對地球物理化學等信息數據記錄的一種表現方式。測井曲線在巖心庫中扮演著不可或缺的重要角色,通過分析測井曲線,可以識別地下各巖層信息,探測油、水、氣等狀況,確定孔隙度、滲透率以及古鹽度等參數,也是后期各種地化有機、地化熱解和儲層物性實驗分析等的重要依據[1]。因此,流暢、清晰、完整的測井曲線繪制是一項至關重要的工作。隨著瀏覽器的普及,在傳統的B/S結構中,張立虎實現了測井曲線的繪制和編輯[2],楊靜提出使用Canvas技術完成2D動畫繪制[3]。在根據相關的地質信息動態(tài)繪制常規(guī)測井曲線時,由于數據量巨大,目前的繪制方式已不能適用于測井曲線動態(tài)繪制,出現延時、卡頓、渲染時間長等情況。
為了解決以上問題,本文提出了在Canvas畫布上通過數據預處理,擬合貝塞爾曲線動態(tài)繪制測井曲線的方法,并通過測試實際測井曲線數據,驗證了所提方法可以達到提高流暢度和清晰度的效果,同時,測井曲線的在線標注和自適應抽稀功能也便利了巖心庫相關工作人員。
根據測井方法不同,測井行業(yè)對測井曲線進行了種類劃分。常用的測井有:自然電位、自然伽瑪測井、微電位測井、微梯度測井、深感應測井、中感應測井、補償中子、巖性密度測井、聲波時差測井、井徑測井等[4]。常規(guī)測井曲線包括9條,具體分為3種巖性曲線、3種電阻率曲線和3種孔隙度曲線,其中泥質提示曲線包含自然電位(SP)、自然伽馬(GR)和井徑(CALI),電阻率曲線包含1 m底部梯度電阻率(RI)、4 m底部梯度電阻率(RT)和沖洗帶電阻率(RXO),孔隙度曲線包含聲波時差(AC)、補償密度(DEN)和補償中子(CNL)。
通常B/S系統使用原始測井數據靜態(tài)繪制測井曲線,對比靜態(tài),動態(tài)繪制測井曲線能提升用戶視覺體驗,促進巖心庫數字化發(fā)展。由于測井曲線數據密度高,繪制量大,無法提升流暢度,通過抽稀可以減少不必要的繪制量,而抽稀后的測井曲線要和原始測井曲線保持一致,所以,需要使用貝塞爾曲線提高擬合度。本文針對常規(guī)的9種測井曲線做了曲線的數據預處理和貝塞爾曲線擬合,對比了處理前后曲線擬合程度和幀率,同時,實現了對測井曲線的實時添加注釋,自適應抽稀并且保存到本地客戶端的功能。
測井曲線動態(tài)繪制的流程圖如圖1所示,包括了讀取測井數據、數據預處理、貝塞爾曲線擬合和動態(tài)渲染四個流程。測試井的測井曲線數據以JSON文件形式保存在本地,首先根據用戶請求的井深返回對應測井曲線數據。如在深度比例為1∶200的情況下繪制3 000 m的圖,一般的測井曲線圖包含多個曲線道,只繪制常規(guī)曲線數據量就非常龐大[5],所以通過道格拉斯-普克算法[6]進行數據預處理,抽稀原始數據。然后利用預處理后的數據進行貝塞爾曲線擬合,得到由多個貝塞爾曲線連接成的測井曲線。最后,在Canvas畫布上通過貝塞爾曲線函數進行測井曲線的動態(tài)繪制。
圖1 測井曲線動態(tài)繪制流程圖
直接使用原始測井曲線進行數據繪制時,繪制折線取點非常密集,繪制量大,動畫效果差。因此,需要抽稀原始曲線數據,減少不必要的繪制。
道格拉斯-普克算法是一種經典的以減小數據量為代價將曲線數據進行抽稀的算法。此算法的核心思想是根據預先設定的閾值,抽稀曲線上的數據點,使得抽稀后的曲線盡可能地逼近原曲線。測井曲線預處理的流程圖如圖2所示。
圖2 測井曲線預處理的流程圖
利用道格拉斯-普克算法對原始測井數據進行預處理后,在保留曲線基本形態(tài)的前提下,不同程度減小了數據量,這對提升動態(tài)繪制的速度,改善繪制清晰度等方面提供了更大的可能性。
貝塞爾曲線具有控制簡便、滑動流暢的優(yōu)點,被廣泛地應用于工程設計和計算機圖形學領域[7]。隨著Web技術的迅速發(fā)展,在網頁動畫領域也常使用貝塞爾曲線實現流暢復雜路線的繪制。
為保證測井曲線的連續(xù)性和平滑性,本文采用三階貝塞爾曲線繪制。三階貝塞爾曲線的參數公式為:
B(t)=K0(1-t)3+3K1t(1-t)2+3K2t2(1-t)+K3t3
(1)
式中K0、K3分別為起始點和終止點,K1、K2為兩個控制點,t為曲線參數變量。
經過數據預處理后,測井曲線數據的井深數據間隔不固定,不同測井曲線數據量也不同,此時測井曲線呈折線狀,保持預處理后數據點處切線斜率一致,即相接處曲線的一階導數連續(xù),平滑連接各個分段貝塞爾曲線即可完成一屏測井曲線的繪制。貝塞爾曲線的擬合參數一般在0.1~0.3之間,繪制中取0.2。
流暢的Web動畫能提升用戶體驗,形成良好的視覺效果,通過動態(tài)繪制測井曲線,豐富了巖心庫內容,可促進井筒曲線現代化發(fā)展。
Canvas制作動畫的原理是畫布的擦除重繪過程,在畫布中繪制圖形和圖片,每隔一定時間清除畫布,在下一個位置更新畫布的內容,不斷循環(huán)往復,從而模擬出動畫的過程[8]。在Web動畫開發(fā)中常使用setTimeout()和setInterval()這兩種定時器[9]。直接使用定時器依次繪制數據點會因為數據間隔小,造成渲染緩慢,而分段繪制渲染又會出現卡頓現象。經過數據預處理和貝塞爾曲線擬合后,測井曲線由一系列密集數據點組成的折線變成多段貝塞爾曲線連接成的曲線,遞歸調用各分段貝塞爾曲線,即可完成測井曲線的動態(tài)渲染。動態(tài)渲染的流程圖如圖3所示。
圖3 測井曲線動態(tài)渲染流程圖
通過整合密集的小任務,將渲染階段的開銷轉移到計算階段,避免多余的繪制操作,減小了渲染的壓力,增大了曲線繪制的流暢性。
根據巖心庫工作人員的需求,要求在不同實驗中會對感興趣深度段對應的測井曲線進行在線標注并以圖片的形式保存在本地客戶端。在Canvas畫布上實時繪制是一個不斷繪制和擦除的過程,通過將復雜場景繪制在單獨的畫布上,既能提高Canvas繪制性能,又可避免破壞底圖完整性。本文建立雙層Canvas畫布,底層畫布用于繪制測井曲線基本數據,通過監(jiān)聽底層畫布,在上層畫布相應位置繪制用戶所選擇的圖形,通過分層刷新的特點,實現實時繪制的功能。通過Canvas豐富的圖形庫,可以在畫布任意位置添加注釋,包括直線、箭頭、矩形、橢圓、文字、分析試驗數據等。在保存為圖片過程中,應用Canvas能轉換成image的特性,將上層畫布轉為png格式的圖片,上層圖片通過drawImage與底層畫布結合后,再以圖片格式輸出,完成測井曲線圖下載功能,如圖4所示。
圖4 在測井曲線上實時注釋的示意圖
測井曲線圖一般在1∶200的比例下繪制,在實際應用中,繪制比例越小,測井曲線的壓縮程度越高,對測井曲線的細節(jié)展示越模糊。本文在實現動態(tài)抽稀測井曲線的基礎上,根據抽稀比例不同,當繪制比例大于1∶1 000時,測井曲線繪制設為1 px,當繪制在1∶10和1∶1 000之間時自適應遞減改變測井曲線線型,如圖5所示。同時,在測井曲線抽稀時,利用Canvas事件處理機制將測井解釋道和測井曲線道結合,通過雙擊測井曲線道身,浮動顯示對應曲線深度,當鼠標指向深度對應的測井解釋時,提示相應顏色的背景色,簡化了模板,豐富了測井曲線的內容,如圖6所示。
圖5 自適應抽稀測井曲線
圖6 結合測井曲線和測井解釋道
選擇某口深度為1 155~4 000 m的井作為測試井,繪制一屏共33 m的測井曲線,其中GR、SP、CALI、DEN、CNL和AC采用常數坐標繪制,RT、RI、RXO采用對數坐標繪制。如圖7所示,其中圖(a)是用原始測井數據繪制的9種常規(guī)測井曲線,圖(b)是使用道格拉斯-普克算法進行數據抽稀后繪制的測井曲線。
圖7 道格拉斯算法抽稀后的測井曲線與原圖的對比示意圖
由圖7可以看出,經過抽稀后的數據繪制的折線大致與原圖的測井曲線趨勢一致。經過預處理后,每條測井曲線數據量因為曲線形狀不同而在不同程度上得到了減小,其中曲線SP減小百分比最大,達到94.32%,曲線RXO減小百分比最小也有66.67%,如圖8所示。
圖8 原始數據量與抽稀后的數據量對比圖
將抽稀后的曲線進行了貝塞爾曲線擬合,如圖9所示,圖(a)是用原始測井數據繪制的測井曲線,圖(b)是使用道格拉斯-普克算法進行數據抽稀后的數據,用貝塞爾曲線擬合后繪制的測井曲線。主觀來看,擬合后的測井曲線與直接使用原始數據繪制的測井曲線幾乎相同,大多數曲線保持了起伏,彎曲程度具有一致性。
圖9 貝塞爾曲線擬合后的測井曲線與原圖的對比示意圖
表1列出了9種測井曲線的擬合結果。擬合的測井曲線AC最接近根據原始測井數據繪制的曲線,其擬合確定系數R-square為0.985 38。R-square越接近1,表明擬合的效果越好。經過分析認為測井曲線SP的誤差是由于該曲線整體波動小,導致第一個取樣數據與之后的數據深度差距較大,無法準確計算貝塞爾曲線控制點。
表1 測井曲線擬合參數比較
從客觀和主觀方面來看,在抽稀后的曲線基礎上,利用貝塞爾曲線擬合,能繪制出符合要求的測井曲線。
對于動畫的流暢度,一般使用幀率(FPS)進行表述,幀率就是每秒畫面更新的次數。理論上,幀率越大,動畫就會越流暢,通常當幀率在50~60 fps之間,即每一幀消耗的時間在16.66~20 ms之間,動畫會相當流暢,讓人感受舒適。使用Chrome瀏覽器的Chrome DevTools Performance功能來分析檢測運行時的性能,通過Frame Timing的接口獲取與幀率相關的數據。圖10(a)是用原始測井數據繪制的測井曲線通過Frame Timing檢測到的數據,圖10(b)是使用基于貝塞爾曲線的測井曲線,可以看出未處理前的渲染是分段的,其使用setInterval函數定時繪制指定長度的數據,每幀消耗的時間平均在36.68 ms,而處理過后,檢測到的繪制幀率明顯增多,每幀消耗的時間平均在16.59 ms,動畫的流暢性得到明顯提升。
本文提出了一種基于貝塞爾曲線的測井曲線動態(tài)繪制方法,采用一屏動態(tài)繪制方式,對測井曲線數據進行抽稀,利用繪制貝塞爾曲線來擬合原測井曲線,極大地降低了瀏覽器渲染壓力,可實現快速響應交互。該方法在保證測井曲線準確性的前提下,提升了動態(tài)繪制的流暢度和清晰度,并且提供了在畫布上進行標注和自適應抽稀等實時交互功能。經過工程實踐,測井曲線的擬合效果符合工程要求,繪制速度滿足地質工作人員的日常需求。
圖10 基于貝塞爾曲線的測井曲線與原圖的對比示意圖