敬请关注《地学新视野》

摘要:本文简单介绍了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: 一种新的科学计算编程语言

  • 人工智能赋能油气工业数字化转型

  • 石油物探新兴技术成熟度曲线研究

敬请关注《地学新视野》

livechart 只显示 y 值_基于Python语言的SEGY格式地震数据读取与显示编程相关推荐

  1. python segy格式地震数据读写包segyio学习笔记(二)

    python segy格式地震数据读写包segyio学习笔记(二) 最近大致搞明白了segyio读取叠后和叠前segy数据的方法,以及内部存储结构,以两段代码为例: 叠后数据读取.这是一个从给定时窗内 ...

  2. python中计算如何实现_基于python如何实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...

  3. python 机器学习_基于 Python 语言的机器学习工具Sklearn

    本篇介绍了Sklearn机器学习基础,从Sklearn的简介,模块以及与tensorflow的优劣势对比来了解基于Python语言的机器学习工具.    01.Sklearn简介 sklearn(sc ...

  4. python数字识别kaggle论文_基于Python语言Kaggle的数据集分析

    界 基于 Python 语言 Kaggle 的数 据集 分析 段 聪 聪 柴 世 一 * 渊 河 南 大 学 计 算 机 与 信 息 工 程 学 院 袁 河 南 开 封 475004 冤 揖 摘 要 ...

  5. 基于python的智能安防系统_基于Python语言的智能家居系统研究

    龙源期刊网 http://www.qikan.com.cn 基于 Python 语言的智能家居系统研究 作者:张微微

  6. python空间数据处理_基于Python语言的空间数据处理

    龙源期刊网 http://www.doczj.com/doc/7b0e0476172ded630a1cb662.html 基于Python语言的空间数据处理 作者:何丽娴甘淑陈应跃 来源:<价值 ...

  7. python软件开发电子产品测试方向_基于Python语言的自动测试系统通用软件平台实现...

    期 No.5 2019 年 3 月 Mar. 2019 收稿日期: 2018-05-06 稿件编号: 201805027 基金项目: 中国电科第十研究所发展基金 ( SSJ-1784 ) 作者简介: ...

  8. livechart 只显示 y 值_显示器调节工具Display Maestro for mac v3.0.4

    Display Maestro for mac是一款帮助用户调节屏幕亮度的Mac软件,Display Maestro for mac可以增强系统对显示器设置的功能 . 可以设置更多分辨率和颜色选项甚至 ...

  9. python收集数据程序_基于Python语言的互联网数据收集软件的设计

    软件建立所需的工具及其版本 编写环境与 IDE Python3.5.2 Windows10 PyCharm 2016.3 Sublime Text3 第三方库与版本号 Requests 2.12.1 ...

最新文章

  1. mysql高可用之MMM
  2. R语言构建LogisticRegression模型并计算AUC指标
  3. [Android ] linux命令英文缩写的含义(方便记忆)
  4. jpa 根据主键生成策略获取id_JPA主键生成策略
  5. Juster的MVP奋斗之路
  6. Taro+react开发(23)--componentWillReceiveProps
  7. 移动互联网开始降温:“人才热”退烧
  8. php获取继承类方法吗,php如何获取当前类名,继承中的问题?
  9. Siki_Unity_2-9_C#高级教程(未完)
  10. Python源码剖析 - Python的总体架构
  11. 计算机电工电子怎么学,计算机在电子电工课中的应用
  12. android之仿朋友圈程序,Android仿微信朋友圈添加图片的实例代码
  13. Alt+Shift+NumLock
  14. POI生成动态模板PPT报告
  15. 倒水c语言,洛谷 P1432 倒水问题
  16. Shopee打包贴单商品代发选星卓越货代服务系统
  17. UVa OJ 126 - The Errant Physicist (粗心的物理学家)
  18. 今日头条改版,搜索比重上升,占首屏三分之一
  19. 那个牛逼的斯坦福大学
  20. 百度大脑 EasyEdge 推出端云协同服务,大幅提升本地部署模型迭代效率

热门文章

  1. 一不小心肝出了4W字的Redis面试教程
  2. 骚操作:不重启 JVM,如何替换掉已经加载的类?
  3. 漫画:骚操作系列(灯泡开关的经典面试题)
  4. 3w字深度好文|Redis面试全攻略,读完这个就可以和面试官大战几个回合了
  5. 面试官让我讲讲Unicode,我讲了3秒说没了,面试官说你可真菜
  6. 如何快速融入团队(三)
  7. 基于大数据的Uber数据实时监控(Part 2:Kafka和Spark Streaming)
  8. 月薪8k和月薪38K的程序员差距在哪里?
  9. 环信联合创始人: Saas敏捷开发实践!
  10. 不懂复盘,十年经验等于零