APP下载

基于贝塞尔曲线的测井曲线动态绘制*

2019-11-12刘慧婕卿粼波熊淑华张余强

网络安全与数据管理 2019年11期
关键词:曲线拟合测井画布

刘慧婕,卿粼波,熊淑华,张余强

(1.四川大学 电子信息学院,四川 成都 610065;2.成都西图科技有限公司,四川 成都 610065)

0 引言

测井曲线是在不同的地质条件下和地层环境中采用不同的测井方法,对地球物理化学等信息数据记录的一种表现方式。测井曲线在岩心库中扮演着不可或缺的重要角色,通过分析测井曲线,可以识别地下各岩层信息,探测油、水、气等状况,确定孔隙度、渗透率以及古盐度等参数,也是后期各种地化有机、地化热解和储层物性实验分析等的重要依据[1]。因此,流畅、清晰、完整的测井曲线绘制是一项至关重要的工作。随着浏览器的普及,在传统的B/S结构中,张立虎实现了测井曲线的绘制和编辑[2],杨静提出使用Canvas技术完成2D动画绘制[3]。在根据相关的地质信息动态绘制常规测井曲线时,由于数据量巨大,目前的绘制方式已不能适用于测井曲线动态绘制,出现延时、卡顿、渲染时间长等情况。

为了解决以上问题,本文提出了在Canvas画布上通过数据预处理,拟合贝塞尔曲线动态绘制测井曲线的方法,并通过测试实际测井曲线数据,验证了所提方法可以达到提高流畅度和清晰度的效果,同时,测井曲线的在线标注和自适应抽稀功能也便利了岩心库相关工作人员。

1 测井曲线动态绘制

根据测井方法不同,测井行业对测井曲线进行了种类划分。常用的测井有:自然电位、自然伽玛测井、微电位测井、微梯度测井、深感应测井、中感应测井、补偿中子、岩性密度测井、声波时差测井、井径测井等[4]。常规测井曲线包括9条,具体分为3种岩性曲线、3种电阻率曲线和3种孔隙度曲线,其中泥质提示曲线包含自然电位(SP)、自然伽马(GR)和井径(CALI),电阻率曲线包含1 m底部梯度电阻率(RI)、4 m底部梯度电阻率(RT)和冲洗带电阻率(RXO),孔隙度曲线包含声波时差(AC)、补偿密度(DEN)和补偿中子(CNL)。

通常B/S系统使用原始测井数据静态绘制测井曲线,对比静态,动态绘制测井曲线能提升用户视觉体验,促进岩心库数字化发展。由于测井曲线数据密度高,绘制量大,无法提升流畅度,通过抽稀可以减少不必要的绘制量,而抽稀后的测井曲线要和原始测井曲线保持一致,所以,需要使用贝塞尔曲线提高拟合度。本文针对常规的9种测井曲线做了曲线的数据预处理和贝塞尔曲线拟合,对比了处理前后曲线拟合程度和帧率,同时,实现了对测井曲线的实时添加注释,自适应抽稀并且保存到本地客户端的功能。

1.1 测井曲线动态绘制流程

测井曲线动态绘制的流程图如图1所示,包括了读取测井数据、数据预处理、贝塞尔曲线拟合和动态渲染四个流程。测试井的测井曲线数据以JSON文件形式保存在本地,首先根据用户请求的井深返回对应测井曲线数据。如在深度比例为1∶200的情况下绘制3 000 m的图,一般的测井曲线图包含多个曲线道,只绘制常规曲线数据量就非常庞大[5],所以通过道格拉斯-普克算法[6]进行数据预处理,抽稀原始数据。然后利用预处理后的数据进行贝塞尔曲线拟合,得到由多个贝塞尔曲线连接成的测井曲线。最后,在Canvas画布上通过贝塞尔曲线函数进行测井曲线的动态绘制。

图1 测井曲线动态绘制流程图

1.2 测井曲线的数据抽稀

直接使用原始测井曲线进行数据绘制时,绘制折线取点非常密集,绘制量大,动画效果差。因此,需要抽稀原始曲线数据,减少不必要的绘制。

道格拉斯-普克算法是一种经典的以减小数据量为代价将曲线数据进行抽稀的算法。此算法的核心思想是根据预先设定的阈值,抽稀曲线上的数据点,使得抽稀后的曲线尽可能地逼近原曲线。测井曲线预处理的流程图如图2所示。

图2 测井曲线预处理的流程图

利用道格拉斯-普克算法对原始测井数据进行预处理后,在保留曲线基本形态的前提下,不同程度减小了数据量,这对提升动态绘制的速度,改善绘制清晰度等方面提供了更大的可能性。

1.3 测井曲线的贝塞尔曲线拟合

贝塞尔曲线具有控制简便、滑动流畅的优点,被广泛地应用于工程设计和计算机图形学领域[7]。随着Web技术的迅速发展,在网页动画领域也常使用贝塞尔曲线实现流畅复杂路线的绘制。

为保证测井曲线的连续性和平滑性,本文采用三阶贝塞尔曲线绘制。三阶贝塞尔曲线的参数公式为:

B(t)=K0(1-t)3+3K1t(1-t)2+3K2t2(1-t)+K3t3

(1)

