python工具读取和绘制dzt格式的地球物理测量系统(gssi)雷达数据

readgssi的Python项目详细描述


readgssi

版权所有2017-2019

example radargram

PYPI版本doi许可证生成状态documentation status每月下载量

readgssi是一个工具,用作开放源代码阅读器和预处理模块,用于使用地球物理测量系统(gssi)探地雷达(gpr)设备收集地下数据。它能够读取具有相同预扩展名的dzt和dzg文件,并打印这些文件中包含的数据。readgssi目前还能够将大多数dzt文件转换为csv,并将能够转换为其他输出格式,包括hdf5(请参见future)。Matlab代码由达特茅斯学院地球科学系的Gabe Lewis捐赠。经缅因大学地球与气候科学学院伊恩·奈斯比特(Ian Nesbitt)许可编写的巨蟒改编本。

文件读取参数基于gssi的dzt文件描述,类似于SIR-3000手册的第55-57页。不幸的是,文件结构随时都可能发生变化,尽管我已经能够使用来自多个系统的文件进行测试,但我还没有遇到文件头的每次迭代。如果遇到问题,请创建一个github问题

问题、功能请求和错误:请打开github问题。请提供错误输出,描述您正在尝试执行的操作,并附上引起您麻烦的dzt/dzg文件。

要求

强烈推荐d通过anaconda安装

通过pip安装:

安装

一旦您运行了anaconda,安装需求就非常容易了。

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi

这将允许您运行下面的命令。

从源安装:

如果您选择安装特定的提交,而不是此软件的最新工作版本,则可以下载此软件包,解压缩到主文件夹,打开命令行,然后按以下方式安装:

pip install ~/readgssi

用法

显示帮助文本:

$ readgssi -h

usage:
readgssi -i input.DZT [OPTIONS]

required flags:
     OPTION     |      ARGUMENT       |       FUNCTIONALITY
-i, --input     | file:  /dir/f.DZT   |  input DZT file

optional flags:
     OPTION     |      ARGUMENT       |       FUNCTIONALITY
