RANSAC: Random Sample Consensus

目录

  • RANSAC
  • 算法基本思想和流程
  • 迭代次数推导
  • 参考

RANSAC

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

  • 内点:符合模型的数据,或者说带入模型后误差小于阈值
  • 外点:不符合模型的数据,或者说带入模型后误差大于阈值

算法基本思想和流程

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

  1. 选择出可以估计出模型的最小数据集
  2. 使用这个数据集来计算出数据模型
  3. 将所有数据带入这个模型,计算出“内点”的数目
  4. 比较当前模型和之前推出的最好的模型的“内点“的数量,记录最大“内点”数的模型参数和“内点”数
  5. 重复1-4步,直到迭代结束或者当前模型已经足够好了(“内点数目大于一定数量”)

迭代次数推导

假设“内点”在数据中的占比为 t t t
在这里插入图片描述
那么每次计算模型使用 N N N 个点的情况下,选取的点至少有一个外点的概率:
1 − t N 1 - t^N 1tN

在迭代 k k k 次的情况下, k k k 次计算模式都至少采样到一个外点的概率:
( 1 − t N ) k (1-t^N)^k (1tN)k

则采样到正确的 N N N 个点去计算出正确模型的概率:
P = 1 − ( 1 − t N ) k P = 1 - (1-t^N)^k P=1(1tN)k

可以求得:
k = l o g ( 1 − P ) / l o g ( 1 − t N ) k = log(1-P) / log(1-t^N) k=log(1P)/log(1tN)

“内点”的概率 t t t 通常是一个先验值。 P P P 是我们希望RANSAC得到正确模型的概率。如果事先不知道 t t t 的值,可以使用自适应迭代次数的方法。也就是一开始设定一个无穷大的迭代次数,然后每次更新模型参数估计的时候,用当前的“内点”比值当成 t t t 来估算出迭代次数。

参考

RANSAC算法详解(附Python拟合直线模型代码)

你可能感兴趣的:(SLAM,算法,人工智能)