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

时间:2016-02-23 16:08:34

标签: c++ kinect point-cloud-library point-clouds

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

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

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

如何处理正确的参数而不进行测试/错误?

1 个答案:

答案 0 :(得分:2)

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

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

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

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