敬请关注《地学新视野》
摘要:本文简单介绍了SEG-Y地震数据文件格式,以及如何用Python语言编写读写SEG-Y格式的地震数据并绘制地震剖面,其中用到了Segyio和matplotlib软件包,给出了程序源代码和应用示例图形,分享供大家参考。
一、引言
在人工智能技术火热的今天,Python语言成为运用深度学习、大数据分析研究与应用的主要编程语言。对于地球物理研究工作者而言,学习Python语言编程也成为进入人工智能应用研究必须掌握的一门技艺。本文介绍如何用Python语言编写读写SEG-Y格式的地震数据并绘制地震剖面,其中用到了Segyio和Matplotlib软件包,给出了程序源代码和应用示例图形,供大家参考。
二、SEG-Y地震数据格式简介
在地球物理研究特别是地震勘探研究中,最常用到的数据文件格式是SEG-Y格式,这是美国勘探地球物理学家协会(SEG)制订的地震数据交换存储格式标准,为国际地球物理界和石油工业界所普遍接受和采用,目前的最新版本为2017年1月颁布的2.0版本。我国对应的SEG-Y行业标准最新的是2008年颁布的中华人民共和国石油天然气行业标准《SY/T 5453-2008:地震数据交换记录格式》。SEG-Y地震交换数据文件格式的要点是:SEG-Y格式地震数据文件是二进制数据文件,由一个400字节的卷头、3200字节的文件头和一系列地震道记录组成,地震道记录由240字节的道头和地震道时间序列数据组成。SEG-Y格式对地震数据文件的结构和头文件属性进行了详细的定义,同时也预留了一定的用户自定义空间,不同用户在存储地震数据时基本遵循标准定义的结构和头文件属性内容,但在头文件的某些属性定义时却大量存在定义不标准或不全面的情形,使用时应加以注意和处理。详细的SEG-Y格式解析见标准文本或相关文献介绍(标准文本下载地址见https://seg.org/Publications/SEG-Technical-Standards),这里就不再赘述。三、SEG-Y格式地震数据输入输出软件包Segyio
SEG-Y格式地震数据文件是二进制文件,需要采用二进制文件的输入输出方式进行数据的读取和写入。如果自己编程实现SEG-Y地震数据的读写,需要详细解析SEG-Y格式并编写相应的代码来实现各个数据块和文件头、道头文件字段的解析,还需要处理不同数据存储格式的转换等功能,要实现软件功能的完整性和较强的适应性具有较大的难度和编程工作量。幸运的是,Python编程环境有许多可供利用的第三方开源软件包可以实现丰富的功能,其中一个就是Segyio。Segyio是一个SEG-Y格式地震数据快速输入输出C语言函数库,绑定了Python语言和Matlab语言接口,能够方便地读写文件头信息、道头信息和地震数据,目前的最新版本是1.9.0。另外,Segyio也支持Seismic Unix格式地震数据的输入和输出处理。Segyio开源软件包的地址是:https://github.com/equinor/segyio或https://pypi.org/project/segyio/,那里提供了软件的介绍、示例、文档和软件下载,同时在地址https://segyio.readthedocs.io也给出了软件的详细文档,并提供PDF格式的文档下载。
Segyio软件包由Equinor公司开发和维护,Equinor公司就是由赫赫有名的挪威国家石油公司(Statoil)于2018年更名而来。
要使用Segyio,首先要安装相应的软件包。在Python编程环境中可以用Python包管理工具pip或conda进行软件包的安装,下面的命令是安装1.9.0版本segyio软件包: >pip install “segyio==1.9.0”编程实现一节中再给出如何运用Segyio软件包读取SEG-Y格式的地震数据。
四、地震剖面绘图
地震剖面是地球物理研究中最常见的一种图形,由地震数据生成地震剖面主要由两大类方法,一类是借助于专业软件读取地震数据并生成地震剖面图,另一类是自己编程直接生成地震剖面图,前者具有较强的专业性和通用性,后者一般比较简单并具有较强的针对性,笔者这里就是采用直接编程的方法生成地震剖面图。笔者这里采用两种方法绘制地震剖面图,一种是将地震数据转换成SVG格式矢量图文件的方式,再用浏览器显示SVG格式图形;另一种是用matplotlib软件包直接在程序输出界面上绘制图形,由此可将图形用PNG格式保存为文件。前者需要软件编写人员了解SVG图形格式标准,而后者可以充分利用matplotlib的内置功能简捷地得到地震剖面图。SVG是一种基于XML语言的矢量图形文件存储格式,笔者2002年曾有一篇文章详细介绍这种图形格式。Matplotlib是Python编程语言中最常见的图形绘制软件包,可以从地址www.matplotlib.org获得详细的软件介绍、文档和软件下载,一般Python开发环境中都包含了Matplotlib软件包,如果没有安装可以用“pip install matplotlib”命令安装。
五、编程实现与程序源代码
为实现SEG-Y格式地震数据的读取和地震剖面显示,我们编制了一个Python语言程序(plot-segy.py),该程序包含了一个主程序和6个函数,函数的功能和名称如下:(1)读取SEG-Y格式地震数据文件主要参数
getSEGYInformation(filename)
(2)读取SEG-Y格式地震数据
readSEGYData(filename)
(3)绘制屏幕地震剖面图
plotSeismicMap(title,nPoint,nSample,t0,dt,seis,w,h,scale,kf)
(4)生成SVG格式地震剖面图文件
outputSeisSVG(myFile,nt,ns,t0,dt,seis,x0,y0,Width,Height,scale,kf)
(5)生成SVG格式文件头
PrintSVGHeader(f, title, w, h)
(6)生成SVG格式文件尾
PrintSVGFooter(f)
程序的全部源代码如下,供参考,这里不再详细描述,相信一看就会明白。
六、绘图效果
上述程序的运行将输出如下3个地震剖面图,第一个是SVG图形,第二个和第三个是用matplotlib绘制的屏幕图形显示。
本文简单介绍了SEG-Y地震数据文件格式,以及如何用Python语言编写读写SEG-Y格式的地震数据并绘制地震剖面,其中用到了Segyio和matplotlib软件包,给出了程序源代码和应用示例图形,分享供大家参考。欢迎对程序进行优化并给予反馈。2019年12月15日于南京
《地学新探索》公众号2019年文章清单:
基于Python语言的SEG-Y格式地震数据读取与显示编程
Python深度学习研究开发环境安装:TensorFlow与PyTorch
5G将给石油工业数字化转型带来什么?
2019年人工智能技术在地球物理中的应用研究新进展
石油物探智能化发展之路:从自动化到智能化
先睹为快:2019年SEG年会138篇人工智能应用论文会前分享
人工智能应用面临的挑战:训练数据集问题
人工智能应用面临的挑战:认识与观念误区
初识华为云ModelArts一站式人工智能开发平台
地学新视野:赵改善技术探索文集(2017-2018)
Julia编程语言:地球物理研究的新选择
Julia: 一种新的科学计算编程语言
人工智能赋能油气工业数字化转型
石油物探新兴技术成熟度曲线研究
敬请关注《地学新视野》