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 |
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))
3.4 本章知识体系
下面这张图总结了本章的核心内容。你可以把它当作一个快速索引。
好了,这一章的内容就到这里。数据结构、文件格式、可视化工具,这三样东西是点云处理的基石。你花时间把它们搞透,后面学语义分割会轻松很多。
公众号:蓝海资料掘金营,微信deep3321