PCL 点云处理核心算法与模块功能汇总
Point Cloud Library (PCL) 是处理三维点云数据的强大工具,涵盖了从数据读取、滤波预处理到配准、分割及可视化的完整流程。本文梳理了常用算法模块与技术要点,帮助开发者快速定位所需功能。
基础操作示例
在实际开发中,点云的读写与拷贝是最基础的操作。以下是几个关键函数的使用场景:
// 拷贝点云数据
pcl::copyPointCloud(*cloud, indicesY, *cloud_yboundary);
// 读取 PCD 文件
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if(pcl::io::loadPCDFile<pcl::PointXYZ>("source_slice_4000_change.pcd", *cloud) == -1){
PCL_ERROR("Could not read file\n");
}
// 保存二进制 PCD 文件
pcl::io::savePCDFileBinary("dragonfps.pcd", *filtered);
一、点云滤波
滤波是点云预处理的关键步骤,用于去除噪声、下采样或裁剪感兴趣区域。
1. 常用滤波器
- 直通滤波器 (PassThrough): 根据指定坐标轴范围过滤点云。
- 体素滤波器 (VoxelGrid): 将空间划分为体素网格,用体素中心代表该区域内所有点,常用于降采样。
- 统计滤波器 (StatisticalOutlierRemoval): 基于邻域距离分布剔除离群点。
- 半径滤波器 (RadiusOutlierRemoval): 移除邻域内点数少于阈值的点。
- 条件滤波器 (ConditionalFilter): 根据自定义条件(如曲率、法向量)过滤点。
- 模型滤波器 (ModelInlier): 提取符合特定几何模型的点集。
- 投影滤波器: 支持将点云投影到平面、球面或圆柱面。
- 高斯滤波: 对点云进行平滑处理或添加噪声模拟。
- 双边滤波: 结合空间距离和属性差异进行平滑,保留边缘特征。
2. 采样滤波
- 均匀/随机采样: 简单快速地减少点数。
- 最远点采样 (FPS): 保证采样点在空间上分布均匀。
- MLS 上采样: 利用移动最小二乘法增加点云密度。
- 法线空间采样: 在法向量方向上进行采样控制。
3. 裁剪滤波
- CropBox: 提取立方体区域内的点云。
- CropHull: 提取任意多边形或凸包内部的点。


