随机抽样一致(RANSAC)

随机抽样一致(RANSAC)

一、引言

给定两个点p1与p2的坐标,确定这两点所构成的直线,要求对于输入的任意点p3,都可以判断它是否在该直线上。初中解析几何知识告诉我们,判断一个点在直线上,只需其与直线上任意两点点斜率都相同即可。实际操作当中,往往会先根据已知的两点算出直线的表达式(点斜式、截距式等等),然后通过向量计算即可方便地判断p3是否在该直线上。

生产实践中的数据往往会有一定的偏差。例如我们知道两个变量X与Y之间呈线性关系,Y=aX+b,我们想确定参数a与b的具体值。通过实验,可以得到一组X与Y的测试值。虽然理论上两个未知数的方程只需要两组值即可确认,但由于系统误差的原因,任意取两点算出的a与b的值都不尽相同。我们希望的是,最后计算得出的理论模型与测试值的误差最小。大学的高等数学课程中,详细阐述了最小二乘法的思想。通过计算最小均方差关于参数a、b的偏导数为零时的值。事实上,在很多情况下,最小二乘法都是线性回归的代名词。

遗憾的是,最小二乘法只适合与误差较小的情况。试想一下这种情况,假使需要从一个噪音较大的数据集中提取模型(比方说只有20%的数据时符合模型的)时,最小二乘法就显得力不从心了。例如下图,肉眼可以很轻易地看出一条直线(模式),但算法却找错了。
在这里插入图片描述

二、SANSAC算法过程

RANSAC算法的输入是一组观测数据(往往含有较大的噪声或无效点),一个用于解释观测数据的参数化模型以及一些可信的参数。RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:

(1)有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
(2)用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
(3)如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
(4)然后,用所有假设的局内点去重新估计模型(譬如使用最小二乘法),因为它仅仅被初始的假设局内点估计过。
(5)最后,通过估计局内点与模型的错误率来评估模型。
上述过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。

整个过程可参考下图:
在这里插入图片描述
在模型确定以及最大迭代次数允许的情况下,RANSAC总是能找到最优解。经过我的实验,对于包含80%误差的数据集,RANSAC的效果远优于直接的最小二乘法。

三、应用场景

RANSAC可以用于哪些场景呢?最著名的莫过于图片的拼接技术。优于镜头的限制,往往需要多张照片才能拍下那种巨幅的风景。在多幅图像合成时,事先会在待合成的图片中提取一些关键的特征点。计算机视觉的研究表明,不同视角下物体往往可以通过一个透视矩(3X3或2X2)阵的变换而得到。RANSAC被用于拟合这个模型的参数(矩阵各行列的值),由此便可识别出不同照片中的同一物体。可参考下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
另外,RANSAC还可以用于图像搜索时的纠错与物体识别定位。下图中,有几条直线是SIFT匹配算法的误判,RANSAC有效地将其识别,并将正确的模型(书本)用线框标注出来:
在这里插入图片描述

本文参考:https://www.cnblogs.com/weizc/p/5257496.html

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RANSACRandom Sample Consensus)是一种用于拟合模型并对含有噪声和异常值的数据进行鲁棒估计的算法。它的基本思想是通过迭代的方式从数据集中随机选择一部分样本,然后根据这些样本拟合模型,再根据拟合得到的模型评估其他样本是否符合该模型。通过迭代过程,RANSAC可以找到一个对异常值具有鲁棒性的拟合模型。 RANSAC的步骤如下: 1. 随机选择一部分样本,这部分样本称为内群(inliers)。 2. 根据内群拟合模型,得到模型的参数。 3. 对于剩余的样本,计算其与模型的误差,将误差小于一定阈值的样本称为内群,将误差大于阈值的样本称为离群(outliers)。 4. 判断当前模型的质量,可以通过判断内群的数量或者拟合误差的均值来评估模型的好坏。 5. 重复以上步骤多次,选择拟合误差最小或者内群最多的模型作为最终结果。 RANSAC的优点在于它能够有效地处理含有噪声和异常值的数据,对于不同类型的模型都可以使用。相比于最小二乘法,RANSAC可以捕捉到那些偏离中心的离群点,并将其排除在拟合过程之外,从而得到更准确的结果。因此,在一些对数据质量要求较高的应用中,RANSAC的效果往往优于最小二乘法。 参考资料: 基于OpenCV实现的RANSAC随机抽样一致性直线拟合_thequitesunshine007的博客-CSDN博客 如下图所示,由于最小二乘法拟合数据的时候是考虑所有的数据,所以最小二乘法的误差较大,而RANSAC算法是将那些噪声点设为离群点,就像下图中偏离中心的那些点,所以RANSAC得到的结果准确度较高,所以RANSAC的效果总是远优于最小二乘法。 RANSAC将数据分为内群数据和离群数据,离群数据也就是受噪声影响的数据。RANSAC假定,给定一组内群,存在一个程序,这个程序可以估算最佳解释或最适用于这一数据模型的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值