Reb*_*orn 3 computer-vision normals point-clouds point-cloud-library
我正在尝试将两个帧中的点云合并为一个更大的点云。我将使用 ICP,但我知道我需要预先对齐点云。我正在尝试使用template_alignment来自以下位置的 PCL 代码来完成此操作:
https://pcl.readthedocs.io/projects/tutorials/en/latest/template_alignment.html#template-alignment
该程序在加载后计算表面法线pointcloud。它对于代码中使用的示例数据工作得很好,但对于我自己的数据,norm_est.compute(*normals_)第 89 行上的“”语句返回NaN值。我在 PCL 库文档中读到,如果函数找不到相邻点,它将返回 NaN 值。这就是我的问题,为什么程序无法找到邻近点,我该怎么办?我使用与上述链接中的代码相同的设置进行半径搜索和其他周长进行正常估计。下面给出了我的左图像和点云。我已经上传了彩色点云以实现更好的可视化,但出于对齐目的,我使用不带 RGB 的点云,并且我的pointcloud.ply文件仅包含 xyz 坐标。

简单修复:修改该行 (89) 旧:
norm_est.setRadiusSearch (normal_radius_);
Run Code Online (Sandbox Code Playgroud)
新的:
norm_est.setKSearch(5);
Run Code Online (Sandbox Code Playgroud)
这样做的目的不是在特定大小的球体(未知数量的条目)内查找,而是寻找特定数量的最近邻居。
请注意,5 是一个相当任意的数字。您可以通过降低到 3(最低要求)来加快速度,或者通过增加该数字来减慢但更准确。最好不要实际上在那里删除硬编码值,因此我建议您将其与之前的 normal_radius_ 类似,但这应该可以让您暂时解决这个问题。
其他选项:
1:计算法线后从点云中删除nan(pcl::removeNaNFromPointCloud)
2:运行重新处理步骤,执行统计异常值去除过滤器。或者是一个彻底的最小邻居半径过滤器。这将删除邻居太少的点(这是在正常计算中生成 nan 值的点)
3:增加法线计算的半径或执行最近邻(非基于半径)法线计算。
| 归档时间: |
|
| 查看次数: |
2729 次 |
| 最近记录: |