RANSAC算法理解

RANSAC(RAndom SAmple Consensus,随机采样一致)算法在很多方面如图像匹配、曲线/平面拟合取得了良好的应用。这里以笔记的形式对其进行一个简要的介绍总结。

RANSAC算法的一个基本的假设是:一组数据由“内点”(inliers)和“外点”(outliers)组成,其中“内点”就是组成模型参数的数据,而“外点”就是不适合模型的数据。

RANSAC算法的目标就是在一组含有少量“内点”,大量“外点”的数据中,估计出一个符合“内点”数据的模型。

RANSAC算法基本思想

  1. 假设存在一个样本集 P P P,考虑一个能够估计出模型 M M M所需的大小为 n n n最小抽样子集 S S S(比如说直线拟合,则抽样子集大小 n = 2 n=2 n=2,平面拟合,则抽样子集大小 n = 3 n=3 n=3);
  2. 使用这个抽样选取的子集进行计算初始化数据模型;
  3. 针对余集 S C = P − S SC=P-S SC=PS,代入步骤2中所估计出的模型,若其误差小于设置的阈值 t t t 则认为其是内点,所有的内点组成内点集 S ∗ S^{*} S(也成为子集 S S S的一致集)统计个数。
  4. 比较此次迭代和之前迭代中内点集中内点个数的大小,记录较大“内点”数的模型参数和“内点”数。
  5. 重复上述步骤1-4的过程,直到当前迭代已经足够好了,即内点集 S ∗ S^{*} S的大小 N N N大于一定的阈值 N t N_{t} Nt则认为此数据模型符合要求。并利用 S ∗ S^{*} S中的内点采用最小二乘等方法进行重新计算数据模型 M ∗ M^{*} M

讨论

由上述过程中,我们可以了解到在RANSAC算法需要设置以下四个参数:

  • 抽样子集大小 n n n
  • 用于决定数据是否适应于模型的误差阀值 t t t
  • 判断内点集 S ∗ S^{*} S的大小是否适用于数据集的阈值 N t N_t Nt
  • 迭代次数 K K K

分别对其进行讨论:

  • 抽样子集大小 n n n
    其中抽样子集的大小 n n n 可以通过模型的类型进行判断,如直线拟合选取2个点,平面选取3个点。

  • 误差阀值 t t t
    可以根据适用模型需要自主设置。比如说曲线拟合的偏差、图像匹配中的错误匹配点对等等。

  • 判断内点集 S ∗ S^{*} S的大小是否适用于数据集的阈值 N t N_t Nt
    由于RANSAC算法是基于数据驱动的模型估计方法,所以在处理粗差小于50%的情况时,其效果比较可靠。因此,内点集 S ∗ S^{*} S大小的阈值 N t N_t Nt可以设置为数据集总体大小的一半。

  • 迭代次数 K K K
    假设在数据中,“内点”个数的占比为 W W W
    W = n u m i n l i e r s n u m i n l i e r s + n u m o u t l i e r s W=\frac{num_{inliers}}{num_{inliers}+num_{outliers}} W=numinliers+numoutliersnuminliers
    实际实验过程中,我们并不会知道 W W W的值,但是可以给出一个鲁棒的经验值。
    对于每一次迭代过程中选取 n n n个点作为子集 S S S,则子集 S S S中至少存在一个点不为“内点”的概率为:
    1 − W n 1-W^{n} 1Wn
    那么 K K K 次迭代中,每次都至少有一个“外点”的情况所发生的概率为:
    ( 1 − W n ) K (1-W^{n})^{K} (1Wn)K
    即,能够在 K K K 次迭代中正确选取 n n n 个点,且都为“内点”的概率为:
    P = 1 − ( 1 − W n ) K P=1-(1-W^{n})^{K} P=1(1Wn)K
    这个 P P P值就代表了我们所期待RANSAC算法能够正确计算出数据模型的概率,可以根据自己的需求进行设置。
    变换上式:
    ( 1 − W n ) K = 1 − P K = l o g ( 1 − W n ) 1 − P K = l o g ( 1 − P ) l o g ( 1 − W n ) (1-W^{n})^{K}=1-P\\K={log^{1-P}_{(1-W^{n})}}\\K=\frac{log(1-P)}{log(1-W^{n})} (1Wn)K=1PK=log(1Wn)1PK=log(1Wn)log(1P)

上式中 W W W可以根据经验值进行设置, P P P是我们所期待的正确计算数据模型的概率,可以自主设置,这样就得到了迭代次数。
当然,如果我们事先实在不知道 W W W的值,可以使用自适应迭代次数的方法。即开始时设定一个较大的迭代次数,然后每次更新模型参数估计的时候,用当前的“内点”比值代入公式中的 W W W来估算出迭代次数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓晨的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值