视频教你切割和组合二维和三维地震数据(含程序)

视频教你切割和组合二维和三维地震数据(含程序)

首页休闲益智三维切片3D更新时间:2024-05-09

各位同学,大家好。前期科技州推出了课程《怎样切割和组合二维和三维地震数据?》受到大家广泛关注,但也遇到一些学习问题,主要集中在环境配置和程序运行方面。今天我们就通过视频讲解,全流程给大家演示运行程序的方法。

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的二维剖面。可以看到与原数据剖面图没啥区别,证明程序是比较可靠的。

通过以上的讲解,大家就可以轻松自己运行程序实现二维和三维地震数据切割和组合,帮助大家解决为训练或预测而进行数据的切割和组合问题。其它理论部分,欢迎大家学习课程《怎样切割和组合二维和三维地震数据?》。如果大家对程序感兴趣,请联系我交流讨论。

我是科技州,用心分享智能地震勘探干货,带你一同进步。再见。

相关阅读:

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved