参考:https://www.cnblogs.com/li-yao7758258/p/10908980.html
(1)比如树木是具有与汽车相区别的特征的,当点云数据的特征数量增加时,分割算法应该具有一定的鲁棒性,能够学习如何自动的区分它们。
(2)其次分割应该能够根据其相邻的信息推断出稀疏点云中这些点的属性或者判定出属于哪个标签。
(3)分割算法应该能适用于不同的扫描器,即便是相同的场景在不同的扫描仪生成出的点云也是具有不同的属性的,并且产生点云的质量以及稀疏性的也是不一样的。
-以上将分割方法分为五类。但是,一般来说,有两种基本方法。
-第一种方法是用纯数学模型和几何推理技术,如:区域增长或模型拟合,将线性和非线性模型拟合到点云数据。这种方法允许快速运行时间能实现良好的结果。这种方法的局限性在于在拟合物体时难以选择模型的大小,对噪声敏感并且在复杂场景中不能很好地工作。
-第二种方法是用特征描述子的方法。从点云数据中提取3D特征,并使用机器学习技术来学习不同类别的对象类型,然后使用结果模型对所获取的数据进行分类。在复杂场景中,机器学习技术将优于纯粹基于几何推理的技术。原因是由于噪声、密度不均匀、点云数据中的遮挡,很难找到并将复杂的几何图元拟合到物体上。虽然机器学习技术可以提供更好的结果,但它们通常很慢并且依赖于特征提取过程的结果。
-以上的这些算法在PCL的都已经实现且都有现成的demo可以查看效果。
- class pcl::ConditionalEuclideanClustering< PointT >
该类实现了用于设定条件的欧式聚类的分类算法。
bool enforceIntensitySimilarity (const pcl::PointXYZI& point_a, const pcl::PointXYZI& point_b, float squared_distance)
{
if (fabs (point_a.intensity - point_b.intensity) < 0.1f)
return (true);
else
return (false);
}
// 以上是一个用于设定的基于两点间的强度信息/
pcl::ConditionalEuclideanClustering<pcl::PointXYZI> cec (true);
cec.setInputCloud (cloud_in);
cec.setConditionFunction (&enforceIntensitySimilarity);
// 此处将我们的条件函数加入
cec.setClusterTolerance (0.09f); //聚类所能接受程度
// Size constraints for the clusters:
cec.setMinClusterSize (5); //聚类的大小设置
cec.setMaxClusterSize (30);
// The resulting clusters (an array of pointindices):
cec.segment (*clusters);
// The clusters that are too small or too large in size can also be extracted separately:
cec.getRemovedClusters (small_clusters, large_clusters);
class pcl::CPCSegmentation< PointT >
对超体素图进行分割的分割算法。 它使用局部凹度引起的平面切割进行递归分割,使用局部约束的有向RANSAC进行分割。
class pcl::LCCPSegmentation< PointT >
一种简单的分割算法,将一个超体素图分割成由凹边界分隔的局部凸连接超体素组。相关论文:S. C. Stein, M. Schoeler, J. Papon, F. Woergoetter Object Partitioning using Local Convexity In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 2014
CPC分割与LCCP分割是继承的关系 :具体论文可以查看文献:M. Schoeler, J. Papon, F. Woergoetter Constrained Planar Cuts - Object Partitioning for Point Clouds In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 2015
class pcl::EuclideanClusterExtraction< PointT >
欧几里得聚类提取是欧几里得意义上的聚类获取分割的点云类。此函数是经常用到的。
class pcl::LabeledEuclideanClusterExtraction< PointT >
LabeledEuclideanClusterExtraction表示一个分段类,用于欧几里得意义上的带有标签信息的聚类提取。
class pcl::ExtractPolygonalPrismData< PointT >
ExtractPolygonalPrismData使用一组表示平面模型的点索引,并与给定的高度一起生成三维多边形棱柱。然后使用多边形棱柱分割位于其内部的所有点。它的一个使用示例是提取位于一组三维边界内的数据(例如:由平面支持的对象)。
double z_min = 0., z_max = 0.05; // we want the points above the plane, no farther than 5 cm from the surface
pcl::PointCloud<pcl::PointXYZ>::Ptr hull_points (new pcl::PointCloud<pcl::PointXYZ> ());
pcl::ConvexHull<pcl::PointXYZ> hull;
// hull.setDimension (2); // not necessarily needed, but we need to check the dimensionality of the output
hull.setInputCloud (cloud);
hull.reconstruct (hull_points);
if (hull.getDimension () == 2)
{
pcl::ExtractPolygonalPrismData<pcl::PointXYZ> prism;
prism.setInputCloud (point_cloud);
prism.setInputPlanarHull (hull_points);
prism.setHeightLimits (z_min, z_max);
prism.segment (cloud_indices);
}
class pcl::GrabCut< PointT >
实现了GrabCut分割。
class pcl::segmentation::detail::RandomWalker< Graph, EdgeWeightMap, VertexColorMap >
实现随机行走的多标签图分割。相关论文:Random Walks for Image Segmentation
class pcl::SACSegmentationFromNormals< PointT, PointNT >
结合点云的数据表面的法向量使用RANSAC方法的分割。
class pcl::SeededHueSegmentation
class pcl::SegmentDifferences< PointT >
SegmentDifferences获取两个空间对齐的点云之间的差异,并返回它们之间在最大给定距离阈值下的差异。
class pcl::SupervoxelClustering< PointT >
实现基于体素结构、法线和RGB值的超体素算法。相关论文:Voxel Cloud Connectivity Segmentation - Supervoxels from PointClouds In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) 2013
[1] A. Shamir, Segmentation and shape extraction of 3D boundary meshes (state of the art report), in Eurographics, 2006
[2] B. Bhanu, S. Lee, C. Ho, and T. Henderson, Range data processing:Representation of surfaces by edges. In proc.int. Pattern recognition conf, 1896
[3] X.Y. Jiang, H. Bunke, and U. Meier, Fast range image segmentation using high-level segmentation primitives, In 3rd IEEE Workshop on Applications of Computer Vision, USA, 1996
[4] P.J. Besl, R.C. Jain, Segmentation through variable order surface fitting, IEEE Transaction on Pattern Analysis and Machine Intelligence 10, 1988.
[5] J. Chen, B. Chen, Architectural modeling from sparsely scanned range data. Int. J. Comput. Vision 78, 2008.
[6] S. Filin, N. Pfeifer, Segmentation of airborne data using a slope adaptive filter, ISPRS J. Photogramm. Remote Sens., vol. 60, pp. 71- 80, 2006.
[7] M. Fischler, R. Bolles, Random sample consensus: a paradigm for model fitting with applications to image analysis and automated cartography, Communications of the ACM
[8] P.F. Felzenszwalb, D.P. Huttenlocher, Efficient Graph-Based Image Segmentation, International Journal of Computer Vision, 59(2), 2004.