陳 岑,卿粼波,何小海,張余強
(1.四川大學 電子信息學院,四川 成都 610065;2.成都西圖科技有限公司,四川 成都 610065)
巖心圖像可以保存巖心原始的顏色、結構和油水的分布狀態,可用于巖心描述和分析[1],是永久記錄巖心的第一手資料。即使巖心后期經受風化,采樣后的巖心可以和原始圖像進行對比校正,保證了巖心的使用價值。目前各類巖心管理、入庫、分析、瀏覽系統已經得到了廣泛的應用,隨著技術的進步和發展,油氣勘探開發單位對巖心展示系統的直觀性、操作便捷性有了更高的需求。傳統的基于Web的巖心圖像瀏覽系統主要采用ASP.NET Webform框架,需要配置和安裝ActiveX控件實現網頁3D渲染展示[2],Webform頁面可設計性差,同時頁面與業務邏輯混雜也增加了維護難度。已有的巖心展示系統常采用列表的形式展示不同井段的巖心圖像,而巖心整理時是將丈量好的巖心按照自上而下的順序裝入巖心盒內,列表的展現形式不利于查看整筒巖心隨井深的變化情況。在訪問速度方面,查詢相關筒次數據和同時加載大量巖心圖像,會造成瀏覽器卡頓和加載時間長的問題,嚴重影響了油田工作者的用戶體驗。
針對以上問題,本文設計了基于B/S模式的巖心相冊瀏覽系統,充分利用HTML5、Canvas的強大優勢,按照巖心的井深順序標識和展現不同筒次的巖心。結合了平面式和三維重建式的兩種展現方式,用于展現縱切面和外表面的巖心圖像,同時為用戶提供了豐富的交互式功能,系統具有操作直觀便捷、無需安裝專用渲染插件的優勢。最后為了優化訪問速度,采用將巖心的高分辨率圖像和縮略圖結合的展現方式,同時使用了Memcached緩存技術緩存JSON數據,提高了Web應用系統的響應速度[3]。
以往基于B/S架構的巖心瀏覽系統常采用ASP.NET Webform框架進行開發,該框架封裝性太強不利于后臺結構層次的劃分,增加了后期維護的難度。本系統采用MVC三層架構,整個業務應用劃分為表現層、業務邏輯層和數據訪問層。各層之間相互獨立,當某一層內部由于技術變遷發生變化時,只要接口不變,其他層不用做任何改變。因此分層之后系統靈活性提高,也便于團隊分工開發[4]。為了提高系統訪問速度,本系統增加了Memcached緩存服務器,系統架構如圖1所示。當應用服務器接收到用戶請求時,應用服務器解析用戶請求并首先訪問緩存服務器,如果命中則直接返回內容,如果未命中或數據失效,則從油田數據庫中讀取數據,返回處理過后的數據同時更新緩存。這樣可以通過緩存數據庫的查詢命中減少油田數據庫壓力,提高應用響應速度。

圖1 系統架構圖
根據用戶需求,系統前端展示部分主要有三大模塊,如圖2所示。平面巖心展示模塊主要用于展示巖心高分辨率圖像,顯示巖心圖像的基本信息。其中動態標尺可以隨圖像縮放、移動,用于單張圖像的深度標定。三維巖心展示模塊主要用于展示整筒井的重建圖像,模擬巖心盒內實際巖心的放置方式。其中靜態標尺用于標識整筒井的掃描深度,不同井深的巖心圖像重建過后按照靜態標尺標識的深度段進行定位,可以360°旋轉同一筒井的巖心重建圖像。動畫效果展示模塊主要用于展示巖心三維重建動畫,可以在動畫過程中調節光照強度,展示不同光強下巖心圖像的重建效果。

圖2 系統主要功能模塊
上述功能模塊中,靜態標尺主要是通過在Canvas畫布中繪制路徑及文本以實現深度標定的功能。以下將對巖心圖像三維重建的實現和巖心圖像重建動畫的實現部分進行詳細闡述。
Three.js封裝了WebGL底層的圖形接口,允許瀏覽器端在未安裝插件的情況下進行3D硬件加速渲染[5]。本系統使用Three.js開源框架實現巖心圖像的三維重建。搭建巖心圖像3D環境至少需要場景、相機、光源、渲染器及模型對象。其中場景作為一個舞臺,用于添加需要呈現的對象。相機將三維的場景投影到二維的屏幕,根據投影的方式不同,相機分為正交投影和透視投影相機。如圖3所示,近平面到遠平面之間的場景將會被渲染,在正交投影中投影線垂直于投影面進行投影,投影之后物體遠近的比例保持不變。在透視投影中所有的投影線最后都將匯聚于一點,渲染物體具有近大遠小的效果,因此本系統使用透視投影相機,以更接近人眼的實際觀察效果。

