ransac 算法 学习

 一.RANSAC是什么?

   问题:the goal is to determine the points in the space that project onto an image into a set of landmarks with known locations.

该算法来解决3D重建中的位置确定问题(Location Determination Problem, LDP)。

目前RANSAC算法被广泛用于计算机视觉领域中图像匹配、全景拼接等问题--------

比如从数对匹配的特征点中求得两幅图片之间的射影变换矩阵,OPENCV实现stitching类时即使用了该算法。 

概念词汇:

局内点近似的被直线所通过

局外点远离于直线。

二.RANSAC 原理

 

三.伪代码 

伪码形式的算法如下所示: 
输入: 
data —— 一组观测数据 
model —— 适应于数据的模型 
n —— 适用于模型的最少数据个数 
k —— 算法的迭代次数 
t —— 用于决定数据是否适应于模型的阀值 
d —— 判定模型是否适用于数据集的数据数目 
输出: 
best_model —— 跟数据最匹配的模型参数(如果没有找到好的模型,返回null) 
best_consensus_set —— 估计出模型的数据点 
best_error —— 跟数据相关的估计出的模型错误

 

 

 

三.实际应用

RANSAC是“RANdom SAmple Consensus(随机抽样一致)”的缩写。

本质:它可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数

时间:该算法最早由Fischler和Bolles于1981年提出。

***********************************************************************************************************************************

MATLAB实验:

一组二维点(包含误差很大的点)求模型型。原因:如果直接用最小二乘法,求出的模型是不对的

好的方法:用RANSAC算法剔除误差较大的点,获得最大的支持集合,用此最大支持集合求出最佳的模型。
 

RANSAC算法

输入:是一组观测数据,一个用于解释观测数据的参数化模型以及一些可信的参数

RANSAC通过反复选择(迭代)数据中的一组随机子集来达成目标。

 

在模型确定以及最大迭代次数允许的情况下,RANSAC总是能找到最优解。经过我的实验,对于包含80%误差的数据集,RANSAC的效果远优于直接的最小二乘法。

不同视角下物体往往可以通过一个透视矩(3X3或2X2)阵的变换而得到。

RANSAC被用于拟合这个模型的参数(矩阵各行列的值),由此便可识别出不同照片中的同一物体。

有几条直线是SIFT匹配算法的误判,RANSAC有效地将其识别,并将正确的模型(书本)用线框标注出来。

1.初中解决方法:

确定两点中的一条直线,以及平面内一点是否在在直线上?

2.几何知识:只需其与直线上任意两点点斜率都相同即可。

实际:往往会先根据已知的两点算出直线的表达式,然后通过向量计算即可方便地判断p3是否在该直线上。 

生产实践中的数据往往会有一定的偏差。

3.两个变量X与Y之间呈线性关系,Y=aX+b,我们想确定参数a与b的具体值。

通过实验,可以得到一组X与Y的测试值。虽然理论上两个未知数的方程只需要两组值即可确认,但由于系统误差的原因,任意取两点算出的a与b的值都不尽相同。

4.详细阐述了最小二乘法的思想。通过计算最小均方差关于参数a、b的偏导数为零时的值。事实上,在很多情况下,最小二乘法都是线性回归的代名词。

1.原理

 

 

 

 

 

2.公式

 

 

 

3.实现

 

你可能感兴趣的:(ransac 算法 学习)