PCL 点云处理算法与模块实战指南
本文档整理自 PCL 核心功能模块,涵盖从基础操作到高级算法的全流程。建议在实际开发前确保已正确安装 PCL 及相关依赖库。
基础 IO 操作
常用 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");
}
// 保存点云文件
pcl::io::savePCDFileBinary("dragonfps.pcd", *filtered);
一、点云滤波
1. 常用滤波器
- 直通滤波器:基于坐标范围过滤
- 体素滤波器:VoxelGrid 及改进版本(含最小点数约束、特征计算)
- 统计滤波器:剔除离群点
- 半径滤波器:基于邻域密度过滤
- 条件滤波器:基于自定义条件过滤(含曲率下采样)
- 模型滤波器:基于几何模型过滤
- 投影滤波器:投影到平面、球面、圆柱或拟合直线
- 索引提取器:子集提取
- 高斯/双边滤波:平滑处理(含法线、强度、快速多线程版本)
- 中值滤波:有序点云去噪
- 阴影点移除
2. 采样滤波
- 均匀/快速均匀采样
- 随机采样
- 法线空间/索引空间采样
- MLS 上采样
- 最远点采样
- 改进降采样算法
- 局部最大值/栅格最低点
- 指定高程点获取
3. 裁剪滤波
- CropHull:任意多边形内部点云提取
- CropBox:立方体内点云过滤
- PlaneClipper3D:平面裁剪器
二、KD 树与八叉树
1. KD 树
- 基本使用:邻域搜索、K 近邻可视化
- 密度计算:平均密度计算(多种方法)
- 重叠点删除:三种不同实现策略
- 圆柱形邻域搜索
2. 八叉树
- 基本使用:空间划分
- 应用案例:点云压缩、空间变化检测
- 体素属性:边界最值点、中心点计算
- 基于八叉树的体素滤波
三、点云配准
粗配准
- 4PCS/K4PCS 算法
- RANSAC 改进算法
- SAC-IA 初始配准
- 刚性目标姿态估计
- 对象模板对齐
精配准
- 点到点 ICP:标准 ICP、KD-ICP、交互式迭代
- 点到面 ICP:线性最小二乘优化、LM 非线性优化、对称目标函数
- 改进 ICP:Trimmed ICP、GICP、LM-ICP
- 概率模型:3D-NDT 算法
对应关系与精度
- 对应关系查找:NormalShooting、K 近邻匹配、RANSAC 剔除错误点对
- 误差去除:法向量夹角、距离阈值、中值距离、特征描述子匹配
- 精度评估:FitnessScore、均方根误差、旋转平移误差
坐标转换与刚体运动
- 欧式/仿射变换:平移与旋转
- SVD 分解:求变换矩阵
- Eigen 模块:四元数应用、几何转换
- Umeyama 算法:双点云变换矩阵求解
四、点云拟合分割
1. RANSAC
- 直线拟合:单条、多条、角度约束
- 平面拟合:标准、夹角约束、最小二乘
- 圆/球/圆锥拟合:二维圆、空间圆、球体、圆柱体、圆锥
- 模型分割:平面分割、指定阈值内平面
2. 其他几何分割
- 聚类与生长:欧式聚类、区域生长(含颜色)、超体素
- 图割与形态学:最小图割、渐进式形态学滤波
- 特定算法:LCCP、CPC、法线微分分割
五、三维重建
- 数据结构:PolygonMesh
- 三角剖分:贪婪投影、耳切法
- 曲面重建:泊松法(含多线程加速)、网格投影、移动立方体(Hoppe/RBF)
- 曲线拟合:B 样条曲线及曲面
- 边界提取:凸包、Alpha-shape、凹多边形边界
- 体素化
六、特征点与特征描述
1. 点云属性
- PCA 分析:主成分分析、主曲率、高斯/平均曲率
- 法向量:积分图估计、精细化处理、MLS 计算
- 包围盒:AABB、PCA 构建、体积计算
- 边界特征:Alpha Shapes、顺/逆时针排序
- 扫描线提取:基于时间索引
2. 关键点提取
- ISS/Harris3D/SUSAN
- 3D-SIFT:Z 方向梯度、曲率不变、RGB 颜色约束
- NARF
3. 特征描述子
- PFH/FPFH/VFH
- Spin Image/SHOT352
- 3DSC/ESF/矩不变量
七、基础函数
1. Common 模块
- IO 与属性:读写点云、查看属性信息
- 数学运算:角度转换、质心计算、协方差矩阵、外接圆半径
- 几何计算:异面直线距离、法向量夹角、多边形面积
- 数据处理:随机赋色、格网化、指定区域/高程点提取
- 迭代器与排序:按坐标排序、批量读取加噪声
2. 其他实用功能
- 距离计算:曼哈顿距离、最大距离、最远点查找
- 格式转换:txt/bin 转 pcd、ModelNet40/KITTI 数据集处理
- 生成测试数据:立体点云、空间圆/椭圆/球形/直线点云
八、点云可视化
1. Plotter 模块
- 绘图方式:不同类型图表绘制
2. Viewer 模块
- 渲染策略:体素格网、FPFH 差异、高程/强度/时间/分类/曲率/密度渲染
- 交互功能:窗口文字标签、二维动态图、视口管理
- 模型加载:PLY/OBJ/STL 文件读取与显示
- 坐标系:添加 CoordinateSystem
- 颜色表:Glasbey 颜色表随机赋色
九、PCL 与 VTK 集成
- 法向量/曲率计算:利用 VTK 能力
- ICP 配准:VTK 实现方案
- 模型处理:3ds Max 模型读取、面积体积计算
- 文件格式:PLY 数据读写
- 常见错误解决
十、点云与图像
- 深度图像:点云转深度图并保存
- 强度图像:点云转强度图
- 二维格网化
十一、交互式操作
- 输入控制:自定义鼠标键盘交互
- 屏幕选点:显示三维坐标
- 框选操作:框选点云并保存
- 距离测量:任意两点欧式距离
十二、LAS 点云处理
- 环境配置:LasLib/PDAL 库配置
- 属性读取:坐标、强度、颜色、GPS 时间、分类标签
- 自定义类型:新增自定义点类型
- 混合数据:获取带强度信息的 PCD 点云


