我使用CGAL点集形状检测来查找点云中的平面。该方法很好地检测了模型中的平面,但它也检测到了许多虚假平面,这些虚假平面实际上并不是模型的一部分。例如。我的模型有一个长管道,算法检测到沿管道长度方向运行的几个平面,与其表面相切。我能想到避免这种情况的唯一方法是使用较小的epsilon和/或normal_threshold值。我已经使用了非常小的epsilon和normal_threshold值(目前分别为1.0和0.35)。
这是一个常见的问题吗?有另一种方法可以避免吗?
答案 0 :(得分:1)
这是算法的一种预期行为:如果你有一个足够长的圆柱体,这样算法可以切向适合一个平面,并且有足够低于公差的点,那么它就可以被检测到。在检测到的平面内没有内部的厚度或伸长率的概念。
如果你增加最小点数或减少公差,你可能会摆脱这些形状,但代价是失去你可能感兴趣的其他形状。
我的建议是过滤掉你之后不想要的平面(例如,你可以用CGAL::linear_least_squares_fitting_3()
识别主要分量向量并估计检测到的形状的厚度,如果它也是如此,则删除小)。