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.5 本章小结
好了,第一章的内容就到这里。我们认识了激光雷达点云是什么,了解了三种常见的数据格式,也把 Open3D 和 PCL Python 绑定装好了。
说实话,环境搭建这一步最容易出问题。如果你遇到报错,别慌——大概率是 Python 版本或依赖冲突。去网上搜一下,或者换个虚拟环境重装,基本都能解决。