式中K0、K3分别为起始点和终止点,K1、K2为两个控制点,t为曲线参数变量。

经过数据预处理后,测井曲线数据的井深数据间隔不固定,不同测井曲线数据量也不同,此时测井曲线呈折线状,保持预处理后数据点处切线斜率一致,即相接处曲线的一阶导数连续,平滑连接各个分段贝塞尔曲线即可完成一屏测井曲线的绘制。贝塞尔曲线的拟合参数一般在0.1~0.3之间,绘制中取0.2。

1.4 动态渲染

流畅的Web动画能提升用户体验,形成良好的视觉效果,通过动态绘制测井曲线,丰富了岩心库内容,可促进井筒曲线现代化发展。

Canvas制作动画的原理是画布的擦除重绘过程,在画布中绘制图形和图片,每隔一定时间清除画布,在下一个位置更新画布的内容,不断循环往复,从而模拟出动画的过程[8]。在Web动画开发中常使用setTimeout()和setInterval()这两种定时器[9]。直接使用定时器依次绘制数据点会因为数据间隔小,造成渲染缓慢,而分段绘制渲染又会出现卡顿现象。经过数据预处理和贝塞尔曲线拟合后,测井曲线由一系列密集数据点组成的折线变成多段贝塞尔曲线连接成的曲线,递归调用各分段贝塞尔曲线,即可完成测井曲线的动态渲染。动态渲染的流程图如图3所示。

图3 测井曲线动态渲染流程图

通过整合密集的小任务,将渲染阶段的开销转移到计算阶段,避免多余的绘制操作,减小了渲染的压力,增大了曲线绘制的流畅性。

2 实时交互功能设计

2.1 测井曲线在线标注

根据岩心库工作人员的需求,要求在不同实验中会对感兴趣深度段对应的测井曲线进行在线标注并以图片的形式保存在本地客户端。在Canvas画布上实时绘制是一个不断绘制和擦除的过程,通过将复杂场景绘制在单独的画布上,既能提高Canvas绘制性能,又可避免破坏底图完整性。本文建立双层Canvas画布,底层画布用于绘制测井曲线基本数据,通过监听底层画布,在上层画布相应位置绘制用户所选择的图形,通过分层刷新的特点,实现实时绘制的功能。通过Canvas丰富的图形库,可以在画布任意位置添加注释,包括直线、箭头、矩形、椭圆、文字、分析试验数据等。在保存为图片过程中,应用Canvas能转换成image的特性,将上层画布转为png格式的图片,上层图片通过drawImage与底层画布结合后,再以图片格式输出,完成测井曲线图下载功能,如图4所示。

图4 在测井曲线上实时注释的示意图

2.2 测井曲线自适应抽稀

测井曲线图一般在1∶200的比例下绘制,在实际应用中,绘制比例越小,测井曲线的压缩程度越高,对测井曲线的细节展示越模糊。本文在实现动态抽稀测井曲线的基础上,根据抽稀比例不同,当绘制比例大于1∶1 000时,测井曲线绘制设为1 px,当绘制在1∶10和1∶1 000之间时自适应递减改变测井曲线线型,如图5所示。同时,在测井曲线抽稀时,利用Canvas事件处理机制将测井解释道和测井曲线道结合,通过双击测井曲线道身,浮动显示对应曲线深度,当鼠标指向深度对应的测井解释时,提示相应颜色的背景色,简化了模板,丰富了测井曲线的内容,如图6所示。

图5 自适应抽稀测井曲线

图6 结合测井曲线和测井解释道

3 功能实现及性能测试

3.1 数据预处理及贝塞尔曲线拟合

选择某口深度为1 155~4 000 m的井作为测试井,绘制一屏共33 m的测井曲线,其中GR、SP、CALI、DEN、CNL和AC采用常数坐标绘制,RT、RI、RXO采用对数坐标绘制。如图7所示,其中图(a)是用原始测井数据绘制的9种常规测井曲线,图(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 测井曲线拟合参数比较

从客观和主观方面来看,在抽稀后的曲线基础上,利用贝塞尔曲线拟合,能绘制出符合要求的测井曲线。

3.2 性能测试

对于动画的流畅度,一般使用帧率(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,动画的流畅性得到明显提升。

4 结论

本文提出了一种基于贝塞尔曲线的测井曲线动态绘制方法,采用一屏动态绘制方式,对测井曲线数据进行抽稀,利用绘制贝塞尔曲线来拟合原测井曲线,极大地降低了浏览器渲染压力,可实现快速响应交互。该方法在保证测井曲线准确性的前提下,提升了动态绘制的流畅度和清晰度,并且提供了在画布上进行标注和自适应抽稀等实时交互功能。经过工程实践,测井曲线的拟合效果符合工程要求,绘制速度满足地质工作人员的日常需求。

图10 基于贝塞尔曲线的测井曲线与原图的对比示意图

猜你喜欢

曲线拟合测井画布
本期广告索引
基于MATLAB 和1stOpt 的非线性曲线拟合比较
测井工作中存在的误区与应对措施
在画布上做梦的画家 夏加尔
在画布上做梦的画家 夏加尔
我国测井评价技术应用中常见地质问题分析
浅谈Lingo 软件求解非线性曲线拟合
让鲜花在画布上盛开
曲线拟合的方法
大师的画布