圖3 正交投影與透視投影
光源主要用于營造氛圍和制造陰影,渲染器則包含了WebGL繪圖上下文和著色器。巖心三維模型以圓柱或圓錐對象作為柱狀體框架,使用CanvasRenderer渲染方式[6],將三維空間的物體映射到二維平面上。
在網頁上實現巖心圖像重建動畫,需要按照一定頻率更新和渲染模型。大多數顯示器的刷新頻率是60 Hz,同時受屏幕分辨率和屏幕尺寸的影響,不同設備的屏幕刷新頻率可能會不同。本文使用的requestAnimationFrame方法,它由系統來決定回調函數的執行時機,不會引起丟幀現象也不會導致動畫出現卡頓的問題,能夠保證動畫效果更平滑流暢。
屏幕每一次的刷新間隔中會執行一次渲染,在這個過程中需要重新確定框架模型的每一個坐標點。假設當前顯示的重建模型的三維坐標由(Xnow,Ynow,Znow)表示,平面模型的坐標由(Xp,Yp,Zp)表示,柱狀三維模型的坐標由(Xt,Yt,Zt)表示。平面模型的寬度為W,則重建之后柱狀模型的半徑為W/2π。令Mstep為步長,如果Mstep為60,則在渲染60次之后完成重建動畫。通過4×4的矩陣變換實現模型的平移、旋轉矩和縮放,在渲染過程中模型每一個點的三維坐標值如式(1)所示,每渲染一次當前模型會更貼近柱狀三維模型。渲染Mstep次之后完成重建過程,重建之后的模型中心整體向左前方存在平移,以達到更好的視覺效果。之后再將模型中心變換到視野中心,重建動畫實現效果如圖4所示。
(1)

圖4 重建動畫
在動畫階段重建模型也可以響應鼠標事件進行縮放、拖動及平移等。為了模擬觀察巖心的真實場景,在場景中加入了半球光源,創建出更加貼近自然的戶外光照效果,可以直接拖動調節光照強度,觀察不同光強下的巖心重建效果,如圖5所示。

圖5 不同光照強度下的重建效果
巖心圖像采集儀采用CCD成像技術[7],掃描圖像分辨率不小于150 DPI(Dot Per Inch),清晰度不小于24位真彩色。一筒井存在多張不同井段的高清巖心掃描圖像,在顯示的時候,同時傳輸和加載大量高分辨率巖心圖像,會造成瀏覽器卡頓加載時間長的問題,甚至造成瀏覽器崩潰,嚴重影響了油田工作者的用戶體驗。
因此本系統對后端部分進行優化,應用了Memcached緩存技術。將Memcached以守護進程的方式運行在服務器中,監聽11211端口。當瀏覽器首次請求訪問數據時,應用服務器會先從數據庫中讀取數據,在應用服務器中將檢索結果封裝成JSON字符串,并將其以Key/Value鍵值對的形式存入內存,這里的Key值是使用查詢條件及部分URL信息生成的哈希摘要。再次查詢時,如果對應的查詢條件及請求頁面相同,則直接從Memcached中讀取。這樣可以減少讀取數據庫的次數,一定程度上提高了網站的訪問速度。在圖片傳輸方面,初始化時默認選擇顯示最上層掃描深度段高清圖像,其他井段的圖像由應用服務器生成縮略圖,并傳輸縮略圖。這里生成的縮略圖在保證重建質量(保證圖像的長寬比例不變和巖心紋理特征不丟失不變形)的情況下,對原始圖像進行一定程度的壓縮。在點擊選擇不同掃描深度段的重建圖像時再傳輸和顯示當前深度段的高分辨率巖心圖像,程序流程圖如圖6所示。

圖6 程序流程圖
系統實現了平面巖心展示、三維巖心展示、動畫效果展示的功能模塊。在不同查詢條件下測試了本系統的巖心瀏覽效果。針對巖心圖像的掃描深度可能存在不連續和重復掃描的情況,測試了巖心重建圖像井深定位的準確度,定位實現效果如圖7所示,達到了預期效果。

圖7 井深定位實現效果
針對重建動畫的流暢度方面,本系統使用了Chrome開發者工具中的Rendering監聽器對重建動畫頁面進行實時幀率觀測,動畫渲染幀率穩定在59~60 f/s,動畫渲染效果流暢美觀。在其他功能方面,可以360°旋轉整筒井的巖心重建圖像,具有操作便捷直觀的特點;可以選擇隱藏或添加動態標尺,用于觀察單幅巖心平面圖像的精確深度;可以以表格形式展示巖石物性詳細信息等。系統展示如圖8所示,系統對于縱切面和外表面的巖心圖像以及熒光圖像都有良好的瀏覽效果,所有功能均可可靠運行。

圖8 系統展示
為了衡量系統的性能指標,本實驗使用Apache JMeter對系統響應時間做測試[8]。在相同查詢條件下分別測試了系統優化前和優化后的平均響應時間,測試結果如圖9所示。優化后的系統采用了高分辨率圖像和縮略圖結合的展現方式,同時使用了Memcached緩存技術緩存JSON數據,優化后的系統響應速度滿足用戶對性能的需求。

圖9 系統響應時間對比
本文針對油田探勘生產部門的需求,設計和實現了一個基于B/S模式的多功能巖心瀏覽系統,系統具有優越的跨平臺性且無需安裝插件,便捷易用。本系統以井字、井號、筒次作為篩選條件,查詢之后按照掃描深度直觀展示巖心圖像,便于油田工作人員查閱。系統提供了三維重建巖心圖像和平面巖心圖像兩種展示方式,以及直觀的重建動畫過程,為探勘生產部門查閱巖心資料提供了更為便捷的途徑。