RANSAC(随机抽样一致性算法)
1. OverView
RANSAC(RANdom SAmple Consensus, 译作 随机抽样一致性算法)是由Fischler和Bolles于1981年最先提出。它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。
该算法在计算机视觉的匹配问题中(比如相机配准, 特征点匹配等)被用来寻找最佳的匹配模型。
2. RANSAC算法
对于一组观测数据和一个用于解释观测数据的参数化模型, 所以满足该模型的点为局内点,反之则为局外点。
RANSAC算法的输入是一组观测数据(往往含有较大的噪声或无效点),一个用于解释观测数据的参数化模型以及一些可信的参数。RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:
- 有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
- 用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
- 如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
然后,用所有假设的局内点去重新估计模型(譬如使用最小二乘法),因为它仅仅被初始的假设局内点估计过。 - 最后,通过估计局内点与模型的错误率来评估模型。
上述过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。
举一个具体的例子, 比如利用RANSAC进行 SIFT 特征点匹配。
- 在我们的匹配点中随机选择4对点。这四对叫做局内点或者内点,而其他的匹配点叫做局外点或者外点
- 根据4对内点得到内部的单应性矩阵
- 使用这个计算出的单应性矩阵测试所有其他外点,通过一个阈值将所有的外点分为两部分:
- a 所有满足这个单应性的外点被归为是新的内点
- b 而所有不满足的外点被归为新的外点
- 获取我们所有的内点(新的内点+旧的内点)并转到步骤2
- 只要没有更改或我们已经迭代步骤2-步骤4 k次,结束迭代。
最终的单应矩阵将是我们想要的。
Given:
data – a set of observations
model – a model to explain observed data points
n – minimum number of data points required to estimate model parameters
k – maximum number of iterations allowed in the algorithm
t – threshold value to determine data points that are fit well by model
d – number of close data points required to assert that a model fits well to data
Return:
bestFit – model parameters which best fit the data (or nul if no good model is found)
iterations = 0
bestFit = nul
bestErr = something really large
while iterations < k {
maybeInliers = n randomly selected values from data
maybeModel = model parameters fitted to maybeInliers
alsoInliers = empty set
for every point in data not in maybeInliers {
if point fits maybeModel with an error smaller than t
add point to alsoInliers
}
if the number of elements in alsoInliers is > d {
% this implies that we may have found a good model
% now test how good it is
betterModel = model parameters fitted to all points in maybeInliers and alsoInliers