各位同学,大家好。前期科技州推出了课程《怎样切割和组合二维和三维地震数据?》受到大家广泛关注,但也遇到一些学习问题,主要集中在环境配置和程序运行方面。今天我们就通过视频讲解,全流程给大家演示运行程序的方法。
01 环境的配置
1.基本程序环境
我们的课程主要都是在Python环境下运行的,所以大家需要配置Python相关运行环境。我们常用Anacoda 的Spider作为开发编辑器。这款软件既是免费软件,也具有较好的调试功能。
以下是我们推荐的开发环境版本。
Python 3.8。
Spyder 4.1.4。
2.本课程用到的引用库
这本次课程中,我们会用到几个程序的引用库。
一是segyio库
segyio是一个小型的处理地震segy数据的程序库,带有python和matlab的语言绑定,能够方便地读写文件头信息、道头信息和地震数据。
安装方法:pip install segyio
二是numpy库
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。在本课程中主要用来做地震数组的运算。
安装方法:pip install numpy
三是cv2库
OpenCV(CV:Computer Vision,计算机视觉)实现了图像处理和计算机视觉方面的很多通用算法。CV多用在计算机视觉项目的开发中,使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。我们在本项目使用CV库对图像进行了变形等处理。
安装方法:pip install opencv-python
四是glob库
glob模块提供了函数用于从目录通配符搜索中生成文件列表。glob函数可以查找符合通配符要求的文件。我们在项目中,使用这个函数查找数据。
安装方法:pip install glob2
五是skimage库
skimage即是Scikit-Image,是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理。在本课程中对图像数据进行变形等处理。
安装方法: pip install scikit-image
六是matplotlib库,主要功能是用于绘制各种图像的模块,用于数据的分析和展示。
安装方法:pip install matplotlib
本次课程这几个引用库的推荐版本是:
segyio 1.9.6
glob2 0.7
scikit-image 0.16.2
matplotlib 3.3.2
opencv-python 4.6.0.66
numpy 1.18.5
02 程序运行
1.程序结构
本次课程程序的结构如图所示:
在data文件夹中,放的是测试的地震数据。Model94_shots.segy是二维地震数据,Kerry3D.segy是三维地震数据。
接下来,主程序是seismicSlice.py,集中展示了二维、三维地震数据的切分和组合、显示等功能。
剩余的程序是供主程序调用的函数。slice2D.py和slice3D.py是实现二维和三维数据直接切割或组合的函数,getPatch2D.py和getPatch3D.py则是生成二维或三维训练集数据需要用到的函数。
2.程序运行
现在我们来详细讲解程序运行的过程。
首先我们加载函数库和预设参数。
接下来是二维数据切割和组合的讲解。
先读取一个二维地震数据。
然后看看原始数据的剖面图效果。
接下来讲解第一个场景,我们讲讲怎样生成训练集数据,这主要用在二维模型的训练。
我们对原始剖面数据进行切割,并按照我们自己的要求对样本数据的形态进行丰富,操作方法包括了翻转、拉伸等。这里的关键函数是datagenerator。我们将1000*1200的剖面数据切割为10000个32*32的小块二维数据。这里注意,小块的数量是我们可以设置的,翻转、拉伸等操作也是可以设置的,根据我们需求来生成了形态比较丰富的训练集。
处理完之后,我们随机选几个小块看看啥样,可以发现小块的形态是非常丰富的。
接下来,我们讲解第二个场景,讲讲怎样对目标数据直接切割为小块,然后再组合还原,这个方法主要用在对数据进行预测处理。
首先加载预设参数,这里切割的小块尺寸为40*40。
然后使用slice2D函数进行切割。这里的参数需要指定输入的数据源,输入数据的尺寸,切割小块的尺寸,切割标志为1。切割的结果就是生成了2891个小块。
接下来可以看看,小块的图像看起来是这样的。
我们不仅能切割,还可以还原。使用函数slice2D可以将小块组合。输入参数与切割的程序相比基本没有区别,就是把标志指定为0。
组合后的数据剖面看起来是这样的。
与原数据剖面图没啥区别,这也证明了程序的可靠性。
现在我们来讲讲三维地震数据的切割和组合。
三维体的切割和组合与二维剖面相比,基本原理都是不变的,区别就是复杂度增高,计算资源要求更高。
假如我们找的是一个200*500*500的三维地震数据体。
首先加载地震数据,读取三维地震数据时间会比二维数据更久。
现在我们先介绍为生成训练数据集而进行的小块的切割,这类场景主要用在三维模型训练。
假如我们要想生成1000个32*32*32的小数据体,就可以用datagenerator3D函数来实现。程序整体设计思路和datagenerator二维切割程序差不多,但是由于增加了一个维度,生成小块数据耗费的时间和存储空间都是指数倍上升,建议生成的小块三维体数量不要太多。
现在我们来看其中一个数据块的二维剖面,是这样的。
现在我们再来讲解数据块直接切割和组合,这类场景主要用于三维数据的预测处理。
这里我们指定inline为100来进行切片,二维剖面看起来是这样的 。
接下来预设参数,准备切割为30*30*30的小块
使用slice3D函数就实现了三维地震体的切割。参数的设置和二维数据体切割的方法差不多,但是由于多了一个维度,函数slice3D的内部程序进行了比较复杂的改动。
如果想看切割的小块的一个剖面是这样的。
要将小块组合回原始数据,可以同样使用函数程序slice3D,这里标志设为1。
对于恢复的三维体,也可以看看inline为100的二维剖面。可以看到与原数据剖面图没啥区别,证明程序是比较可靠的。
通过以上的讲解,大家就可以轻松自己运行程序实现二维和三维地震数据切割和组合,帮助大家解决为训练或预测而进行数据的切割和组合问题。其它理论部分,欢迎大家学习课程《怎样切割和组合二维和三维地震数据?》。如果大家对程序感兴趣,请联系我交流讨论。
我是科技州,用心分享智能地震勘探干货,带你一同进步。再见。
相关阅读:
智能时代已到 助你勇攀储层勘探高峰
如何在地震勘探研究更上一层楼?带你一起深度学习识别断层
怎样轻松入门地震勘探研究:先从地震数据处理开始
深度学习地震去噪实战:教你如何从0开启地震深度学习科研之路