一.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.实现