PCL 点云处理核心算法与模块汇总
PCL (Point Cloud Library) 是 C++ 环境下处理三维数据的标准工具。本文梳理了从滤波、配准、分割到重建的核心算法模块,涵盖 KD 树、八叉树、特征描述子及可视化等关键功能,为开发者提供系统化的技术参考。
基础操作示例
在实际开发中,点云的读取、保存和复制是最基础的环节。以下是几个常用 API 的使用片段:
点云复制
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. 常用滤波器
- 直通滤波器 (PassThroughFilter):基于坐标轴范围裁剪数据。
- 体素滤波器 (VoxelGrid):通过体素网格下采样,平衡精度与效率。
- 统计滤波器 (StatisticalOutlierRemoval):剔除偏离均值过远的离群点。
- 半径滤波器 (RadiusOutlierRemoval):根据邻域点数过滤稀疏点。
- 条件滤波器 (ConditionAndRemoval):结合自定义规则进行筛选。
- 模型滤波器 (ModelInliers):基于拟合模型(如平面)保留内点。
- 投影滤波器:将点云投影到平面、球面或圆柱面上。
- 高斯滤波与双边滤波:平滑点云表面,保留边缘特征。
2. 采样滤波
- 均匀/随机采样:快速减少点云密度。
- 法线空间采样:在曲率变化大的区域保留更多点。
- 最远点采样 (FPS):保证采样点的空间分布均匀性。
- MLS 上采样:利用移动最小二乘法增加点云密度。
3. 裁剪滤波
- CropBox/CropHull:提取立方体或多边形内部的点云。
- 平面裁剪器 (PlaneClipper3D):基于平面方程进行切割。


