PCL库种surface模块是用来对三维扫描获取的原始点云进行曲面重建的,该模块包含实现点云重建的基础算法与数据结构。
1.Class pcl::ConcaveHull< PointInT >
类ConcaveHull实现了创建凹多边形的算法,该类的实现其实是Hull库实现的接口封装,ConcaveHull支持二维和三维点集。
#include <pcl/surface/concave_hull.h>
ConcaveHull ()
// 空构造函数
virtual ~ConcaveHull ()
// 空析构函数
void setSearchMethod (const KdTreePtr &tree)
// 设置搜索时所用的搜索机制,参数tree指向搜索时所用的搜索对象,例如kd-tree、octree等对象。
virtual void setInputCloud (const PointCloudConstPtr &cloud)
// 设置输入点云,参数cloud 为输入点云的共享指针引用。
virtual void setIndices (const IndicesPtr &indices)
// 为输入点云提供点云索引向量的指针。
virtual void setIndices (const IndicesConstPtr &indices)
// 为输入点云提供点云索引向量的指针,该索引为常数,不能更改。
virtual void setIndices (const PointIndicesConstPtr &indices)
// 为输入点云提供点云不变索引向量指针的指针。
virtual void setIndices (size_t row_start, size_t col_start, size_t nb_rows, size_t nb_cols)
// 为输入点云中要用到的部分提供索引,该方法只能用于有序点云。参数row_start为行偏移、col_start为列偏移、nb_rows表示 row_start进行的行偏移数,nb_cols表示进行的列偏移数。
void reconstruct (PointCloud &points, std::vector< pcl::Vertices > &polygons)
// 计算所有输入点的凹多边形,参数 points存储最终产生的凹多边形上的顶点,参数 polygons存储一系列顶点集,每个顶点集构成的一个多边形,Vertices数据结构包含一组点的索引,索引是point中的点对应的索引。
void reconstruct (PointCloud &output)
// 计算所有输入点的凹多边形﹐输出的维数取决于输入的维数是二维或三维,输出结果为多边形顶点并存储在参数output中。
void setAlpha (double alpha)
// 设置alpha值,参数alpha限制voronoi图中多边形边长的长短(边长越短多边形越细分),alpha值是一个非零的正值,定义了voronoi图中多边形顶点到中心点的最大距离。
double getAlpha ()
// 获取alpha值
void setVoronoiCenters (PointCloudPtr voronoi_centers)
// 设置参数voronoi_centers,如果设置,最终产生的凹多边形对应的voronoi图中的多边形的中心将被存储在参数voronoi_centers中。
void setKeepInformation (bool value)
// 设置参数keep_information,如果keep_information为真,凹多边形中的顶点就保留其他信息,如 RGB值、法线等。
int getDim () const
// 返回计算得到多边形的维数(二维或三维)。
int getDimension () const
// 返回计算得到多边形的维数(二维或三维)。
void setDimension (int dimension)
// 设置输入数据的维数(二维或三维),参数dimension为设置输入数据的维度﹐如果没有设置,输入数据的维度将自动根据输入点云设置。
void getHullPointIndices (pcl::PointIndices &hull_point_indices) const
// 检索凸包的输入点云的索引。
2.Class pcl::ConvexHull< PointInT >
类ConvexHull实现了创建凸多边形的算法,该类的实现其实是Hull库实现的接口封装,ConcvexHull支持二维和三维点集。
#include <pcl/surface/convex_hull.h>
ConvexHull ()
// 空构造函数
virtual ~ConvexHull ()
// 空析构函数
void reconstruct (PointCloud &points, std::vector< pcl::Vertices > &polygons)
// 计算所有输入点的凹多边形,参数 points存储最终产生的凹多边形上的顶点,参数 polygons存储一系列顶点集,每个顶点集构成的一个多边形,Vertices数据结构包含一组点的索引,索引是point中的点对应的索引。
void reconstruct (PointCloud &points)
// 计算所有输入点的凹多边形﹐输出的维数取决于输入的维数是二维或三维,输出结果为多边形顶点并存储在参数output中。
void setComputeAreaVolume (bool value)
// 是否计算凸多边形的面积和体积,如果参数value为真,调用qhull库计算凸多边形的总面积和总体积。为节省计算资源,参数value缺省值为false。
double getTotalArea () const
// 获取凸包的总面积,如果 setComputeAreaVolume设置为真时,才会有有效输出。
double getTotalVolume () const
// 获取凸包的总体积,如果 setComputeAreaVolume设置为真时,才会有有效输出。
void setDimension (int dimension)
// 设置输入数据的维数(二维或三维),参数dimension为设置输入数据的维度﹐如果没有设置,输入数据的维度将自动根据输入点云设置。
int getDimension () const
// 返回计算得到多边形的维数(二维或三维)。
void getHullPointIndices (pcl::PointIndices &hull_point_indices) const
// 检索凸包的输入点云的索引。
3.Class pcl::EarClipping
类EarClipping实现了对多边形进行三角化的EarClipping算法,其输入为多边形网格模型数据,输出为三角化后的精细网格模型。
#include <pcl/surface/ear_clipping.h>
EarClipping ()
// 空构造函数
void setInputMesh (const pcl::PolygonMeshConstPtr &input)
// 设置输入网格模型数据,input指向多边形网格的指针引用。
pcl::PolygonMeshConstPtr getInputMesh () const
// 获取输入网格模型数据
void process (pcl::PolygonMesh &output)
// 三角化处理输入的多边形网格数据并将处理得到的精细曲面模型存储到out-
4.Class pcl::GreedyProjectionTriangulation< PointInT >
类GreedyProjectionTriangulation实现了将三维点投影到某一局部二维坐标平面的贪婪三角化算法,该算法需要点云平滑,并且密度变化连续。
#include <pcl/surface/gp3.h>
GreedyProjectionTriangulation ()
// 空构造函数
void setMu (double mu)
// 设置样本点到最近邻域距离的乘积系数mu来获得每个样本点的最大搜索距离,这样使得算法自适应点云密度的变化。
double getMu () const
// 获取样本点到最近邻域距离的乘积系数mu
void setMaximumNearestNeighbors (int nnn)
// 设置样本点最多可以搜索的邻域数目nnn。
int getMaximumNearestNeighbors () const
// 获取样本点最多可以搜索的邻域数目。
void setSearchRadius (double radius)
// 设置搜索半径radius,来确定三角化时k-邻近的球半径。
d