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