在《地震数据处理实战入门》的第五课《怎样修改保存二维和三维地震数据?》中,给大家详细讲解了怎样保存SEGY数据。很多同学使用Python程序成功构建了新的SEGY数据,但是将数据投入工程项目使用时(如做高分辨率、断层识别等),出现了问题。
比如在商业地质勘探软件Petrel中,导入我们新建的数据资料,报了这样的错误:
这是什么原因呢?
01 从SEGY文件结构找原因。
SEGY地震数据一般以地震道为单位进行组织,采用SEG-Y文件格式存储。SEG-Y格式是由SEG (Society of Exploration Geophysicists)提出的标准磁带数据格式之一,它是石油勘探行业地震数据的最为普遍的格式之一。
SEGY的数据结构比较复杂,详细介绍可以参考另外一门课《深度学习地震去噪实战》的第4节课《地震仿真噪声实战》。这里简单介绍一下:标准SEG-Y文件一般包括三部分。第一部分是EBCDIC卷头说明。第二部分是二进制文件头。第三部分是实际的地震道。
回顾一下当时保存地震数据的程序:
可以看到,在上面的程序中,新保存的地震数据里面没有卷头说明和文件头的信息,只保存了地震道的数据。这样的数据使用简单的画图程序打开没有问题,但是用到专业的处理软件做后面复杂的工作就有问题了。
02 一种简单的解决方案。
找到了问题原因,要解决起来就有了思路,就是要构造新数据的卷头说明和文件头信息。
如果大家只是对原始数据做了数值上的处理,没有改变数据尺寸,这还比较好办。就是把原始数据的卷头说明和文件头传给新数据即可。主要程序可以这样写:
这里有几个点要说明:一是专业软件读取地震头时主要关注的是数据的尺寸,所以如果没有对数据尺寸进行修改,就可以直接复制原始数据的卷头说明和文件头信息。二是src.text[0]读出了原始数据的卷头说明。三是src.header读出了所有地震道的文件头信息。
03 更复杂的解决方案。
如果同学们对原始数据的尺寸也进行了改变(比如进行了切割),那就需要下一番功夫来修改卷头说明和文件头信息了。
首先是修改卷头说明。
我们可以把原始卷头下载到文本中进行修改,然后再传递给新的地震数据。
比如这里你可能改变了地震道的数量和抽样点数量,就可以自行修改。
其次是修改地震道的文件头。
红色框部分我们首先复制了对应地震道文件头的信息,然后修改了抽样点数值。这里的115对应了抽样点字段。
详细的操作和说明建议大家看看这个网站:
https://segyio.readthedocs.io/en/latest/segyio.html。
04 顺带讲解怎样将SEGY保存为MAT。
很多同学在问,想把SEGY数据保存为MAT格式,方便在Matlab中处理。这里直接给大家看程序。
使用scipy软件库,就可以把二进制数据保存为mat格式数据。这里要注意的是保存为字典的数据结构。
在matlab读取mat就用这样的程序:
以上就是今天的内容。今天深入讲解了SEGY数据的一些保存方法,掌握了这些知识,会非常有助于大家开展地震数据处理深入的研究。如果你有问题讨论或希望获取数据或程序都欢迎联系我交流。下节课再见。
扩展阅读:
网友评论