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

我正在尝试使用 点云库 (PCL) 中集成的迭代最近点 (ICP) 算法来对齐两组点云.我收到一个错误报告,说它找不到足够的对应点.我已经放宽了参数的条件:setEuclideanFitnessEpsilon(-1.797e+5)、setMaximumIterations(40) 和 setRANSACIterations(2000) 并且仍然有同样的问题..(我还没有找到很多关于这些条件值应该使用哪些或如何使用的信息进行适当的调整,因此任何帮助在这方面也将不胜感激)

I′m trying to align 2 sets of point clouds using the Iterative Closest Point (ICP) algorithm integrated within Point Cloud Library (PCL). I′m getting an error report saying that it cant find enough correspondence points. I have already relaxed the conditions for the parameters: setEuclideanFitnessEpsilon(-1.797e+5), setMaximumIterations(40) and setRANSACIterations(2000) and still having the same problem.. (I havent found much info about which or how these conditional values should be for a proper alignement, so any help in this regard would be really appreciated too)

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

I′m suspecting that this problem has to do with the fact that I have many NULL data points in my cloud, which I′ve marked with the value NULL (0). Is that properly done when using PCL? Is there any NULL standard value for PCL? I clearly dont want the algorithm to consider those NULL points when trying to align the data sets..

感谢您的帮助

推荐答案

如果使用PCL,无效数据的默认值不是NULL,而是NaN.所以如果你想将一个点标记为无效,你应该首先包含<limits>文件,然后将位置设置为'std::numeric_limits::quiet_NaN()'.一般是这样的

If you are using PCL, default value of invalid data is not NULL, but is NaN. So if you want to mark a point as invalid, you should first include <limits> file and then set the positions to 'std::numeric_limits::quiet_NaN()'. It is usually done like this

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

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

But anyway, configuring ICP can be a pain. You may have to do a lot more parameter tweaking depending on your data.

相关文章