介绍
以下链接描述了一组基本PCL教程。请注意,他们的源代码可能已经作为PCL常规版本的一部分提供,因此在开始复制和粘贴代码之前请检查那里。下面的教程列表是根据git存储库中的reST文件自动生成的。
注意:
在开始阅读之前,请确保您阅读了更高级别的概述文档,网址为http://www.pointclouds.org/documentation/,在“快速入门”下。非常感谢。
一如既往,我们很高兴听到您的意见,并收到您对任何教程的贡献。
基本使用
PCL概览
本教程将引导您了解PCL的组件,提供模块的简短描述,指明模块的位置,并列出不同组件之间的交互。
滤波器 Filters
背景:
下图给出了噪声去除的示例。由于测量误差,某些数据集存在大量阴影点。这使得本地点云3D特征的估计变得复杂。通过对每个点的邻域进行统计分析,并对不符合特定标准的点进行修剪,可以过滤其中一些异常值。PCL中稀疏离群点消除的实现是基于计算输入数据集中点到邻居距离的分布。对于每个点,计算其到所有相邻点的平均距离。通过假设得到的分布是具有平均值和标准偏差的高斯分布,所有平均距离超出由全局距离平均值和基准偏差定义的区间的点都可以被视为离群值,并从数据集中进行修剪。
Documentation: http://docs.pointclouds.org/trunk/group__filters.html
Tutorials: http://pointclouds.org/documentation/tutorials/#filtering-tutorial
Interacts with:
Sample Consensus
Kdtree
Octree
Location:
MAC OS X (Homebrew installation)
Header files: $(PCL_PREFIX)/pcl-$(PCL_VERSION)/pcl/filters/
Binaries: $(PCL_PREFIX)/bin/
$(PCL_PREFIX) is the cmake installation prefix CMAKE_INSTALL_PREFIX, e.g., /usr/local/
Linux
Header files: $(PCL_PREFIX)/pcl-$(PCL_VERSION)/pcl/filters/
Binaries: $(PCL_PREFIX)/bin/
$(PCL_PREFIX) is the cmake installation prefix CMAKE_INSTALL_PREFIX, e.g., /usr/local/
Windows
Header files: $(PCL_DIRECTORY)/include/pcl-$(PCL_VERSION)/pcl/filters/
Binaries: $(PCL_DIRECTORY)/bin/
$(PCL_DIRECTORY) is the PCL installation directory, e.g., C:\Program Files\PCL $(PCL_VERSION)\
高级使用
特征 Features
3D特征在PCL中的工作方式
在点云中估计曲面法线
曲面法线是几何曲面的重要属性,在许多领域(如计算机图形应用程序)中大量使用,以应用生成着色和其他视觉效果的正确光源。
给定一个几何曲面,通常很容易将曲面上某个点的法线方向推断为垂直于该点曲面的矢量。然而,由于我们获取的点云数据集代表真实曲面上的一组点样本,因此有两种可能性:
使用曲面网格技术,从获取的点云数据集中获取底层曲面,然后从网格中计算曲面法线;
使用近似直接从点云数据集推断曲面法线。
本教程将解决后者,即给定点云数据集,直接计算云中每个点的曲面法线。
理论初步
虽然存在许多不同的正常估计方法,但我们将在本教程中集中讨论的方法是最简单的方法之一,公式如下。确定曲面上某一点的法线的问题近似于估算与曲面相切的平面的法线问题,而这又成为一个最小二乘平面拟合估算问题。
因此,估算曲面法线的解决方案简化为分析从查询点最近邻创建的协方差矩阵的特征向量和特征值(或PCA–主成分分析)。更具体地说,对于每个点\boldsymbol{p}_i,我们将协方差矩阵\mathcal{C}组装如下:
其中k是在\boldsymbol{p}_i邻域中考虑的点邻域的数目,\overline{\boldsymbol{p}}表示最近邻域的3D质心,\lambda_j是协方差矩阵的第j个特征值,而\vec{\mathsf v}_j}是第j个本征向量。
要从PCL中的一组点估计协方差矩阵,可以使用:
// Placeholder for the 3x3 covariance matrix at each surface patch
Eigen::Matrix3f covariance_matrix;
// 16-bytes aligned placeholder for the XYZ centroid of a surface patch
Eigen::Vector4f xyz_centroid;
// Estimate the XYZ centroid
compute3DCentroid (cloud, xyz_centroid);
// Compute the 3x3 covariance matrix
computeCovarianceMatrix (cloud, xyz_centroid, covariance_matrix);