随机一致性采样RANSAC

PCL官网参考:How to use Random Sample Consensus model — PCL

一、RANSAC简介

RANSAC(RAndom SAmple Consensus,随机采样一致)算法是从一组含有“外点”(outliers)的数据中正确估计数学模型参数的迭代算法。“外点”一般指的的数据中的噪声,比如说匹配中的误匹配和估计曲线中的离群点。所以,RANSAC也是一种“外点”检测算法。RANSAC算法是一种不确定算法,它只能在一种概率下产生结果,并且这个概率会随着迭代次数的增加而加大。

  • 基本假设: 数据是由“内点”和“外点”组成的。“内点”就是组成模型参数的数据,“外点”就是不适合模型的数据。另一个必要的假设是,RANSAC可以从数据中最优地估计所选模型参数。

二、算法基本思想和流程

2.1 RANSAC算法流程

RANSAC是通过反复选择数据集去估计出模型,一直迭代到估计出认为比较好的模型。
具体的实现步骤可以分为以下几步:

  1. 选择出可以估计出模型的最小数据集;(对于直线拟合来说就是两个点,对于计算Homography矩阵就是4个点)
  2. 使用这个数据集来计算出数据模型;
  3. 将所有数据带入这个模型,计算出“内点”的数目;(累加在一定误差范围内的适合当前迭代推出模型的数据)
  4. 比较当前模型和之前推出的最好的模型的“内点“的数量,记录最大“内点”数的模型参数和“内点”数;
  5. 重复1-4步,直到迭代结束或者当前模型已经足够好了(“内点数目大于一定数量”)。

2.2 RANSAC算法的优缺点

  • RANSAC 的一个优点是它能够对模型参数进行稳健的估计,即即使数据集中存在大量异常值,它也可以高度准确地估计参数。
  • RANSAC 的一个缺点是计算这些参数所需的时间没有上限。当计算的迭代次数有限时,获得的解决方案可能不是最佳的,甚至可能不是一个以良好方式拟合数据的解决方案。通过这种方式,RANSAC 提供了一种权衡;通过计算更多的迭代次数,可以增加生成合理模型的概率。 RANSAC 的另一个缺点是它需要设置特定问题的阈值。
  • RANSAC 只能为特定数据集估计一个模型。对于存在两个(或更多)模型时的任何一种模型方法,RANSAC 可能无法找到其中任何一个。

三、PCL中RANSAC使用参考示例

3.1 直线与球面模型拟合

参考实例How to use Random Sample Consensus model — PCL

///核心代码注释
 std::vector<int> inliers;

  // created RandomSampleConsensus object and compute the appropriated model
  pcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptr
    model_s(new pcl::SampleConsensusModelSphere<pcl::PointXYZ> (cloud));//球模型
  pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr
    model_p (new pcl::SampleConsensusModelPlane<pcl::PointXYZ> (cloud));//线模型
  if(pcl::console::find_argument (argc, argv, "-f") >= 0)//判断主函数输入参数
  {
    
    //输入参数-f时为线模型model_p
    pcl::RandomSampleConsensus<pcl::PointXYZ> ransac (model_p);//设置RANSAC模型
    ransac.setDistanceThreshold (.01);//设置阈值
    ransac.computeModel();//迭代计算
    ransac.getInliers(inliers);//获取内点inliners
  }
  else if (pcl::console::find_argument (argc, argv, "-sf") >= 0 )
  {
    
    
    pcl::RandomSampleConsensus<pcl::PointXYZ> ransac (model_s);
    ransac.setDistanceThreshold (.01);
    ransac.computeModel();
    ransac.getInliers(inliers);
  }


3.2 两两点云获取设备自动标定

参考资料:PCL_两两点云获取设备自动标定
来源自《点云库PCL从入门到精通》例程

猜你喜欢

转载自blog.csdn.net/weixin_43949950/article/details/126407831