【问题标题】:pcl normal.compute returning NaN valuespcl normal.compute 返回 NaN 值
【发布时间】:2017-08-21 11:43:19
【问题描述】:

我正在尝试将两个帧中的点云合并为一个更大的点云。我将为此使用 ICP,但我知道我需要对点云进行对齐。我正在尝试使用来自以下位置的 PCL template_alignment 代码:

https://pcl.readthedocs.io/projects/tutorials/en/latest/template_alignment.html#template-alignment

程序在加载pointcloud 后计算表面法线。它适用于代码中使用的示例数据,但对于我自己的数据,第 89 行的“norm_est.compute(*normals_)”语句返回 NaN 值。我在 PCL 库文档上读到,如果函数找不到相邻点,它将返回 NaN 值。这是我的问题,为什么程序无法找到相邻点,我该怎么办?我使用与上述链接中的代码相同的设置进行半径搜索和其他周长进行正常估计。我的左侧图像和点云如下所示。我上传了彩色点云以获得更好的可视化效果,但出于对齐目的,我使用的是不带 RGB 的点云,而我的 pointcloud.ply 文件仅包含 xyz 坐标。

【问题讨论】:

  • 您是否尝试过增加半径以找到更多相邻点?
  • 凹凸:这个问题解决了吗?

标签: computer-vision point-cloud-library point-clouds normals


【解决方案1】:

简单修复:修改该行 (89) 老:

norm_est.setRadiusSearch (normal_radius_);

新:

norm_est.setKSearch(5);

它的作用是查找特定数量的最近邻,而不是查看特定大小的球体(未知数量的条目)。

请注意,5 是一个相当随意的数字。您可以通过降低到 3(所需的最小值)来加快速度,或者通过增加该数字来降低速度但更准确。最好不要在此处实际删除硬编码值,因此我建议您将其与之前的 normal_radius_ 类似,但这应该可以让您暂时解决这个问题。

其他选项:

1: 计算法线后从点云中移除 nan (pcl::removeNaNFromPointCloud)

2:运行重新处理步骤,在其中执行统计异常值去除过滤器。或者一个彻底的最小邻居半径过滤器。这将删除邻居太少的点(这是在您的正常计算中生成 nan 值的原因)

3:增加法线计算的半径或执行最近邻(不基于半径)法线计算。

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 2019-06-20
    • 1970-01-01
    • 2020-05-27
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多