-o, --output    | file:  /dir/f.ext   |  output file. if not set, will be named similar to input
-f, --format    | string, eg. "csv"|  output format (csv is the only working format currently)
-p, --plot      | +integer or "auto"|  plot size. will be x inches high or "auto". default: 10. see also -D to set DPI
-D, --dpi       | positive integer    |set the plot DPI for figure making. defaults to 150
-T, --titleoff  ||  turn the plot title off (useful for figure making)
-x, --xscale    | string, eg. "dist"|  x units. will attempt to convert the x-axis to distance, time, or trace units based on header values
-z, --zscale    | string, eg. "time"|  z units. attempt to convert the x-axis to depth, time, or sample units based on header values
-e, --zoom      | list of +int [LRUD]|set a zoom to automatically jump to. list order is [left,right,up,down] and units are the same as axis
-n, --noshow    ||  suppress matplotlib popup window and simply save a figure (useful for multi-file processing)
-c, --colormap  | string, eg. seismic |  specify the colormap (https://matplotlib.org/users/colormaps.html#grayscale-conversion)
-g, --gain      | positive float      |  gain constant (higher=greater contrast, default: 1)
-r, --bgr       | +integer or zero    |  horizontal background removal (useful to remove ringing). zero=full width;positive=window size (after stacking)
-R, --reverse   ||  reverse (flip array horizontally)
-w, --dewow     ||  trinomial dewow algorithm
-t, --bandpass  | +int-+int (MHz)|  triangular FIR bandpass filter applied vertically (positive integer range in megahertz; ex. 70-130)
-b, --colorbar  ||  add a colorbar to the radar figure
-a, --antfreq   | positive integer    |set antenna frequency. overrides header value
-s, --stack     | +integer or "auto"|set trace stacking value or "auto" to autostack to ~2.5:1 x:y axis ratio
-N, --normalize ||  distance normalize; reads .DZG NMEA data file if it exists; otherwise tries to read CSV with lat, lon, and time fields
-d, --spm       | positive float      |  specify the samples per meter (spm). overrides header value
-m, --histogram ||  produce a histogram of data values
-E, --epsr      | float > 1.0         |  user-defined epsilon sub r (sometimes referred to as "dielectric")if set, ignores value in DZT header
-Z, --zero      | +int or list of int |  timezero: skip samples before direct wave. samples are removed from the top of the trace. use list for multi-channel

naming scheme for exports:
  CHARACTERS    |      MEANING
    Ch0         |  Profile from channel 0(can range from 0 - 3)
    Dn          |  Distance normalization
    Tz233       |  Time zero at 233 samples
    S8          |  Stacked 8times
    Rv          |  Profile read in reverse (flipped horizontally)
    Bgr75       |  Background removal filter with window size of 75
    Dw          |  Dewow filter
    Bp70-130    |  triangular FIR filter applied from 70 to 130 MHz
    G30         |  30x contrast gain
    Z10.20.7.5  |  zoom from 10-20 axis units on the x-axis and 5-7 on the z-axis

从Unix命令行:

readgssi -i DZT__001.DZT

简单地在上面的命令中指定一个输入dzt文件(-i file)将显示关于该文件的大量数据,包括:

  • GSSI控制单元的名称
  • 天线型号
  • 天线频率
  • 每个记录道的样本数
  • 每个样本的位数
  • 每秒记录道数
  • 测量期间输入的L1电介质
  • 采样深度
  • 给定电介质下的波速
  • 记录道数
  • 秒数

基本功能

CSV输出

readgssi -i DZT__001.DZT -o test.csv -f CSV

把雷达数据数组转换成csv格式,如果你喜欢的话。可以用这个导出到Matlab。每个频道将写入一个csv。脚本将自动将输出重命名为"test_100MHz.csv"。CSV中不包含标题信息。

readgssi -i DZT__001.DZT -s 8 -w -r 0 -o test.csv -f CSV

在导出到CSV之前,应用8x堆叠、露水和背景移除过滤器。

numpy对象输出

readgssi -i DZT__001.DZT -o test.npy -f numpy

此命令将以numpy二进制格式保存数组。但是,不会保存标题信息。

gprpy-兼容输出

readgssi -i DZT__001.DZT -o test -f gprpy

此命令以numpy二进制格式保存数组,并将头保存为json文件。gprpy将很快支持导入此类文件。

绘图

示例1a:无增益
readgssi -i DZT__001.DZT -o 1a.png -p 5 -s auto

上面的命令将导致readgssi保存并显示一个名为"test_uu001c0tz233s6g1.png"的图,该图的y尺寸为5英寸,速度为150 dpi(-p 5),自动跟踪算法将把x轴叠加到比原始数据数组短一些倍的位置,以获得最佳效果在监视器上观看,大约2.5*y(-s auto)。绘图将以灰色配色方案呈现。 example 1a

示例1b:增益

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
0

这将导致readgssi从同一文件创建绘图,但matplotlib会将绘图保存为"1b.png"(-o 1b.png)。脚本将绘制y轴大小(-p 5)并自动堆叠x轴to(-s自动)。脚本将以50的增益值绘制数据(-g 50),这将使绘制对比度增加50倍。接下来将运行后台删除(-r 0)过滤器。 example 1b

示例1c:右增益设置可能略有不同,具体取决于您的颜色映射

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
1

这里,应用水平背景去除,但增益被降低(-g 20)。该脚本使用matplotlib的"seismic"颜色映射(-c seismic),该颜色映射是专门为此类瀑布阵列绘制而设计的。即使没有增益,你也能很容易地看到非常轻微的信号扰动。然而,考虑到它使用红色,对于人类最常见的两种色盲中的任何一种来说,它都不是非常友好的色盲,这就是为什么它没有被用作默认的颜色映射。 example 1c

示例2a:无背景移除

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
2

有时,由于相对于数据平均值的偏差,文件看起来会被"冲掉"。这很容易纠正。在这里,readgssi将创建一个大小为5、堆栈为5x的图(-p 5-s5)。matplotlib将使用默认的"gray"colormap并保存图形的png,但是脚本将抑制matplotlib窗口(使用-n标志,这对于一次处理整个目录中的dzts非常有用)。最后,-m标志将为每个数据通道绘制直方图。注意应用过滤器时直方图的变化。 example 2aexample 2a histogram

示例2b:应用水平平均bgr算法

消除倾斜(或任何水平均匀噪声)的标志是-r,也称为背景去除或bgr。-r有两种模式,一种是由-r 0设置,另一种是当-r标志后的选项大于零时设置。当这个bgr选项为零时,程序只需从数组中减去每个配置文件行的平均值。当它大于0时,readgssi将实现一个移动窗口平均值,其大小在堆栈后的记录道中设置(请参见示例2c-moving-window-horizontal-mean rel="nofollow">示例2c)。

下面的命令执行与示例2a相同的操作,不同的是-r 0对配置文件应用全宽水平平均背景删除。注意示例2a和2b在振铃伪影和倾斜方面的差异。

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
3

example 2bexample 2b histogram示例2c:移动窗口水平平均值

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
4

与上述相同,但具有75道宽移动窗口平均值(-r 75)。此宽度表示堆栈后跟踪。无论出于何种目的,这都与拉丹的"BoxCar"水平噪声去除方法相同,但速度要快得多。超出左边缘和右边缘的区域被视为零。注意,水柱中的噪声几乎被完全消除,但实际数据是用半个窗口大小的横向光束扩展的,这是这种方法的副作用。请注意,直方图(-m)在平均值周围具有相当均匀的分布,这通常表示图像应该相当可读。

example 2cexample 2c histogram

示例3a:(无)距离归一化

readgssi的默认行为是以测量时间单位(秒)绘制X轴。这可以使用-x标志进行更改。要以距离单位显示,您必须使用dzg格式的gps信息,或者使用-d标志指定每米的雷达道数。-d 24-x米将标题中每米记录道的值更改为24.0,并显示沿x轴以米为单位的距离剖面。

带有GPS信息的文件处理方式略有不同。首先,readgssi将读取一个dzg文件,以创建一个与dzt中的标记相关联的距离信息数组。(注意:如果您的项目记录时没有DZG文件,但您有GPX格式的每行GPS标记信息,请在阅读DZG后查看GPX2DZG,以获取为每条测量线创建DZG文件的方法,该程序将根据GPS点之间的地面速度扩展或收缩GPR阵列。然后,它将修改标题中每米记录道的值,并在X轴上显示带有距离的配置文件。

这里处理和显示的文件没有距离规范化:

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
5

example 3A

示例3b:使用dzg文件的距离规范化

要使用DZG GPS信息对外形进行距离标准化并以米为单位显示行程,请使用-n-x meters标志。readgssi将以块的形式规范化文件,以减少内存使用。下面是应用了距离规格化的同一文件:

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
6

example 3b

高级用法

unix用户有一个明显的优势,那就是可以用一个简单的命令轻松地处理整个充满dzt的文件夹。希望这样做的用户应该阅读关于如何在bash中构造for循环的或简单地遵循并修改下面的示例。

处理文件夹中的所有文件

此命令使用bash中的ls函数,该函数列出与特定模式匹配的所有文件。在这种情况下,我们需要模式作为"任何DZT文件",它最终只是ls*.dzt(符号*是通配符,意味着它匹配任何字符集,因此在本例中,它将同时匹配文件测试.dzt,但不匹配测试01.dzt,因为.dzt区分大小写。)

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
7

如果您对for循环稍有了解,则该命令的结构很容易理解。此命令循环每个扩展名为.dztls*.dzt其中*表示通配符)的文件,并将文件名分配给每个循环上的f变量。然后,在分号之后,bash为循环的每次传递运行readgssi。在这种情况下,参数为:

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
8

最后,使用换行符结束标记关闭命令,结束循环。

处理特定的文件集

通过进一步修改ls命令返回的文件集,可以使命令更加具体。例如:

conda config --add channels conda-forge
conda create -n readgssi python==3.7 pandas h5py pytz obspy
conda activate readgssi
pip install readgssi
9

此命令将只处理集合(file_u010.dztfile_u011.dztfile_u011.dzt..file_u025.dzt之间的16个数字序列的文件。bash也为您处理零填充。很酷。

贡献者

引文建议:

伊恩M.奈斯比特,弗朗索瓦·泽维尔·西蒙,托马斯·保林,2018年。read gssi-一个开源工具,用于读取和绘制gssi探地雷达数据。doi:10.5281/zenodo.1439119

已知错误:

  • scipy 1.2.x在过滤时导致错误。使用scipy 1.3.0避免。
  • 在某些绘图上,颜色栏显示得太大(matplotlib错误)
  • 短线具有轴限制,轴限制高而窄,这可能会截断标题(可能需要以不同的方式计算绘图大小信息)

未来

  • 明确的文档
  • 为更平滑的开发自动测试脚本
  • 为SurveyLine对象创建一个类,类似于
  • CSV中带有标记名称、lon、lat、elev、时间等字段的GPS转录
  • 使用GPS高度调整纵断面上的Z位置
  • 基于gui的地质/介质层拾取
    • 层速度计算(使用群集双曲线尾角测量的最小值,或手动输入)
    • 基于速度的深度调整
    • 合并地面真实度测量的能力
  • 基于速度梯度/入射角的阵列偏移
  • 转换为通用地球物理格式(HDF5、SEGY等)
  • 集成vista实现位置感知阵列的三维可视化

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java搜索文本中的字符串模式   SecurityManager引发异常的java Mockito模拟   java(仅限Netbeans)未找到适合jdbc的驱动程序:mysql://localhost   java计算给定字符串所有前缀的哈希值的子字符串的哈希值   java如何避免每次访问REST认证API以使用实际服务   用于HTML的java Jsoup选择器组合   可以复制或引用的java构造函数   Java中的HashMap。搞砸containsKey返回意外值   java数组平均值计算   java是检查字符串是否包含特定字符的最有效方法   java反序列化对象类已更改   java典型的EJB3/JPA/JSF中的事务范围是什么?   Install4j的java错误代码20   java:compileJava在本地项目()依赖项上的多模块项目上持续失败“错误:包x.y.z不存在”   java有一种生成Suppression的方法。现有代码库中checkstyle的xml文件?