PCL 点云处理核心算法与实战汇总
本文整理了 Point Cloud Library (PCL) 在 C++ 环境下的核心功能模块,涵盖从基础数据操作到高级几何处理的完整流程。内容基于长期实践总结,旨在为开发者提供结构化的技术参考。
基础操作示例
在进行复杂处理前,掌握数据的读写与复制是基本功。
读取点云文件
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");
}
保存点云文件
pcl::io::savePCDFileBinary("dragonfps.pcd", *filtered);
点云复制
pcl::copyPointCloud(*cloud, indicesY, *cloud_yboundary);
一、点云滤波
滤波是预处理的关键,用于去除噪声或提取感兴趣区域。
1. 常用滤波器
- 直通滤波器 (PassThrough):按坐标轴范围裁剪。
- 体素滤波器 (VoxelGrid):网格化下采样,支持最小点数约束及特征计算。
- 统计滤波器 (StatisticalOutlierRemoval):基于邻域距离分布剔除离群点。
- 半径滤波器 (RadiusOutlierRemoval):根据邻域点数阈值过滤。
- 条件滤波器 (ConditionAnd):结合多个条件进行筛选。
- 模型滤波器 (ModelInliers):基于拟合模型保留内点。
- 投影滤波器:将点云投影至平面、球面或圆柱面。
- 高斯滤波 & 双边滤波:平滑处理,含快速多线程版本。
- 中值滤波:适用于有序点云的去噪。
2. 采样滤波
- 均匀/随机采样:基础降采样策略。
- 法线空间采样:考虑曲面曲率分布。
- 最远点采样 (FPS):保证点集覆盖度。
- MLS 上采样:移动最小二乘法平滑并增加密度。
- 局部最大值/栅格最低点:特定场景下的极值提取。
3. 裁剪滤波
- CropBox:立方体区域裁剪。


