RANSAC 原理

RANSAC, Random Sample Consensus(随机抽样一致算法)是一个通用的鲁棒估计算法,由Fischler和Bolles提出文献

算法原理很简单,如图:
算法

现以平面点集拟合直线为例进行说明。已知点集 xi,yi,i n ,估计直线 y=kx+b
根据RANSAC算法思想,得到如下步骤:

  1. 随机地从 xi,yi,i n 中选择2个点,得到一条直线L1;
  2. 计算其它点到直线L1的距离,确定距离小于阈值 Td 的点集 Si
  3. 如果 Si 中点的个数大于阈值 Tn ,则该直线L1即为所求;
  4. 如果 Si 中点的个数小于阈值 Tn ,选择新的2个点,重复上述过程;
  5. 经过 N 次重复后,选择具有最多点的个数的点集 Si ,其对于的直线即为所求。

    直线拟合

三个问题:

  • 什么是距离阈值?
    我们希望选择的距离阈值 t 使点为内点的概率是 α 。该计算需要知道内点到模型距离的概率分布。实际中距离阈值通常靠经验选取,但是,如果假定测量误差为均值为0,标准差为 σ 的高斯分布,那么 t 的值可以计算出来。

距离阈值

  • 采样多少次为宜?
    尝试每个可能的样本通常在计算上不可行也不必要。只要采样次数N足够大,保证由 s 个点组成的随机样本中至少有一次没有野值点的概率是 p 。通常, p=0.99 。假定 w 是任意选择一个数据点为内点的概率,那么, ϵ=1w 是其为野值点的概率,从而至少需要N次选择,每次 s 个点,其中 (1ws)N=1p , 得到 N=log(1p)/log(1(1ϵ)s)

采样

  • 一致集多大为宜?
    根据经验,给定野值的假定比率后,如果一致集大小接近期望属于该数据集的内点数时迭代就停止,即对 n 个数据, T=(1ϵ)n .对于直线拟合的例子, ϵ 的保守估计是 ϵ=0.2 ,因此 T=(10.2)12=10

猜你喜欢

转载自blog.csdn.net/liujiabin076/article/details/70810743
今日推荐