最近花了比较多时间处理xtf格式的侧扫声呐数据,ubuntu下写了一个数据处理的软件。输入为xtf文件路径或xtf文件夹路径。对每个xtf文件有四个输出文件,包括基本信息文件(.json),航迹数据文件(.mat),左舷强度数据文件(.mat),右舷强度数据文件(.mat)。输出文件的信息均为xtf文件记录侧扫输出的原始数据信息。后续可行根据需求利用这些文件做进一步的处理,如斜距校正,灰度校正,几何校正等。另外写了几个python小脚本,主要功能是根据输出的文件绘制简易灰度图和航迹图。 软件项目的地址如下: https://code.ihub.org.cn/projects/5800/repository/xtf_data_analyze https://github.com/cabinx/xtf_data_analyze.git 项目内doc文件夹下有简易使用手册可以查询,包括如何安装使用等,当然文章后续我也会做简要说明。此外doc下还有xtf格式的官方文档。在此默认已对侧扫工作原理及输出数据有一定了解。 一、编译安装的问题 由于项目需要c++下输出.mat格式文件,因此依赖matio库(https://github.com/tbeu/matio),编译前需安装: sudo apt-get install libmatio-dev; M, v# }2 |: {# k5 ]& |
我们需要获取库的路径,并在CMakeLists中做相应修改。在终端查询: dpkg -L libmatio-dev0 g8 O# \% S0 p, j3 [# ]/ D
其中libmatio.so路径就是项目需要链接的路径。由于不同的平台下系统目录略有不同,不做修改的话可能会导致编译失败。 此外,项目在处涉及json文件处理时使用了一个非常好用的轻量级c++的json库,RapidJSON,感兴趣的可以了解一下http://rapidjson.org/zh-cn/。 具体安装测试使用请查阅使用手册。 二、输出文件格式问题 简要介绍一下输出的几个文件内的数据,具体参考使用手册。 1、基本信息文件(xxx_info.json) 主要是fileheader和chaninfo的信息,其中有几个要注意一下: TotalPingNumber:总ping数; NavUnits:GPS格式,0表示UTM格式,3表示经纬度格式; chan_x:通道x,如chan_0表示通道0; BytesPerSample:此通道每个数据字节数,本项目只支持1字节和2字节; 大多能在xtf官方文档中能查询到。 2、航迹数据文件(xxx_TRAJ.mat) 直接上每列代表的数据: [时间戳,侧扫经度,侧扫纬度,侧扫高度,左舷斜距,右舷斜距,左舷单线采样点数,右舷单线采样点数,侧扫速度,侧扫Pitch,侧扫Roll,侧扫Heading] 注意NavUnits为0时,经纬度为UTM格式的,需要根据需求转换。 3、强度矩阵数据文件 左舷(xxx_PIM.mat); 右舷(xxx_SIM.mat)。 注意BytesPerSample为1时,每个采样点强度信息范围为(0~255);BytesPerSample为2时,每个采样点强度信息范围为(0~65535)。 三、python脚本 几个简易小脚本,在DataProcess中: draw_intensity_image.py:绘制简易灰度图(基本未校正); draw_trajectory_image.py:绘制单个文件航迹图; draw_multi_trajectory_image.py:绘制多个文件航迹图(注意需要同一测试地点的航迹文件)。 用项目中data文件夹下的测试数据得到的一些效果如下: 四、一些说明 软件比较粗糙,只是主要对xtf文件原始数据做提取处理,若想获得理想的侧扫图像,需要利用提取得到的数据文件做后处理。此外软件只支持每个采样点数据大小为1字节或2字节。同时对于双频侧扫声呐采集的数据,由于软件只提取了0通道和1通道的信息,故输出的数据文件为低频信息,高频信息未做处理。 目前软件能满足个人的使用需求,若后续有更进一步的需求,可能会进一步开发。 |