随机采样一致性算法-------PCL

文章介绍了RANSAC算法,一种在计算机视觉中用于估计3D点云中几何模型的随机采样一致性方法。它通过随机选取样本子集、计算模型参数并检测偏差,来确定内点和外点。RANSAC适用于平面和平面模型的拟合,以及如何设置距离阈值进行模型优化。
摘要由CSDN通过智能技术生成

随机采样一致性算法

RANSAC从样本中随机抽选出一个样本子集,使用最小方差估计算法对这个子集计算模型参数,然后计算所有样本与该模型的偏差,再使用一个预先设定好的阈值与偏差比较,当偏差小于阈值时,该样本点属于模型内样本点 ( inliers),或称内部点、局内点或内点,否则为模型外样本点(outliers),或称外部点、局外点或外点,记录下当前的 inliers 的个数,然后重复这一过程。每一次重复都记录当前最佳的模型参数,所谓最佳即是inliers的个数最多 ,此时对应的inliers个数为 best_ninliers 。 每次迭代的末尾都会根据期望的误差率、 best_ninliers、总样本个数、当前迭代次数,计算一 个迭代结束评判因子,据此决定是否迭代结束。迭代结束后,最佳模型参数就是最终的模型参数估计值 。

std::vector<int> PclTool::randomSampleConsensusALG(const pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, const double threshold, const unsigned int type)
{
    std::vector<int> inliers;
    if (type == 1)
    {  
        // 平面
        pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr model_p(new pcl::SampleConsensusModelPlane<pcl::PointXYZ>(cloud));
        pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(model_p);
        ransac.setDistanceThreshold(threshold);
        ransac.computeModel();
        ransac.getInliers(inliers);
    }
    else if (type == 2)
    {  
        // 球体
        pcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptr model_s(new pcl::SampleConsensusModelSphere<pcl::PointXYZ>(cloud));
        pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(model_s);
        ransac.setDistanceThreshold(threshold);
        ransac.computeModel();
        ransac.getInliers(inliers);
    }
    else
    {
        std::cout << "type error: 1 or 2 " << std::endl;
    }

    return inliers;
}
  1. ransac.setDistanceThreshold(.01);
    距离阈值。距离阈值是用来判断数据点是否属于模型内点的关键参数。在拟合几何形状模型时,RANSAC 算法会计算每个数据点到模型的距离,并将距离小于该阈值的点视为模型内点。通常情况下,距离阈值的选择需要根据具体问题和数据集来确定,一般需要通过试验来调整。

  2. ransac.computeModel();
    用于估计模型参数。在执行该函数之前,必须先设置距离阈值和输入数据。RANSAC 算法会随机选择一组数据点作为初始内点集合,然后根据这些点估计模型参数。接着,它会计算其他数据点到估计模型的距离,并将距离小于阈值的点加入内点集合。这个过程会迭代多次,直到满足停止条件(例如,迭代次数达到预设值或者内点集合的大小达到一定阈值)。

  3. ransac.getInliers(inliers);
    得到的模型内点的索引。在执行 computeModel 函数之后,可以使用 getInliers 函数获取到被识别为模型内点的数据点的索引,并将这些索引存储在提供的向量 inliers 中。这些索引可以用于后续的进一步处理,例如拟合更精确的模型、剔除噪声点或可视化内点。

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值