使用迭代最近点(ICP)时如何在点云库(PCL)中标记NULL数据

时间:2013-06-24 17:31:51

标签: c++ 3d iteration point-cloud-library point-clouds

我正在尝试使用点云库(PCL)中集成的迭代最近点(ICP)算法对齐2组点云。我得到一个错误报告,说它找不到足够的通信点。我已经放宽了参数的条件:setEuclideanFitnessEpsilon(-1.797e + 5),setMaximumIterations(40)和setRANSACIterations(2000)并且仍然有相同的问题..(我没有找到关于这些条件值应该是哪个或如何应该有很多信息为了适当的对齐,所以在这方面的任何帮助也会非常感激。)

我怀疑这个问题与我的云中有很多NULL数据点的事实有关,我的数据点标记为NULL(0)。使用PCL时是否正确完成? PCL有任何NULL标准值吗?我显然不希望算法在尝试对齐数据集时考虑那些NULL点。

感谢您的帮助

1 个答案:

答案 0 :(得分:6)

如果您使用的是PCL,则无效数据的默认值不是NULL,而是NaN。因此,如果要将某个点标记为无效,则应首先包含<limits>文件,然后将位置设置为“std :: numeric_limits :: quiet_NaN()”。它通常像这样完成

const float bad_point = std::numeric_limits<float>::quiet_NaN();
if( is_invalid_point )
    p.x = p.y = p.z = bad_point;

但无论如何,配置ICP可能会很痛苦。根据您的数据,您可能需要进行更多的参数调整。