【问题标题】:How to mark NULL data in Point Cloud Library (PCL) when using Iterative Closest Point (ICP)使用迭代最近点 (ICP) 时如何在点云库 (PCL) 中标记 NULL 数据
【发布时间】:2013-06-21 07:31:45
【问题描述】:

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

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

感谢您的帮助

【问题讨论】:

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


    【解决方案1】:

    如果你使用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 可能会很痛苦。根据您的数据,您可能需要做更多的参数调整。

    【讨论】:

    • 谢谢@Kourosh。它与 pcl::visualization::CloudViewer 一起使用,现在可视化时不显示 NULL 点。但是,对齐在 kdtree 模块中明显崩溃:断言失败:point_representation_->isValid (point) && "Invalid(NaN, Inf) point coordinates given to nearestKSearch!", file: C:\BuildAgent\work\... .\tags\pcl-1.6.0\kdtree\include\pcl/kdtreee/impl/kdtree_flann.hpp,第 83 行。知道为什么吗?
    • Kd-Tree 似乎不希望您的点云有无效点。尝试使用 pcl::removeNaNFromPointCloud 过滤点云并将生成的点云发送给 ICP。告诉我它是否有效。
    • 顺便说一句,如果是,请将答案标记为正确,以便其他看到此答案的人使用。
    • 它成功了 Kourosh!谢谢!它对齐得不是很好,但模块现在可以工作 =) 顺便说一句,您知道 PCL::ITC 是否特别难以对齐非常平坦的点云表面?
    • 很高兴为您提供帮助 :) 我认为考虑到 ICP 算法,它们应该很困难。在这些情况下,使用颜色信息应该会给您更好的估计。无论如何,如果您不必使用 ICP,可以在 code.google.com/p/fovis 处获得 FOVIS 算法的实现。它使用图像和深度而不是点云,因此平面不会成为问题。
    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 2016-07-16
    • 2023-04-09
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2017-03-28
    相关资源
    最近更新 更多