1. 为什么把多波束后处理放在QINSy里做
1.1 多波束原始数据的“脏”到底脏在哪
刚接触多波束的人常有个错觉:设备一开,屏幕上花花绿绿的点云出来了,好像成果就在眼前。真上手做完整流程才发现,采集端拿到的只是半成品。QINSy软件在多波束数据处理中的应用,本质上是把一段“物理测量”翻译成“几何成果”的过程,中间要穿过声速、姿态、吃水、潮位、坐标基准五道关卡,每一道关卡引入的误差都会在最终曲面上留下痕迹。
我通常把原始多波束数据的问题分成两类。一类是系统性的,比如换能器安装偏移标定不准、声速剖面用错了测区、潮位站基准面搞反了,这类问题会在整个测区范围内表现出一致的规律,条带整体上翘或下凹,相邻测线系统性错位。另一类是随机性的,比如边缘波束的旁瓣干扰、水面气泡、鱼群、水下悬浮物、螺旋桨水流扰动,表现是零散飞点、条带局部毛刺、测线边缘锯齿状发散。两类问题的处理思路完全不同:系统性误差必须在改正环节解决,靠编辑工具硬压只会把错误固化进成果;随机噪声才适合用滤波器、编辑器和网格算法去收拾。
还有一个容易被忽略的点是数据量。一条 400 kHz 多波束在中等水深跑一天,原始点云动辄几千万到上亿个点,加上姿态、艏向、涌浪、声速、GNSS 全要素记录,单条测线的记录文件几个 GB 起步。这就决定了后处理软件不能只会画图,还得有足够强壮的数据库结构、合理的分块策略和可回溯的重算机制。QINSy在这方面的设计逻辑是“原始记录不覆写、改正参数可回退”,所有处理动作都建立在原始记录之上,参数改错了可以整段重算,不会像某些工具那样一旦保存就再也回不去。
1.2 选型逻辑:为什么不用传统海测后处理套件
很多做水下地形的人第一反应是“后处理当然用那套老牌海测套件”。我不否认那些工具成熟,但在中小型项目、快速周转、需要频繁重算的场景里,QINSy的优势比较明显。我把它和常见几类工具放在一起对比,逻辑会更清楚。
| 维度 | QINSy | 传统海测后处理套件 | 通用点云软件 | 开源脚本链 |
|---|---|---|---|---|
| 采集与后处理一体化 | 同一套模板、同一套坐标系,采集端配置直接延续到处理端 | 通常需要导出中间格式再导入 | 只处理点,不认船艏向与时间戳 | 需自己写解析器 |
| 改正链路可回溯 | 参数改动后可整段 Replay 重算 | 部分环节重算成本高 | 无改正概念 | 取决于脚本设计 |
| 学习曲线 | 中等,界面逻辑偏工程化 | 陡,术语与流程层级多 | 低,但缺少海测语义 | 高,要懂数据格式 |
| 大数据承载 | 数据库分块,单项目可跨多天多测线 | 强,但工程组织较重 | 受内存限制明显 | 受脚本效率限制 |
| 成果输出 | XYZ、网格、DXF、剖面图,直接可用 | 齐全,制图能力强 | 需二次转换 | 完全自定义 |
| 适合场景 | 中小型测区、快速出图、反复迭代 | 大型正式海测项目、严格归档 | 局部精修、可视化 | 定制化批量流程 |
我选它的核心理由其实很朴素:采集和处理共用一套坐标系与模板。多波束最容易翻车的环节就是基准面,采集端设的垂直基准、处理端设的垂直基准、成果交付用的深度基准,三个如果不在一条链上,成图一定错。一体化软件把这条链焊死了,改一处全链生效,这是省下来的最大一块隐性成本。
1.3 这套方案适合谁、不适合谁
说清楚边界比吹优点更有用。适合的人群:做近海、河道、水库、港池、风电场场址前期测量的作业组;设备以中浅水多波束为主、单次测区在几平方公里到几十平方公里量级的团队;需要当天出粗成果、第二天给甲方看剖面的快节奏项目;以及手里已经有QINSy采集授权、不想再买第二套后处理 license 的队伍。
不太适合的情况也要讲明白。超大型正式海测项目、需要严格按行业归档规范出全套元数据的,传统套件的流程更贴合;纯科研级的点云算法验证,通用点云软件和脚本更灵活;水深超过几百米的深水多波束,QINSy能做,但深水特有的声速剖面强梯度、波束几何畸变处理,还是要配合专门的深水处理经验,软件不背这个锅。
2. 数据流转的整体设计与核心参数拆解
2.1 从原始记录到成图的四段式链路
我习惯把整个流程拆成四段:工程与模板建立、原始数据回放重算、改正与编辑、网格化与输出。这四段的顺序不是随便排的,背后有一条硬逻辑——先定框架,再算几何,后修细节,最后降维成图。
第一段决定后面所有环节的坐标系、单位、垂直基准、投影方式。这一段错了,后面全废,返工成本最高,所以我会花最多时间在这里反复确认。第二段是把采集时在线计算的粗略结果,用完整的改正参数重新算一遍,得到带完整属性(时间、波束角、测线号、质量标志)的点云。第三段是人工干预最密集的部分,声速剖面筛选、潮位曲线核对、飞点剔除、条带配准。第四段把三维点云压成规则网格或等深线,这时候才谈得上“成果”。
为什么强调“先算几何后修细节”?因为编辑工具只能改变点的取舍,改不了点的位置。如果声速用错导致整条带弯曲,你在三维编辑器里怎么刷都刷不直,只能回到第二段重算。很多新手在这一步浪费大量时间,本质是没认清改正和编辑的边界。
2.2 三类外部改正的接入顺序与耦合关系
多波束的深度值不是直接测出来的,它是一串传感器数据的合成结果。核心公式可以简化成这样:
海底点高程 = 天线椭球高 - 天线到换能器垂向偏移 - 波束斜距换算深度 - 基准面偏差 其中:波束斜距换算深度 = f(斜距, 波束角, 声速剖面)三个改正量的接入顺序有讲究,我按“从物理到几何”排:
- 姿态与安装偏移改正最先做。横摇、纵摇、艏向、涌浪,加上换能器相对参考点的三轴偏移和角度偏差,这一层决定波束在船体坐标系里的方向对不对。
- 声速改正第二做。它把声学传播时间换算成几何距离,声速错了,斜距就错了,后面所有几何都建在错误距离上。
- 潮位/水位与垂直基准改正最后做。它把瞬时水面以下的相对深度,抬到统一的深度基准面上。
这三层是串联的,不是并联的。我见过有人先调潮位再调声速,结果每次改声速都要重新对潮位,来回折腾。正确的做法是把姿态和声速先稳定下来,看单条测线的剖面是否平顺,再去动潮位。
提示:改正顺序本身就是排错顺序。成果出问题时,按“姿态—声速—潮位—基准面”的顺序往回倒查,命中率最高。
2.3 坐标系、投影与垂直基准的设定逻辑
这一节是我认为整篇最该反复读的部分。多波束成果出问题,八成以上能追到基准面上。
水平方向要确认三件事:投影方式(横轴墨卡托、高斯、UTM 等)、中央经线、坐标系定义(EPSG 编码或自定义)。测区跨带的时候,宁可按带分开建工程,也不要把整条测线硬塞进一个带里,边缘变形会让拼接看起来像错位,实际是投影拉伸。
垂直方向更麻烦。采集端拿到的往往是 GNSS 椭球高,成果要的是相对深度基准面的水深。中间隔着两层:大地水准面差距和深度基准面相对大地水准面的偏差。简化表达:
深度基准面高程 = 椭球高 - 大地水准面差距 - 基准面相对大地水准面的垂向偏差实际作业里我不会去手算这个,而是确认三件事:工程里挂的 geoid 模型版本对不对(同一测区不同版本能差几十厘米)、深度基准面的定义来源是否和甲方要求一致(理论最低潮面、平均海平面、1985 国家高程基准,各不相同)、以及潮位站零点是否和基准面换算关系对齐。这三条只要有一条含糊,成果就不能交。
注意:基准面换算不是一个“设置项”,而是一份书面确认。我现在的习惯是把甲方要求的基准面定义、geoid 模型版本、潮位站零点关系写进项目说明文档,签字确认后再开工,避免后期扯皮。
3. 实操过程:从工程建立到成果输出
3.1 工程建立与原始数据导入
工程建立阶段我会先在模板里把船体配置搭好:换能器、GNSS 天线、姿态仪、艏向仪、声速探头、潮位输入,各自的位置、偏移、时间延迟、坐标系。模板建一次可以复用整个项目周期,同一个测区多条船作业时,只要复制模板改偏移,减少手误。
数据导入环节,QINSy直接读它自己的数据库记录,也能导入常见多波束原始格式。我的做法是不在导入阶段做任何滤波,全量导入。理由很简单:导入时滤掉的东西,后面永远找不回来;而后处理阶段滤掉的东西,参数一改就能恢复。
导入后第一件事不是急着看三维,而是拉一条单剖面视图,挑一条水深适中、地形有起伏的测线,看原始点云的形态。这时候能看到的东西比三维视图多:边缘波束是否发散射出、条带中心是否有空洞、剖面是否有规律性的波浪起伏。这些早期信号决定了后面要不要回头查设备。
3.2 姿态与安装偏移的校核
安装偏移的校核,我常用两个动作。第一个是静态比对:船靠泊状态下记录几分钟数据,理论上涌浪、横摇、纵摇都在零附近小幅波动,如果横摇均值偏离零超过半度,说明姿态仪安装或零点有问题,得先修硬件。第二个是往返测线比对:同一段地形正反各跑一条,如果两条线在剖面上交叉成 X 形,基本可以判定艏向偏移或时间同步有偏差,误差量级能和偏移角对上。
时间同步这件事值得单独说。GNSS 位置、姿态、声学发射三路数据的时间戳如果不同步,船速越快误差越大。经验算法是:位置延迟 0.1 秒,在 5 节航速下相当于约 0.26 米的沿航迹错位,在边缘波束上会被放大成明显的条带错位。所以我会在正式处理前,用一条笔直的航迹做“直线度检验”,把位置延迟调到条带边缘最直为止。
提示:艏向偏移调的是角度,位置延迟调的是时间,两者在成果上表现相似但修正手段不同。先调时间延迟再调艏向偏移,顺序反了会互相掩盖。
3.3 声速改正与剖面管理
声速是浅水多波束最敏感的参数。粗略估一下:声速偏差 1%,在水深 50 米处引起的深度偏差大约 0.5 米量级,而且随波束角变化,中心波束近似等比例,边缘波束还会有额外的几何畸变。所以剖面不能“一测区一个”,得按时间和空间分布管理。
我的做法是:每个测区至少三条剖面——开工前一条、中午一条、收工前一条;水深变化超过 20% 的区域加密到每条测线一条;河口、水库这类存在明显温跃层或盐水楔的区域,按小时加密。剖面导入后,用“按时间窗口绑定”的方式分配给测线段,而不是整条测线一个剖面。
剖面本身也要体检。把剖面曲线画出来,看有没有跳变、有没有负梯度异常、有没有深度只到 10 米却要用于 40 米水深的“截断剖面”。截断剖面是新手常犯的错,软件会用最后一点的值外推,深水区误差直接爆炸。
| 现象 | 可能原因 | 处理动作 |
|---|---|---|
| 条带整体呈碗形(中间深两边浅) | 声速偏大,或剖面深度不足被外推 | 换用覆盖实际水深的剖面,重算 |
| 条带整体呈拱形(中间浅两边深) | 声速偏小 | 同上,核对表层声速 |
| 边缘波束向上翘起 | 近底声速梯度未体现 | 加密底层采样点,或做梯度约束 |
| 相邻测线同一地形深度不一致 | 两条线绑定了不同剖面 | 统一时间窗口绑定,重算 |
3.4 潮位与水位改正
潮位改正的坑主要集中在“零点”和“时间”两个词上。零点指的是潮位站水尺零点与深度基准面的换算关系,时间指的是潮位观测与测量作业的时钟是否一致、需不需要做站差改正。
无验潮模式(GNSS 高程直接推算)在有稳定 geoid 模型的近海区域很好用,省掉潮位站布设,但要满足两个前提:GNSS 高程精度稳定在分米级以内,geoid 模型在该区域经过验证。我一般会在测区内布一个临时验潮站做交叉验证,把 GNSS 推算的水位和实测潮位曲线叠在一起看,两条曲线形状一致、均值偏差在允许范围内才敢用无验潮成果。
有验潮模式则要注意潮位曲线的时间插值。测区离潮位站较远时,高潮时刻会滞后,直接套用会造成系统性偏差,尤其在潮差大的区域,半小时的相位差能带来十几厘米的深度误差。稳妥做法是在测区两端各设一站,做线性内插,或者用区域潮汐模型做同化。
3.5 点云编辑与噪声剔除
编辑这一环最容易被过度依赖,也最容易做无用功。我的原则是:能用参数解决的不用刷子,能用统计判据解决的不用肉眼。
第一层是自动滤波。按波束角加权、按深度突变剔除、按回波强度筛、按孤立点统计剔除,这些在回放阶段就能配好,一次生效全线通用。第二层是半自动的条带一致性检查,把相邻测线重叠区的深度差做成差值图,差值超过阈值的区域自动标记,人工只处理标记区。第三层才是手工编辑,用剖面视图和三维视图配合,处理桥墩、码头壁、水下构筑物这类结构复杂、统计判据失效的区域。
手工编辑有两个纪律我一直守着。第一,编辑前先存快照,任何一批编辑动作做完就存一个版本,出问题能退回。第二,不在俯视图上刷点,俯视图看不出深度方向的问题,刷着刷着就把真实地形刷平了。要刷就在剖面视图里刷,看着地形走向判断哪个点是噪声。
3.6 网格化与成果输出
网格大小怎么定,是个有计算依据的事。多波束的波束脚印尺寸近似为:
脚印宽度 ≈ 水深 × 波束角(弧度)举例:某型多波束横迹波束宽度 0.5 度,水深 30 米,则横迹脚印 ≈ 30 × 0.0087 ≈ 0.26 米;沿航迹波束宽度 1 度,脚印 ≈ 30 × 0.0175 ≈ 0.52 米。所以网格边长取 0.5 米是合理的,取 0.25 米就是过度采样,只会把噪声放大;取 2 米则会丢掉细节。
覆盖宽度也能顺手估:开角 130 度、水深 30 米时,理论覆盖宽度 ≈ 2 × 30 × tan(65°) ≈ 129 米。但边缘波束质量差,实际有效开角通常按 ±55 度到 ±60 度算,有效覆盖约 100 米出头。要求 50% 重叠时,测线间距取 50 米左右比较稳妥。
网格化的算法选择上,我一般用“平均值+最少点数约束”:每个网格内至少要有 3 到 5 个点才出值,避免单点噪声污染曲面;空洞区域用插值填充,但填充区要单独标记,出图时用不同颜色或虚线区分,避免把插值当实测交付。
输出环节按用途分三套:给设计方用 XYZ 或网格文件,给制图用等深线加剖面,给归档用带完整元数据的工程副本。三套成果的基准面必须一致,这一点我会在输出前用“同名点抽查”验证一遍——在测区挑五到十个特征点,三套成果里各取一次深度值,对不上就说明某一步的基准面设错了。
4. 常见问题与排查技巧实录
4.1 条带系统性弯曲与“笑脸哭脸”
这是最高频的问题。表现是横剖面呈 U 形(中间深两边浅,俗称笑脸)或倒 U 形(中间浅两边深,俗称哭脸)。很多人第一反应是刷点,其实这是改正环节的问题,刷不掉。
排查顺序我固定成四步。第一步查声速,看剖面曲线是否被截断、是否与实际水深匹配、表层声速是否用了淡水值却在海水测区作业。第二步查吃水与天线偏移,垂向偏移错了会整体抬升或下沉,不会造成弯曲,但如果换能器有角度安装偏差,就会出现不对称的弯曲。第三步查姿态的横摇零点,横摇有个固定偏置时,条带会一侧翘一侧沉,看起来也像弯曲。第四步才是查基准面,基准面错了是整体平移,一般不造成弯曲,但会掩盖前三条的判断。
实际操作中,我发现一个很实用的判据:看弯曲是否随水深变化。如果浅水区弯得厉害、深水区反而平顺,多半是声速表层值错了;如果各水深弯曲程度一致,多半是横摇零点或换能器角度偏差;如果只有一侧边缘翘起,是边缘波束的声速梯度问题。
4.2 相邻测线拼接错位与重影
重影的成因比弯曲更杂。我把常见原因和判别方法整理成一张速查表:
| 现象特征 | 最可能原因 | 判别方法 | 处理 |
|---|---|---|---|
| 全线整体错位一个固定量 | 艏向偏移或位置延迟 | 往返测线交叉呈 X 形 | 调时间延迟,再调艏向偏移 |
| 错位量随航速变化 | 位置与姿态时间不同步 | 快慢速各跑一条对比 | 统一时钟源,检查延迟参数 |
| 只在转向段错位 | 姿态滤波滞后 | 直线段正常、转弯段错位 | 降低姿态滤波强度,或改后处理重算 |
| 重叠区一条线整体偏深 | 两条线绑定了不同潮位或剖面 | 对比两条线的改正参数记录 | 统一改正参数,重算 |
| 局部鼓起或塌陷 | 水下障碍物、鱼群、气泡 | 单剖面查看形态是否连续 | 编辑剔除,不改改正参数 |
有一个反直觉的经验:很多“错位”其实是真实地形。在坡度大的区域,两条测线覆盖的并非同一片地面,重叠区深度差本来就存在。判断方法是把差值图叠到坡度图上,如果差值分布和坡度分布强相关,那是几何效应不是误差,不用修。
4.3 大数据量下的卡顿、崩溃与效率
一个几平方公里的测区,全量点云加载后软件卡到没法操作,是常态。我的应对办法是分层加载:先用抽稀后的低分辨率点云做整体形态判断和粗差定位,锁定问题区域后再加载原始密度的局部数据做精修。这样既不会漏掉大范围趋势问题,也不会在无关区域浪费算力。
工程组织上,我按“测区—分区—测线组”三级拆分,单个处理单元控制在几百万点以内。数据量特别大的项目,会把不同分区放在不同工程里并行处理,最后用统一坐标系合并。合并前一定要核对各分区的垂直基准和 geoid 版本,我踩过一次坑:两个分区用了不同版本的 geoid 模型,合并后接缝处出现二十多厘米的台阶,白白返工两天。
还有一个小技巧:处理前先关掉实时的三维渲染和纹理显示,只在需要判断形态时打开。这一项在低配工作站上能省掉一半以上的等待时间。
5. 效率提升的几个实用做法
5.1 模板化与配置复用
同一类项目反复做,最值得投入时间的就是模板。我把模板分成三级:设备级(船体、换能器、传感器偏移、时间延迟)、项目级(坐标系、投影、垂直基准、geoid 模型、输出格式)、工序级(回放参数、滤波阈值、网格大小、输出清单)。设备级模板跨项目复用,项目级模板跨测区复用,工序级模板跨船队复用。
模板带来的不只是省时间,更重要的是减少随机误差。靠记忆手填参数,每一次都可能填错一位数;模板里固化下来,错了会一直错得很明显,反而容易发现。
提示:模板每次修改都要记版本号和修改说明。我见过因为模板被悄悄改过,导致三批成果基准面不一致的情况,追溯起来非常痛苦。
5.2 批处理与脚本化
重复性动作能脚本化的尽量脚本化。数据格式转换、按时间窗口绑定声速剖面、批量导出 XYZ、批量生成剖面图,这些用命令行工具或脚本串起来,一条命令跑完几十条测线,比手工点几十遍可靠得多。
我自己的工作流是:白天采集、晚上跑批处理出粗成果、第二天上午做人工精修和交叉验证。批处理负责“把所有线拉到同一个起跑线”,人工负责“处理机器判断不了的结构性区域”。这个分工让一个两三人小组能撑起中等规模测区的日常产出。
需要提醒的是,脚本不要写得太“聪明”。我倾向于脚本只做确定性的机械动作,任何涉及判断的环节(比如噪声剔除阈值、剖面匹配)都保留人工确认。自动化程度过高,一次参数失误会污染整个测区,而人工确认的成本其实很低。
我在实际项目里最深的一条体会是:多波束后处理的功夫,八成花在“进软件之前”和“出软件之后”。进软件之前,把安装偏移标定、声速剖面采集、潮位站布设这些外业环节做扎实;出软件之后,用同名点抽查、往返测线比对、与既有地形图交叉验证这些手段把成果验一遍。中间那套软件操作,反而是最标准、最容易学会的部分。真正拉开差距的,是你知不知道自己每一步在改什么、为什么改、改错了会在图上长成什么样。