3、点云数据基础:点云数据结构、文件格式与可视化工具

各位同学,咱们今天聊聊点云数据的基础。说实话,很多初学者一上来就急着调模型、跑网络,结果连点云长什么样、怎么存、怎么打开都搞不清楚。我当年也踩过这个坑——拿到一个激光雷达数据包,愣是不知道怎么把它变成能用的点云文件。嗯,今天咱们就把这块地基打牢。

3.1 点云数据结构:XYZI 与 XYZRGB

点云说白了就是一堆三维点的集合。每个点至少包含 X、Y、Z 三个坐标值。但光有坐标还不够,实际应用中我们往往需要附加属性。

3.1.1 XYZI 结构

XYZI 是最常见的点云结构之一。I 代表 Intensity,也就是反射强度。为什么需要强度值?

我举个例子。你在做道路场景分割时,路面和车道线的反射强度是完全不同的。沥青路面反射弱,车道线反射强。利用这个差异,你可以轻松区分它们。我在一个智慧交通项目里,就靠强度值把斑马线从路面中分离出来,效果比纯几何方法好得多。

字段 含义 典型范围
X X 坐标(米) 取决于传感器范围
Y Y 坐标(米) 取决于传感器范围
Z Z 坐标(米) 取决于传感器范围
I 反射强度 0-255 或 0-65535
我的经验:不同激光雷达的强度值范围不一样。Velodyne 一般是 0-255,Ouster 可能是 0-65535。处理前一定要归一化,否则模型会学偏。

3.1.2 XYZRGB 结构

XYZRGB 结构在坐标基础上增加了颜色信息。这种结构通常来自两种场景:一是激光雷达本身带彩色相机,通过融合得到彩色点云;二是从 RGB-D 相机(比如 Kinect)直接获取。

颜色信息对语义分割帮助很大。你想想看,一个红色的交通锥和灰色的路面,光靠几何形状可能区分困难,但加上颜色就一目了然了。

注意:颜色信息容易受光照影响。室外场景中,同一个物体在阴影下和阳光下颜色差异很大。我曾经在训练时没做光照归一化,结果模型在阴天场景下直接崩了。

3.2 点云文件格式:PCD、LAS、PLY

点云数据怎么存?市面上有好几种格式。我挑三个最常用的来讲。

3.2.1 PCD 格式

PCD 是 Point Cloud Data 的缩写,由 Point Cloud Library(PCL)团队推出。它的特点是结构清晰,支持多种数据类型。

# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z intensity
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 1000
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 1000
DATA ascii
1.0 2.0 3.0 128
2.0 3.0 4.0 200
...

我个人习惯用 PCD 做数据预处理。它的头文件信息很全,方便调试。而且 PCL 库对 PCD 的支持最好,读写速度也快。

3.2.2 LAS 格式

LAS 是测绘和遥感领域的标准格式。它由美国摄影测量与遥感学会(ASPRS)制定。如果你做的是无人机激光雷达或者地面扫描,大概率会遇到 LAS 文件。

LAS 格式比 PCD 复杂,它支持分类标签。比如地面点标为 2,建筑物点标为 6。这个分类信息在做场景理解时非常有用。

格式 主要应用领域 特点
PCD 机器人、自动驾驶 结构简单,PCL 原生支持
LAS 测绘、遥感 支持分类标签,行业标准
PLY 计算机图形学 支持网格和点云,可读性好

3.2.3 PLY 格式

PLY(Polygon File Format)最初是为三维扫描仪设计的。它既可以存点云,也可以存三角网格。如果你做三维重建,PLY 是很好的选择。

ply
format ascii 1.0
element vertex 1000
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
1.0 2.0 3.0 255 0 0
2.0 3.0 4.0 0 255 0
...
格式选择建议:
  • 做深度学习训练 → PCD(方便与 PCL 配合)
  • 做测绘项目 → LAS(行业标准,兼容性好)
  • 做三维重建 → PLY(支持网格和颜色)

3.3 点云可视化工具:CloudCompare 与 Open3D

光会读数据还不够,你得能看见它。可视化是调试和验证的重要手段。

3.3.1 CloudCompare

CloudCompare 是我最早接触的点云可视化工具。它开源、免费,功能强大。我最喜欢它的点,是能直接对比两个点云的差异。

我记得有一次做建筑物变形监测,用 CloudCompare 把两期点云叠在一起,一键生成偏差色谱图。哪里变形了、变形了多少,一目了然。甲方看了直说好。

常用功能:

  • 点云渲染(按高度、强度、RGB 着色)
  • 点云裁剪与分割
  • 点云配准(ICP 算法)
  • 距离计算与偏差分析

3.3.2 Open3D

Open3D 是 Intel 推出的库,支持 Python 和 C++。如果你做算法开发,Open3D 比 CloudCompare 更合适。因为它可以编程控制,方便集成到你的流程中。

import open3d as o3d

# 读取点云
pcd = o3d.io.read_point_cloud("scene.pcd")

# 可视化
o3d.visualization.draw_geometries([pcd])

# 下采样
down_pcd = pcd.voxel_down_sample(voxel_size=0.05)

# 估计法向量
down_pcd.estimate_normals(
    search_param=o3d.geometry.KDTreeSearchParamHybrid(
        radius=0.1, max_nn=30))
我的建议:调试阶段用 CloudCompare 做快速查看,开发阶段用 Open3D 做程序化处理。两个工具互补,缺一不可。

3.4 本章知识体系

下面这张图总结了本章的核心内容。你可以把它当作一个快速索引。

点云数据基础:知识体系 数据结构 XYZI(坐标+强度) XYZRGB(坐标+颜色) 文件格式 PCD(PCL原生格式) LAS(测绘标准格式) PLY(图形学格式) 可视化工具 CloudCompare(交互式) Open3D(编程式) 应用:点云语义分割与场景理解 数据结构是基础,文件格式是载体,可视化工具是手段 三者结合才能高效处理点云数据

好了,这一章的内容就到这里。数据结构、文件格式、可视化工具,这三样东西是点云处理的基石。你花时间把它们搞透,后面学语义分割会轻松很多。

一句话总结:点云处理的第一步,不是调模型,而是搞清楚你的数据长什么样、存在哪里、怎么打开看。

公众号:蓝海资料掘金营,微信deep3321