RANSAC(Random Sample Consensus)随机抽样检验一致性

转载请注明出处:

 

算法简介

RANSAC算法的基本假设是样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(outliers,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。

 

基本思想描述

RANSAC基本思想描述如下:

考虑一个最小抽样集的势为n的模型(n为初始化模型参数所需的最小样本数)和一个样本集P,集合P的样本数#(P)>n,从P中随机抽取包含n个样本的P的子集S初始化模型M

余集SC=P\S中与模型M的误差小于某一设定阈值t的样本集以及S构成S*S*认为是内点集,它们构成S的一致集(Consensus Set)

#(S*)≥N,认为得到正确的模型参数,并利用集S*(内点inliers)采用最小二乘等方法重新计算新的模型M*;重新随机抽取新的S,重复以上过程。

在完成一定的抽样次数后,若未找到一致集则算法失败,否则选取抽样后得到的最大一致集判断内外点,算法结束。

 

                                                以上内容摘自百度百科

下面用自己的理解说一下RANSAC

首先,RANSAC是一种估计系统模型的算法,既然是算法,我们需要搞清楚输入和输出是什么。RANSAC

输入:一堆样本(观测数据)和系统模型

输出:适用于这堆样本的系统模型最优参数

 

算法实现过程:

符号说明:

k:算法随机抽样检验次数

n:确定模型参数需要的最少样本数

p:输入样本总数

M:初始化的模型参数

pinlier每次迭代初始化的内点

M*:单次抽样检测优化后的模型参数

M**k次抽样优化的系统最优模型参数

RANSAC会有若干次抽样检测,次数由k决定,每一次抽样检测是为了得到M*,最后从k个M*中去最优的M*作为M**

单次抽样检测步骤如下

1 随机选取n个样本作为pinlier,用pinlier计算一个初始模型参数M.

M检查所用剩余样本,符合模型M的样本认为是内点,否则是外点。

:符合模型的含义是与模型的误差小于一定值。

把所有的内点,采用最小二乘法重新优化系统模型参数得到M*

抽样k次,选择最优的M*作为M**

:最优的含义是此模型参数使划分的局内点个数最多

如果迭代k次,最优模型参数划分的局内点太少,认为此次算法失败。

 

以上就是RANSAC的一般流程。本质上RANSAC就是最小二乘,随机了k次最小二乘,每次最小二乘之前,去掉一些本次估计认为的外点,只对内点进行最小二乘。

 

一个简单的例子

 

我们举个简单的例子-直线拟合,来说明一下,在具体应用中,RANSAC的参数含义。

下图是用于拟合直线含噪声的样本点,

RANSAC(Random Sample Consensus)随机抽样检验一致性_第1张图片

上述的参数,在直线拟合具体问题中,就变成了

k:算法随机抽样检验次数

n:确定模型y=ax+b中参数ab需要的最少样本数,这里是至少两对点,因此n=2

p:输入点的总数

M:初始化的ab参数

pinlier:每次迭代初始化的内点

M*:单次抽样检测优化后的ab

M**k次抽样优化的系统最优ab

RANSAC比直接最小二乘的优点是对噪声鲁棒性较强。直线拟合效果如下:

左图为最小二乘拟合,右图为RANSAC估计效果。

RANSAC(Random Sample Consensus)随机抽样检验一致性_第2张图片                    RANSAC(Random Sample Consensus)随机抽样检验一致性_第3张图片

你可能感兴趣的:(优化算法)