PCL 点云处理算法汇总与实战指南
PCL (Point Cloud Library) 是处理三维点云数据的开源框架,广泛应用于三维重建、自动驾驶感知及机器人导航等领域。本文整理核心算法模块,涵盖从数据 IO、滤波去噪到配准分割、特征提取及可视化的完整流程,适用于相关场景的开发参考。
基础 IO 操作
点云处理的第一步通常是读取和保存数据。PCL 支持多种格式(如 PCD, LAS, OBJ 等)的读写。
// 读取点云文件
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if(pcl::io::loadPCDFile<pcl::PointXYZ>("source.pcd", *cloud) == -1){
PCL_ERROR("Could not read file\n");
}
// 复制点云子集
pcl::copyPointCloud(*cloud, indicesY, *cloud_yboundary);
// 保存点云文件
pcl::io::savePCDFileBinary("output.pcd", *filtered);
一、点云滤波
原始点云往往包含噪声或冗余数据,预处理至关重要。
常用滤波器
- 直通滤波器 (PassThrough):根据坐标轴范围裁剪点云。
- 体素滤波器 (VoxelGrid):基于体素网格下采样,保留中心点,平衡精度与效率。
- 统计滤波器 (StatisticalOutlierRemoval):移除偏离均值过远的离群点。
- 半径滤波器 (RadiusOutlierRemoval):移除邻域点数少于阈值的点。
- 条件滤波器 (ConditionalRemoval):结合多个条件过滤点云。
- 投影滤波器:将点云投影到平面、球面或圆柱面上。
- 高斯滤波:平滑点云表面。
采样滤波
- 均匀/随机采样:简单降采样方法。
- 最远点采样 (FPS):保持点云分布均匀性。
- MLS 上采样:移动最小二乘法提升点云密度。
裁剪滤波
- CropBox:提取立方体区域内的点。
- CropHull:提取任意多边形内部点。
- PlaneClipper3D:基于平面的裁剪。
二、KD 树与八叉树
高效的空间索引结构是加速搜索的关键。
KD 树
用于 K 近邻搜索和半径搜索。在配准、法线估计中广泛使用。
- 圆柱形邻域搜索


