使用迭代最近点(ICP)时,如何在点云库(PCL)中标记NULL数据
How to mark NULL data in Point Cloud Library (PCL) when using Iterative Closest Point (ICP)
我正在尝试使用集成在点云库(PCL)中的迭代最近点算法来对齐两组点云。我收到一份错误报告,说它找不到足够的对应点。我已经放宽了参数的条件:setEuclideanFitnessEpsilon(-1.797e+5)、setMaximumIterations(40)和setRANSACIteratures(2000),但仍然存在相同的问题。。(我还没有找到太多关于这些条件值应该是什么或如何进行正确对齐的信息,所以在这方面的任何帮助也将不胜感激)
我怀疑这个问题与我的云中有许多NULL数据点有关,我用值NULL(0)标记了这些数据点。在使用PCL时,这是否正确?PCL是否有NULL标准值?我显然不希望算法在试图对齐数据集时考虑那些空点。。
感谢您的帮助
如果使用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可能会很痛苦。根据您的数据,您可能需要进行更多的参数调整。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何在ROS中使用PCL可视化动力学数据的表面法线
- 为 pcl::P ointCloud 数据指定一个区域并获取可用点数
- 使用迭代最近点(ICP)时,如何在点云库(PCL)中标记NULL数据