CGAL 4.10 点集形状检测:防止检测曲面上的虚假平面

CGAL 4.10 Point Set Shape Detection: preventing detection of spurious planes on curved surfaces

我正在使用 CGAL 点集形状检测在点云中查找平面。该方法在检测模型中的平面方面做得很好,但它也会检测到一些虚假的平面,这些平面并不是模型的真正组成部分。例如。我的模型有一根长管道,算法检测到沿管道长度的几个平面 运行,与其表面相切。我认为避免这种情况的唯一方法是对 epsilon and/or normal_threshold 使用较小的值。我已经为 epsilon 和 normal_threshold 使用了相当小的值(目前分别为 1.0 和 0.35)。

这是一个常见问题吗?还有其他方法可以避免吗?

这是算法的预期行为:如果您有一个足够长的圆柱体,以便算法可以切线地拟合一个平面,并且有足够多的点低于公差,那么它就可以被检测到。 内部检测到的平面没有厚度或伸长率的概念。

如果您增加最小点数或减小公差,您可能会摆脱这些形状,但代价是失去您可能感兴趣的其他形状。

我的建议是以后过滤掉这些你不想要的平面(例如,你可以用 CGAL::linear_least_squares_fitting_3() 识别主成分向量并估计检测到的形状的厚度,然后如果它被删除太小了)。