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。
二、坐标系与属性字段的读法
坐标系是格式解析中最容易出错的部分。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 取点云包围盒最小值取整,避免整型溢出。转换后应检查点数量是否一致、包围盒是否吻合、强度范围是否合理。
四、常见问题与排查
- 点云整体偏移:多为 LAS scale/offset 未正确应用,或投影带号写错。
- 颜色错乱:RGB 位深不一致(8 位与 16 位混用),或通道顺序 BGR/RGB 颠倒。
- 强度全为 0:源格式无强度字段,或转换时未映射。
- E57 只读到一站:未遍历所有 scan,或位姿未应用。
- RCP 打不开:RCS 分块路径丢失,需整体拷贝工程目录。
掌握这些格式的结构与字段含义后,后续的配准、分类、建模与交付才能建立在正确的数据基础之上。建议在每次格式转换后,用点数量、包围盒、属性统计三项做快速校验,再进入下一环节。