第一章:点云数据获取——从物理世界到数字世界的桥梁

做点云处理这么多年,我始终觉得数据获取这一步最容易被忽视。很多人一上来就调算法、跑模型,结果发现效果不好,回头一查——原始数据就有问题。嗯,这坑我踩过不止一次。

说白了,点云数据获取就是把物理世界的三维信息变成数字信号。这个过程中,传感器就是我们的眼睛。今天咱们聊聊两种主流方案:激光雷达和RGB-D相机,顺便把文件格式也捋清楚。

1.1 激光雷达原理——用光丈量世界

激光雷达,英文叫LiDAR(Light Detection And Ranging)。它的核心原理其实很简单:发射激光束,打到物体上反射回来,通过测量飞行时间(TOF)算出距离。

核心公式:

距离 = (光速 × 飞行时间) / 2

除以2是因为光走了个来回。

我个人习惯把激光雷达分成两类:

  • 机械式激光雷达:通过旋转机构实现360°扫描。Velodyne的HDL-64E就是典型代表,64线,一圈能扫出几十万个点。我在做自动驾驶项目时用过它,效果确实好,但价格嘛...你懂的。
  • 固态激光雷达:没有旋转部件,靠光学相控阵或MEMS微镜实现扫描。体积小、成本低,但视场角有限。现在很多量产车用的就是这种。

这里有个关键参数——线数。16线、32线、64线、128线...线数越多,点云越密,但数据量也越大。我曾经在项目里为了省成本用了16线雷达,结果在远距离目标检测时漏检率很高。后来换了32线,问题就解决了。所以选型时一定要想清楚你的应用场景。

避坑指南:我曾经遇到过激光雷达在强光下性能下降的问题。后来发现是没加滤光片。如果你在户外做项目,记得选带太阳光抑制功能的雷达。

1.2 RGB-D相机——看得见,摸得着

RGB-D相机,说白了就是能同时输出彩色图像和深度图像的相机。它不像激光雷达那样直接测距,而是通过其他方式算出深度。

主流方案有三种:

技术 原理 代表产品 优缺点
结构光 投射红外光斑,通过变形计算深度 Kinect v1、Intel RealSense 室内效果好,室外受干扰
飞行时间(TOF) 发射红外脉冲,测量飞行时间 Kinect v2、Azure Kinect 速度快,精度一般
双目立体视觉 两个摄像头视差计算深度 ZED、Intel T265 无主动光源,依赖纹理

你想想看,RGB-D相机和激光雷达最大的区别是什么?激光雷达是稀疏的、精确的;RGB-D是稠密的、但精度有限。我在做室内SLAM时,经常把两者融合使用——激光雷达提供精确的几何约束,RGB-D提供丰富的纹理信息。

注意:RGB-D相机的深度范围通常有限(0.5m-5m),超出这个范围数据就不可靠了。另外,在玻璃、镜面等透明或反射表面,深度数据会完全失效。我曾在项目里被这个坑过——一个玻璃茶几,RGB-D相机完全看不到它。

1.3 点云文件格式——数据怎么存?

拿到点云数据后,总得存下来吧。市面上常见的格式有三种:PCD、PLY、LAS。我一个个说。

1.3.1 PCD格式(Point Cloud Data)

这是PCL库的亲儿子格式。结构简单,读写快。它的文件头长这样:

# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 640
HEIGHT 480
VIEWPOINT 0 0 0 1 0 0 0
POINTS 307200
DATA ascii
0.123 0.456 0.789 255 128 64
...

我个人习惯用二进制格式存储,因为文件小、读写快。ASCII格式虽然可读性好,但数据量大,不适合大规模点云。

1.3.2 PLY格式(Polygon File Format)

PLY格式比PCD更通用,它不仅能存点云,还能存网格(Mesh)。斯坦福的兔子就是PLY格式的经典案例。

ply
format ascii 1.0
element vertex 8
property float x
property float y
property float z
element face 6
property list uchar int vertex_indices
end_header
0 0 0
1 0 0
1 1 0
0 1 0
0 0 1
1 0 1
1 1 1
0 1 1
4 0 1 2 3
4 4 5 6 7
...

PLY格式支持自定义属性,比如法向量、颜色、透明度等。我在做三维重建时经常用PLY,因为它能同时保存点云和三角面片。

1.3.3 LAS格式(LASer)

LAS格式是地理信息领域的标准格式,主要用于机载激光雷达数据。它比PCD和PLY复杂得多,包含了很多元数据:

  • 点坐标(X, Y, Z)
  • 强度值(Intensity)
  • 分类标签(地面、建筑、植被等)
  • GPS时间戳
  • 回波次数(单次、首次、末次等)

LAS格式的读写通常需要专门的库,比如libLAS或PDAL。我在做地形测绘项目时接触过它,一个LAS文件动辄几百MB,处理起来挺吃内存的。

我的建议:如果你只是做算法验证,用PCD就够了。如果要和三维建模软件交互,用PLY。如果做地理信息相关的工作,那就得用LAS。别在格式转换上浪费太多时间,PCL和Open3D都提供了方便的转换函数。

1.4 本章知识体系

说了这么多,我画张图帮你理一理思路:

点云数据获取知识体系 点云数据获取 激光雷达 机械式 / 固态 TOF原理 线数:16/32/64/128 RGB-D相机 结构光 / TOF / 双目 深度范围有限 受光照影响大 文件格式 PCD / PLY / LAS ASCII vs 二进制 属性扩展 核心:根据应用场景选择合适的传感器和格式 室内SLAM → RGB-D + 激光雷达融合 室外测绘 → 激光雷达 + LAS格式

这张图把本章的核心内容串起来了。你想想看,从传感器选型到数据存储,每一步都有讲究。选错了传感器,后面算法再牛也白搭;选错了格式,读写效率直接拉胯。

好了,第一章就聊到这儿。数据获取是点云处理的第一步,也是最重要的一步。下一章咱们聊聊点云预处理——怎么把原始数据变成能用的数据。


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