PCL 基于对应分组参数的3D物体识别

PCL 3D object recognition based on correspondance grouping parameters

我实现了基于对应分组的 3D 对象识别,但我无法处理适当的算法参数来找到场景中的对象。

以下示例适用于提供的牛奶和场景 pcd。

http://www.pointclouds.org/documentation/tutorials/correspondence_grouping.php

但不适用于我的示例对象和场景。然后,当前尝试的参数是,

//Algorithm params
    bool show_keypoints_(true);
    bool show_correspondences_(false);
    bool use_cloud_resolution_(false); 
    bool use_hough_(true);
    float model_ss_(0.01f); 
    float scene_ss_(0.0125f); 
    float rf_rad_(0.008f); 
    float descr_rad_(0.008f);
    float cg_size_(0.05f); 
    float cg_thresh_(5.0f);

以及模型和场景文件,

https://www.dropbox.com/s/0o8igpbfnqu5vk3/model.pcd?dl=0 https://www.dropbox.com/s/pv5re3iqzsme29j/scene.pcd?dl=0

不做test/error如何处理合适的参数?

一般来说,如果没有至少 运行 一些非正式实验,为检测问题选择“正确”或“最佳”参数是非常困难的,如果不是完全不可能的话在您可用的训练数据上。

理想情况下,您应该有一组标记的测试图像和一种在数据集上自动测试对象识别方法的方法,输出有用的度量,例如估计对象姿势与已知对象姿势的检测 precision and recall, or the mean squared error真实情况。然后,您可以编写程序脚本来探索参数 space,从一些看起来合理的初始参数值开始。

至于你的具体例子,我能提供的最好的是以下观察:

  • 为了测试您的实施是否有效,我建议录制“更简单”的场景图像。与 PCL 教程中的示例图像相比,您的场景看起来更难以解释(我花了一段时间才真正找到您的模型)。例如:
    • 尝试将场景裁剪到相关区域。
    • 将对象单独放置在一个更大的、否则为空的表面上。
    • 也许将传感器放在靠近物体的地方。
    • 将物体放置在与传感器成微小角度的位置,并从物体上方一点处拍摄图像,以便在图像中可以看到更多物体。
  • 只有掌握了基本的场景,我才会选择更复杂的场景。
  • 教程中使用的参数值看起来是一个很好的起点,因为您的场景和模型看起来大小和形状大致相同。例如,我希望统一采样半径参数也适合您。
  • 你的模型看起来很流畅。这可能会对关键点提取和描述符计算产生影响。您可能需要调整集群大小和描述符半径(到更大的值)以及集群阈值。您应该可视化提取的关键点,看看它们是否有意义。有足够的关键点吗?它们是否位于表面上有意义的显着位置?您是否在模型和场景之间的相应位置获得关键点?这部分您可以独立于其他参数进行调整。