跳转至

OpenCV SurfaceMatching PPF

PPF API介绍

PPF3DDetector API

构造函数

/**
 * @brief: 创建3D PPF 特征检测器,并指定相关参数

 * @param relativeSamplingStep: 相对于模型直径的采样步长
    在对模型进行模型描述建模时,用于在模型上采样的步长
        值越小,模型越稠密,姿态估计越准确,但是内存要求以及训练时间越长
        值越大,模型越稀疏,姿态估计精度降低,但是内存要求以及训练时间和匹配时间更短。

 * @param relativeDistanceStep: 相对于模型直径的离散步长
    在对模型进行模型描述建模时,用于对PPF特征向量进行离散化的步长
        值越小,则离散化越精细,哈希表越大,但是哈希表每个bin之间的关系越模糊
        值越大,细化越粗糙,哈希表越小,但是两个不同PPF特征向量可能会因为过大的步长而被放
 入相同的哈希槽中。
        默认该值与 'relativeSamplingStep'相同
        对于存在较多噪声的场景,该参数可以设得较大以提高对噪点的鲁棒性

  *@param numAngles:
      在PPF特征检测的'voting scheme' 步骤中,需要对角度进行离散化,从而得以使用GHT算法。
      角度离散化的区间数即为 'numAngles'。
      参考论文中建议值为'30',对于存在较多噪声的场景,可以将该参数设为 '25' 或 '20' 以提高对噪点的鲁棒性。
 */
cv::ppf_match_3d::PPF3DDetector::PPF3DDetector ( 
    const double    relativeSamplingStep,
    const double    relativeDistanceStep = 0.05,
    const double    numAngles = 30 )

训练模型

/**
 * @brief: 使用输入的 'Model' 数据,建立一个新的模型
 * @param Model: 模型的3D坐标+法向量点集(Nx6, CV_32F)
 */
void cv::ppf_match_3d::PPF3DDetector::trainModel (const Mat &Model)

匹配

/**
 * @brief: 在提供的场景 'scene' 中,使用以训练的模型进行匹配,并返回匹配得到的所有可能姿态

 * @param scene: 目标场景的3D坐标+法向量点集(Nx6, CV_32F)

 * @param results: 最终求得的姿态列表。

 * @param relativeSceneSampleStep: 
     相对于场景点集数量的采样步长。
     如果设为 1.0/5.0,则场景点集中的 5-th 的点被用于计算。该参数提供了一种调整算法速度和精度的方法。较大的值可以提高速度,但是降低精度。反之,较小的值会提高精度,但降低速度。

 * @param relativeSceneDistance: 
     相对于模型直径的距离阈值。参数作用类似于训练过程中的'relativeSamplingStep' 参数的作用。
 */
void cv::ppf_match_3d::PPF3DDetector::match (   
    const Mat &     scene,
    std::vector< Pose3DPtr > &  results,
    const double    relativeSceneSampleStep = 1.0/5.0,
    const double    relativeSceneDistance = 0.03 )  

示例

C++

完整代码:opencv-examples/ppf_match.cpp