Ubuntu环境下XTF文件成像小程序

Linux 2年前 (2021) admin
0

Ubuntu环境下XTF文件成像小程序

1. 介绍

最近花了比较多时间处理xtf格式的侧扫声呐数据,ubuntu下写了一个数据处理的软件。输入为xtf文件路径或xtf文件夹路径。对每个xtf文件有四个输出文件,包括基本信息文件(.json),航迹数据文件(.mat),左舷强度数据文件(.mat),右舷强度数据文件(.mat)。输出文件的信息均为xtf文件记录侧扫输出的原始数据信息。后续可行根据需求利用这些文件做进一步的处理,如斜距校正,灰度校正,几何校正等。另外写了几个python小脚本,主要功能是根据输出的文件绘制简易灰度图和航迹图。

该软件用于分析xtf格式的离线侧扫声纳数据文件。

我们的文件可以在每个xtf文件处理后获得:

  • 基本信息(json格式)

  • 带有时间戳的轨迹信息(mat格式)

  • 左舷数据(mat格式)

  • 右舷数据(mat格式)

同时,还有一些简单的python脚本用于进一步处理输出文件,如绘制轨迹图像、绘制侧扫图像等。这个软件在Linux上运行。

项目内doc文件夹下有简易使用手册可以查询,包括如何安装使用等,当然文章后续我也会做简要说明。此外doc下还有xtf格式的官方文档。在此默认已对侧扫工作原理及输出数据有一定了解。

2. 安装

  1. 依赖项

