第一章:点云基础——从零认识三维世界的“像素”

大家好,我是你们这门课的主讲。在正式开始之前,我想先聊聊一个最基础的问题:点云到底是什么?

说白了,点云就是三维空间里一堆点的集合。每个点都带着自己的坐标(X, Y, Z),有时候还带着颜色、强度之类的附加信息。你想想看,我们平时看到的照片是二维的,由像素组成;而点云就是三维的“像素”,只不过这些像素是悬浮在空间里的。

我记得刚入行那会儿,第一次看到激光雷达扫出来的点云数据,密密麻麻的,像星空一样。当时我就想:这玩意儿要是能直接看懂,那自动驾驶、三维重建不都简单了?嗯,后来发现没那么简单,但点云确实是理解三维世界的基石。

1.1 点云数据格式:PCD、PLY、LAS

点云数据存成什么格式?这问题我经常被问到。目前主流的有三种:PCDPLYLAS。它们各有各的脾气。

格式 全称 特点 常见场景
PCD Point Cloud Data PCL库原生格式,支持ASCII和二进制,读写快 科研、PCL项目
PLY Polygon File Format 支持顶点和面片,可带颜色、法向量 三维扫描、图形学
LAS LASer 工业标准,支持分类、强度、回波等属性 测绘、LiDAR点云

PCD 是我个人最常用的格式。为什么?因为PCL(Point Cloud Library)就是它亲爹,读写接口特别友好。你写个 pcl::io::loadPCDFile 就能把数据拉进来,省心。

PLY 呢,更偏向图形学。如果你做三维重建,最后要导出带网格的模型,PLY是首选。它既能存点,又能存三角面片,还能存颜色。我在做文物数字化项目时,就经常用PLY格式保存扫描结果。

LAS 是测绘领域的“老大哥”。它里面存的东西特别全:每个点的分类(地面、植被、建筑)、回波次数、强度值……嗯,如果你做林业或者地形分析,LAS格式基本绕不开。

避坑指南: 我曾经在项目里遇到过一个坑——LAS文件里的坐标系统。有些LAS文件用的是投影坐标,有些是地理坐标。如果你不检查坐标系直接处理,结果可能偏到姥姥家去。所以,拿到LAS文件第一件事:看它的坐标参考系。

1.2 点云获取方式:LiDAR vs 深度相机

点云从哪来?主要有两条路:LiDAR(激光雷达)和深度相机。这两者差别挺大,我分别说说。

LiDAR(激光雷达)

LiDAR的原理很简单:发射激光,测量反射回来的时间,算出距离。它扫出来的点云精度高、范围远,但价格也贵。自动驾驶车上顶着的那个“小帽子”,就是LiDAR。

我记得有一次做室外场景重建,用了一台16线LiDAR。扫出来的点云密密麻麻,连树叶的缝隙都能看清。但问题来了——LiDAR数据量太大,一帧可能上百万个点,处理起来电脑风扇呼呼转。

深度相机

深度相机(比如Intel RealSense、Kinect)就亲民多了。它通过结构光或ToF(飞行时间)技术获取深度图,再转成点云。优点是便宜、帧率高,适合室内场景。缺点是精度不如LiDAR,而且受光照影响大——大太阳底下基本废了。

我建议:室外大场景用LiDAR,室内小场景用深度相机。如果你只是做算法验证,深度相机完全够用;但如果是工程落地,LiDAR更靠谱。

注意: 深度相机在强光下容易“失明”。我曾经在户外测试RealSense,结果点云全是空洞,跟蜂窝煤似的。后来才知道,结构光在阳光下会被淹没。所以,户外项目老老实实用LiDAR。

1.3 点云可视化基础:Open3D

拿到点云数据,第一件事是什么?可视化。你看不见数据,怎么知道它长什么样?

Open3D 是我最推荐的点云可视化工具。它轻量、跨平台、API设计得特别人性化。不像PCL,装个库都要折腾半天。Open3D 一行 pip install open3d 就搞定。

下面我写个最简单的可视化代码,你感受一下:

import open3d as o3d

# 读取点云文件
pcd = o3d.io.read_point_cloud("example.pcd")

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

就三行代码,点云就出来了。你可以用鼠标旋转、缩放、平移,交互体验很好。

如果你要显示多个点云,或者加点颜色、法向量,也很简单:

import open3d as o3d
import numpy as np

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

# 给点云上色(红色)
pcd.paint_uniform_color([1, 0, 0])

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

嗯,这里要注意:Open3D 默认的坐标系是右手系,X轴向右,Y轴向上,Z轴朝外。如果你从其他工具导出的点云坐标系不一样,记得先转换一下。

核心要点: 可视化不是花架子,它是调试的利器。我每次处理点云,第一步永远是可视化。看看数据有没有空洞、有没有离群点、坐标系对不对。这些肉眼一看就明白,比看数字强多了。

本章知识体系

为了让你更直观地理解本章内容,我画了一张结构图。它把点云基础的核心脉络串起来了:

点云基础 数据格式 PCD PLY LAS 获取方式 LiDAR 深度相机 可视化工具 Open3D 核心:理解点云 = 三维空间中的离散采样 格式决定存储方式,获取方式决定数据质量,可视化决定调试效率

这张图把本章的三个核心模块串起来了:数据格式(PCD/PLY/LAS)、获取方式(LiDAR/深度相机)、可视化工具(Open3D)。它们共同构成了点云处理的基础设施。

好了,第一章就到这里。内容不多,但都是实打实的基础。你把这些概念吃透了,后面学分割、识别才会顺手。记住:基础不牢,地动山摇

我的建议: 学完这一章,你最好动手做两件事:第一,用Open3D打开一个点云文件,随便转转看看;第二,对比一下PCD和PLY文件的大小和内容。实践出真知,光看文档是学不会的。

专注资料整理