随机抽样一致(RANSAC)算法及matlab实现

随机抽样一致(RANSAC)算法及matlab实现

一、算法介绍

RANSAC为RANdom SAmple Consensus(随机抽样一致)的缩写,它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。它于1981年由FischlerBolles最先提出。

RANSAC算法的应用背景是在一堆观察点中估计出某个模型 y y y

以2D模型为例,RANSAC算法要估计 数据的最优模型 y = a x + b y=ax+b y=ax+b

二、算法步骤

Step1:随机抽取n个数据

从样本集合中取出n个数据。然后用这n个点去实例化模型,并将仿射变换计算出来。这个计算过程可以使用最小二乘法等等不限。需要注意的是,在选取n的时候,要随机选择最小数量的点以尽可能高的效率来检测可能的模型。例如如果模型是直线型,则 n = 2 n=2 n=2

如果 n n n超过了最小数量,会带来如下缺点:

1.计算复杂性增加。每次迭代需要选择和处理更多的点,这可能导致算法运行速度变慢。对于直线来说,任何两点都可以确定一条直线,所以选择超过两点会增加不必要的计算。

2.更容易受到异常值的影响。如果随机选择三个点,并且其中两个是异常值,那么通过这三个点确定的直线可能会受到异常值的严重影响。而如果你只选择两个点,异常值对结果的影响可能会减少。

3.可能会导致过拟合。如果数据集中有很多异常值,使用更多的点来确定模型可能会导致模型过于复杂,从而更容易拟合到这些异常值,这被称为过拟合。

Step2:计算所有点到模型的距离di与距离门限(threshold)的距离t

定义内点*(inliers)和外点(outliers)*,其中内点可以被认为正确数据,即可以被模型描述的数据;外点可以被认为异常数据,即偏离正常范围很远、无法适应数学模型的数据。
{ ∣ d i ∣ < t , i = inlier; ∣ d i ∣ ≥ t , i = outlier; (1) \begin{cases}|d_i| < t, \text{i = inlier;} \\ |d_i| ≥ t, \text{i = outlier;} \\ \end{cases} \tag{1} { di<t,i = inlier;dit,i = outlier;(1)

Step3:寻找最优模型

统计inliers的数量,记为Si,定义数量门限为Tif Si≥T,则认为此模型是合格的模型。即可以用这Siinliers去重新估计模型*(re-estimate the model)if Si < T,则重复Algorithm1-3,重新计算模型、求inliersoutliers*,直到得到合格的模型。

由于之前的model是由ndata所估计得到,而全部数据计算得到的inliers的数量Si一定大于n。则此时所估计出的新模型的准确度一定高于之前用n个数据所估计的旧模型。

Step4:重复N次试验(repeat for N trials)

N次重复试验中,每次会存在一个Sij(1≤j≤N)。然后在此之中选择拥有最大的内点个数*Simax*的模型,作为最优估计模型。

这里存在两个问题

​ 1、如何判断两个门限tTt会影响内点个数,而T又会因环境不同而有不同取值。

​ 2、如何定义重复次数N

三、距离门限t的选择

假设数据 X = [ X 1 , X 2 ] X=[X_1, X_2] X=[X1,X2]服从方差为 σ \sigma σ的高斯分布。则其到模型的距离之平方服从卡方分布(chi-square distribution)。
X 1 s i 2 + X 2 s i 2 = d s i 2 ∼ χ 2 ( 2 ) (2) X_{1si}^2+X_{2si}^2=d_{si}^2 \sim \chi^2(2) \tag{2} X1si2+X2si2=dsi2χ2(2)(2)
其中, X 1 s X_{1s} X1s X 2 s X_{2s} X2s分别代表对数据 X X X的标准化后得到的二维数据, d s i d_{si} dsi是标准化后的距离。定义标准化门限距离 t s t_s ts,计算距离平方 d i s 2 < t s 2 d_{is}^2<t_s^2 dis2<ts2的概率,此概率满足下式累积分布函数(CDF):
F ( x ∣ k ) = P ( X ≤ x ) = 1 Γ ( m 2 ) ∫ 0 x t m 2 −

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值