1、点云世界初探:什么是激光雷达点云?

各位同学,欢迎来到《激光雷达点云模型加载与处理》的第一章。

说实话,我第一次接触激光雷达点云的时候,也被那一堆密密麻麻的坐标点给震住了。你想想看,一个传感器扫一圈,就能把现实世界的三维结构变成几十万甚至上亿个点——这感觉,就像给世界拍了一张「立体照片」。

1.1 什么是激光雷达点云?

激光雷达(LiDAR,Light Detection And Ranging)的工作原理其实不复杂。它发射激光束,打到物体表面后反射回来,传感器根据飞行时间计算出距离。每个点都包含三维坐标 (x, y, z),有些还带有强度值、颜色信息或回波次数。

说白了,点云就是这些点的集合。每个点代表物体表面上的一个采样位置。点越密,细节越丰富。

核心概念:点云 = 三维坐标 + 属性(强度、颜色、分类等)

我在做自动驾驶项目时,经常需要区分地面点和障碍物点。你想想看,如果点云里只有坐标,那地面和车辆其实都是「一堆点」,全靠算法去区分。所以理解点云的数据结构,是后续所有处理的基础。

1.2 常见点云数据格式

点云数据格式有好几种,我挑三个最常用的给你讲讲。嗯,这里要注意,选对格式能省不少事。

格式 扩展名 特点 典型应用
PCD .pcd Point Cloud Library 原生格式,支持 ASCII 和二进制,可存储任意字段 PCL 生态、学术研究
LAS .las / .laz ASPRS 标准格式,专为机载 LiDAR 设计,包含分类、回波等元数据 测绘、林业、地形建模
PLY .ply 斯坦福大学开发的通用三维格式,支持顶点和面片,可带颜色 计算机图形学、三维重建

我个人习惯是:做算法原型用 PCD,处理测绘数据用 LAS,做可视化展示用 PLY。当然,这也不是的,看项目需求来定。

小技巧:如果你拿到一个 .laz 文件(压缩版 LAS),记得先解压成 .las 再处理。Open3D 和 PCL 都支持直接读取 .laz,但性能会差一些。

1.3 课程环境搭建

工欲善其事,必先利其器。咱们先把环境搭好,后面才能愉快地写代码。

1.3.1 Open3D 安装

Open3D 是我最推荐的点云处理库之一。它轻量、易用,而且可视化效果很棒。安装方式很简单:

pip install open3d

如果你用的是 conda 环境,也可以:

conda install -c open3d-admin open3d

我曾经在 Windows 上装 Open3D 时踩过坑——Python 版本不兼容。建议用 Python 3.8 到 3.11 之间的版本,太新或太旧都可能出问题。

1.3.2 PCL Python 绑定

PCL(Point Cloud Library)是点云处理的老牌库,功能非常强大。不过它的 C++ 版本编译起来比较麻烦,所以我们用 Python 绑定——pclpy。

pip install pclpy

注意,pclpy 目前只支持 Windows 和 Linux。Mac 用户可能需要用 Docker 或者直接装 C++ 版 PCL。

避坑指南:我曾经在 Ubuntu 20.04 上装 pclpy 时遇到依赖冲突。建议先创建一个干净的虚拟环境:

python -m venv lidar_env
source lidar_env/bin/activate
pip install pclpy open3d numpy matplotlib

1.3.3 验证安装

装完之后,跑个简单的测试脚本,看看能不能正常读取点云:

import open3d as o3d
import numpy as np

# 生成一个随机点云
points = np.random.rand(100, 3)
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)

# 可视化
o3d.visualization.draw_geometries([pcd], window_name="我的第一个点云")

如果弹出一个窗口,显示一堆随机点,那就说明环境搭好了。

1.4 本章知识体系

为了让你更直观地理解本章内容,我画了一张结构图:

第1章:点云世界初探 激光雷达点云 数据格式 PCD LAS PLY 环境搭建 Open3D PCL绑定 核心概念 三维坐标 (x,y,z) 强度值 颜色信息 回波次数 点云 = 三维坐标 + 属性(强度、颜色、分类等)

这张图把本章的核心内容串起来了。从激光雷达点云出发,分三个方向:数据格式、环境搭建和核心概念。后面的章节都会围绕这些基础展开。

1.5 本章小结

好了,第一章的内容就到这里。我们认识了激光雷达点云是什么,了解了三种常见的数据格式,也把 Open3D 和 PCL Python 绑定装好了。

说实话,环境搭建这一步最容易出问题。如果你遇到报错,别慌——大概率是 Python 版本或依赖冲突。去网上搜一下,或者换个虚拟环境重装,基本都能解决。