由于项目需要c++下输出.mat格式文件,因此依赖matio库(https://github.com/tbeu/matio),编译前需安装:

sudo apt-get install libmatio-dev

我们需要获取库的路径,并在CMakeLists中做相应修改。在终端查询:

dpkg -L libmatio-dev

其中libmatio.so路径就是项目需要链接的路径。由于不同的平台下系统目录略有不同,不做修改的话可能会导致编译失败。

此外,项目在处涉及json文件处理时使用了一个非常好用的轻量级c++的json库,RapidJSON,感兴趣的可以了解一下http://rapidjson.org/zh-cn/

3. 编译

cd xtf_data_analyze
mkdir build
cd build
cmake ..
make

请注意,CMakeLists.txt中libmatio.so的路径必须是检查之前,否则该编译将失败。

执行程序可以在内部版本中找到

文件夹:singleFileProcess,multiFileProcess。

singleFileProcess用于单文件处理,以xtf文件的路径作为输入。

multiFileProcess用于多文件处理,以xtf文件夹的路径作为输入。

4. 测试

数据文件夹中有三个xtf文件用于测试。

单文件测试:

cd build
./singleFileProcess ../data/000_1236_info.xtf

我们可以在包含xtf文件的文件夹中获取输出文件。所以可以创建四个输出文件

在数据文件夹中找到

基本信息数据: 000_1236_info.json

带有时间戳数据的轨迹:000_1236_TRAJ.mat

左舷数据:000_1236_PIM.mat

右舷数据:000_1236_SIM.mat

多文件测试:

cd build
./multiFileProcess ../data/

我们可以将轨迹文件排列到一个文件夹中:

mkdir trajectory
cp *_TRAJ.mat ./trajectory
sudo rm -rf *_TRAJ.mat

5. 输出文件格式

简要介绍一下输出的几个文件内的数据,具体参考使用手册。

  1. 基本信息文件(xxx_info.json)

主要是fileheader和chaninfo的信息,其中有几个要注意一下:

TotalPingNumber:总ping数;

NavUnits:GPS格式,0表示UTM格式,3表示经纬度格式;

chan_x:通道x,如chan_0表示通道0;

BytesPerSample:此通道每个数据字节数,本项目只支持1字节和2字节;

大多能在xtf官方文档中能查询到。

  1. 航迹数据文件(xxx_TRAJ.mat)

直接上每列代表的数据:

[时间戳,侧扫经度,侧扫纬度,侧扫高度,左舷斜距,右舷斜距,左舷单线采样点数,右舷单线采样点数,侧扫速度,侧扫Pitch,侧扫Roll,侧扫Heading]

注意NavUnits为0时,经纬度为UTM格式的,需要根据需求转换。

  1. 强度矩阵数据文件

左舷(xxx_PIM.mat);

右舷(xxx_SIM.mat)。

注意BytesPerSample为1时,每个采样点强度信息范围为(0-255);BytesPerSample为2时,每个采样点强度信息范围为(0~65535)。

{
    “BaseInfo”:
    {
        “FileName” : xxx;
        “SonarName” : xxx,
        “TotalPingNumber” : xxx,
        “NavUnits” : xxx,
        “NumberOfSonarChannels” : xxx,
        “NumberOfBathymetryChannels” : xxx
    },
    “FirstPing”:
    {
        “Time” : xxx,
        “Longitude” : xxx,
        “Latitude” : xxx
    },
    “LastPing”:
    {
        “Time” : xxx,
        “Longitude” : xxx,
        “Latitude” : xxx
    },
    “chan_x”:
    {
        “TypeOfChannel” : xxx,
        “SubChannelNumber” : xxx,
        “CorrectionFlags” : xxx,
        “BytesPerSample” : xxx,
        “VoltScale” : xxx,
        “Frequency” : xxx,
        “HorizBeamAngle” : xxx,
        “TiltAngle” : xxx,
        “BeamWidth” : xxx
    }
}
  1. 带有时间戳数据的轨迹文件:

在轨迹mat文件中,键是“trajïu matrix”,值是一个矩阵(TotalPingNumber x 12)。

每一行由ping数据组成,行与第一行按时间顺序排列

ping数据作为第一行。列参数如下:

[timestamp, longitude, latitude, altitude, slantRangePort, slantRangeStbd, numSamplesPort, numSamplesStbd, sensorSpeed, sensorPitch, sensorRoll, sensorHeading]

第5列和第6列数据是左舷和右舷的倾斜范围。

第7列和第8列数据是左舷和右舷的样本数。

利用se数据可以进行弹道成像、倾斜距离校正、几何校正等

  1. 左舷数据文件

在左舷mat文件中,键是“port_int ensity_matrix”,值是一个矩阵 TotalPingNumber x numSamplesPort。利用矩阵数据可以用射线标度或其它格式绘制侧扫图像的端口侧。

  1. 右舷数据文件

与左舷数据文件几乎相同,除了按键是“stbd_intensity_matrix”。

6. python脚本

几个简易小脚本,在DataProcess中:

draw_intensity_image.py:绘制简易灰度图(基本未校正);

draw_trajectory_image.py:绘制单个文件航迹图;

draw_multi_trajectory_image.py:绘制多个文件航迹图(注意需要同一测试地点的航迹文件)。

1. 绘制侧扫图像

我们可以用draw_intensity_image.py。需要左舷数据文件和右舷数据文件。示例如下:

python3 draw_intensity_image.py xxx_PIM.mat xxx_SIM.mat

2. 绘制轨迹图像

我们可以为单个文件绘制轨迹,下面是一个示例:

python3 draw_trajectory_image.py xxx_TRAJ.mat

或者,我们可以将一些轨迹数据文件整理到一个文件夹中,然后将文件夹路径作为

输入多个图形。所有的轨迹都在同一个图像的坐标系中。

示例如下:

python3 draw_multi_trajectory_image.py FOLDER_PATH

7. 效果

用项目中data文件夹下的测试数据得到的一些效果如下:

Ubuntu环境下XTF文件成像小程序 Ubuntu环境下XTF文件成像小程序 Ubuntu环境下XTF文件成像小程序 Ubuntu环境下XTF文件成像小程序 Ubuntu环境下XTF文件成像小程序 Ubuntu环境下XTF文件成像小程序

8. 说明

软件比较粗糙,只是主要对xtf文件原始数据做提取处理,若想获得理想的侧扫图像,需要利用提取得到的数据文件做后处理。此外软件只支持每个采样点数据大小为1字节或2字节。同时对于双频侧扫声呐采集的数据,由于软件只提取了0通道和1通道的信息,故输出的数据文件为低频信息,高频信息未做处理。

目前软件能满足个人的使用需求,若后续有更进一步的需求,可能会进一步开发。

本例程源码:
xtf_data_analyze-master

版权声明:admin 发表于 2021-08-20 14:31:22。
转载请注明:Ubuntu环境下XTF文件成像小程序 | 小贝比

暂无评论

暂无评论...