2. Leica点云数据格式与结构解析

在 Leica 点云处理流程中,数据格式决定了点云能否被正确读取、坐标能否被正确解释、属性信息能否被完整保留。很多“点云位置偏移”“强度丢失”“颜色错乱”的问题,根源并不在算法,而在于格式选择与字段理解错误。本节围绕 Leica 生态中常见的 PTX、E57、LAS/LAZ、POD、RCP 五类格式,讲清它们的结构、读写方式、坐标系约定与属性字段含义。

一、五类格式的定位与结构差异

PTX 是 Leica Cyclone 常用的交换格式,本质是“文本头 + 点记录”。文件开头若干行描述扫描仪列数、行数、扫描站坐标(通常为 4×4 变换矩阵),随后按行优先顺序逐点输出 X Y Z Intensity R G B。它的优点是结构透明、便于脚本解析;缺点是文件体积大、无压缩、不携带扫描站元数据,且矩阵行序容易读错。

E57 是 ASTM 标准的三维点云容器格式,采用二进制分块存储,可同时容纳多个扫描站、每站的点数据、姿态、强度、颜色、法向量等。E57 的关键在于“按扫描站组织”,每个 scan 有独立的位姿与字段定义,因此它比 PTX 更适合多站数据交换,但解析需要依赖库(如 libE57、PDAL 的 e57 驱动)。

LAS/LAZ 是 ASPRS 定义的激光雷达点云格式,LAS 为未压缩,LAZ 为无损压缩。它按点记录存储,每个点有固定字段:X、Y、Z(整型,需乘 scale 加 offset 还原真实坐标)、Intensity、Return Number、Number of Returns、Classification、Scan Angle、GPS Time、RGB 等。LAS 的坐标系由头部记录的 scale/offset 与投影信息共同决定,读取时必须先解析头部。

POD 是 Leica 自有的一种点云格式,常见于 Cyclone 与部分 Leica 软件之间,结构相对封闭,通常配合 Leica 软件读写,字段以坐标、强度、颜色为主,坐标系依赖工程设置。

RCP 是 Autodesk ReCap 的项目格式,本质是一个工程容器,内部可引用 RCS 分块文件,支持多站、颜色、强度与分类,常用于将点云交付到 Revit、Civil 3D 等 Autodesk 环境。RCP 不是单一文件,读写需通过 ReCap 或对应 SDK。

Leica 常见点云格式:结构、坐标系与字段对照 PTX 文本头 + 点记录 列数/行数/4×4矩阵 X Y Z I R G B 行优先逐点输出 坐标系:矩阵定义 无压缩、无元数据 E57 ASTM 二进制容器 按 scan 组织多站 位姿 + 强度 + 颜色 法向量可选 坐标系:每站独立 需 libE57/PDAL LAS / LAZ ASPRS 点记录格式 整型 XYZ + scale/offset Intensity / Return Classification / GPS Time 坐标系:头部投影 LAZ 为无损压缩 POD Leica 自有格式 Cyclone 生态读写 坐标 + 强度 + 颜色 结构相对封闭 坐标系:工程设置 依赖 Leica 软件 RCP ReCap 工程容器 引用 RCS 分块 多站 + 颜色 + 分类 面向 Autodesk 交付 坐标系:工程定义 非单文件 读写与坐标还原关键链 读取文件头 scale / offset / 矩阵 解析点记录 XYZ / I / RGB / 分类 坐标还原 X=raw×scale+offset 投影/基准检查 EPSG / 工程坐标系 输出/交付 目标格式 注意:LAS 的 XYZ 为整型,必须用头部 scale/offset 还原;PTX 的 4×4 矩阵行序决定扫描站姿态;E57 每站位姿独立。 强度、颜色、分类字段在不同格式中名称与取值范围不同,跨格式转换时需做映射与归一化。 RCP 为工程容器,交付前应确认引用路径完整;POD 建议在 Leica 生态内闭环使用。

二、坐标系与属性字段的读法

坐标系是格式解析中最容易出错的部分。PTX 的 4×4 矩阵通常按“行主序”存储,前 3 行 3 列为旋转,第 4 列为平移,最后一行一般为 0 0 0 1。若把行主序误读为列主序,扫描站姿态会整体转置,表现为点云“翻面”或“镜像”。E57 的每个 scan 带有独立位姿,读取后需按位姿把各站统一到同一工程坐标系。LAS 的坐标是整型,必须用头部记录的 scale 与 offset 还原:真实坐标 = 整型值 × scale + offset。例如 scale 为 0.001、offset 为 (500000, 4000000, 0),则整型 X=12345678 对应真实 X=500000+12345678×0.001=512345.678 米。RCP 与 POD 的坐标系通常由工程或软件设置决定,跨软件交换时需显式确认基准。

属性字段方面,Intensity 表示回波强度,不同设备量纲不同,跨格式转换时通常需要归一化到 0–1 或 0–65535。Return Number 与 Number of Returns 描述多次回波,用于区分植被与地面。Classification 是 ASPRS 分类码,如 2 表示地面、5 表示高植被、6 表示建筑。GPS Time 用于多站时间同步。RGB 为颜色,常见 8 位或 16 位。E57 还支持法向量与扫描站元数据,PTX 则只有坐标、强度与颜色。

三、读写实操与格式转换示例

以 PDAL 为例,读取 LAS 并输出 E57 的管道配置如下:

{
  "pipeline": [
    { "type": "readers.las", "filename": "scan.las" },
    { "type": "filters.reprojection",
      "in_srs": "EPSG:32650", "out_srs": "EPSG:4326" },
    { "type": "writers.e57", "filename": "scan.e57" }
  ]
}

若要把 PTX 转为 LAS,需先解析头部矩阵与行列数,再逐点写入,并设置 scale/offset。示例参数:scale=0.001,offset 取点云包围盒最小值取整,避免整型溢出。转换后应检查点数量是否一致、包围盒是否吻合、强度范围是否合理。

判断格式转换是否成功,可看三点:点数量一致、包围盒一致、关键属性(强度/颜色/分类)无丢失或错位。若包围盒一致但点云“翻转”,优先检查 PTX 矩阵行序或 E57 位姿符号。

四、常见问题与排查

  • 点云整体偏移:多为 LAS scale/offset 未正确应用,或投影带号写错。
  • 颜色错乱:RGB 位深不一致(8 位与 16 位混用),或通道顺序 BGR/RGB 颠倒。
  • 强度全为 0:源格式无强度字段,或转换时未映射。
  • E57 只读到一站:未遍历所有 scan,或位姿未应用。
  • RCP 打不开:RCS 分块路径丢失,需整体拷贝工程目录。

掌握这些格式的结构与字段含义后,后续的配准、分类、建模与交付才能建立在正确的数据基础之上。建议在每次格式转换后,用点数量、包围盒、属性统计三项做快速校验,再进入下一环节。