RANSAC算法理解

简介: RANSAC算法理解

RANSAC(RAndom SAmple Consensus,随机采样一致)算法在很多方面如图像匹配、曲线/平面拟合取得了良好的应用。这里以笔记的形式对其进行一个简要的介绍总结。


RANSAC算法的一个基本的假设是:一组数据由“内点”(inliers)和“外点”(outliers)组成,其中“内点”就是组成模型参数的数据,而“外点”就是不适合模型的数据。


RANSAC算法的目标就是在一组含有少量“内点”,大量“外点”的数据中,估计出一个符合“内点”数据的模型。

RANSAC算法基本思想

假设存在一个样本集 P ,考虑一个能够估计出模型 M所需的大小为 n最小抽样子集 S(比如说直线拟合,则抽样子集大小 n = 2,平面拟合,则抽样子集大小 n = 3);


使用这个抽样选取的子集进行计算初始化数据模型;


针对余集 S C = P − S,代入步骤2中所估计出的模型,若其误差小于设置的阈值 t 则认为其是内点,所有的内点组成内点集 S ∗

(也成为子集 S的一致集)统计个数。


比较此次迭代和之前迭代中内点集中内点个数的大小,记录较大“内点”数的模型参数和“内点”数。


重复上述步骤1-4的过程,直到当前迭代已经足够好了,即内点集 S ∗ 的大小 N大于一定的阈值 N t 则认为此数据模型符合要求。并利用 S ∗ 中的内点采用最小二乘等方法进行重新计算数据模型 M ∗。

讨论

由上述过程中,我们可以了解到在RANSAC算法需要设置以下四个参数:


抽样子集大小 n


用于决定数据是否适应于模型的误差阀值 t


判断内点集 S ∗的大小是否适用于数据集的阈值 N t


迭代次数 K

分别对其进行讨论:

抽样子集大小 n

其中抽样子集的大小 n可以通过模型的类型进行判断,如直线拟合选取2个点,平面选取3个点。


误差阀值 t

可以根据适用模型需要自主设置。比如说曲线拟合的偏差、图像匹配中的错误匹配点对等等。


判断内点集 S ∗的大小是否适用于数据集的阈值 N t

由于RANSAC算法是基于数据驱动的模型估计方法,所以在处理粗差小于50%的情况时,其效果比较可靠。因此,内点集 S ∗  大小的阈值 N t可以设置为数据集总体大小的一半。


迭代次数 K

假设在数据中,“内点”个数的占比为 W

                   image.png


实际实验过程中,我们并不会知道 W W W的值,但是可以给出一个鲁棒的经验值。

对于每一次迭代过程中选取 n个点作为子集 S,则子集 S中至少存在一个点不为“内点”的概率为:

                                      image.png

那么 K次迭代中,每次都至少有一个“外点”的情况所发生的概率为:

                                       image.png


即,能够在 K 次迭代中正确选取 n个点,且都为“内点”的概率为:

                                       image.png

这个 P P P值就代表了我们所期待RANSAC算法能够正确计算出数据模型的概率,可以根据自己的需求进行设置。

变换上式:

                           image.png

上式中 W W W可以根据经验值进行设置, P是我们所期待的正确计算数据模型的概率,可以自主设置,这样就得到了迭代次数。

当然,如果我们事先实在不知道 W的值,可以使用自适应迭代次数的方法。即开始时设定一个较大的迭代次数,然后每次更新模型参数估计的时候,用当前的“内点”比值代入公式中的 W来估算出迭代次数。

目录
相关文章
|
4月前
|
存储 算法 数据可视化
基于harris角点和RANSAC算法的图像拼接matlab仿真
本文介绍了使用MATLAB2022a进行图像拼接的流程,涉及Harris角点检测和RANSAC算法。Harris角点检测寻找图像中局部曲率变化显著的点,RANSAC则用于排除噪声和异常点,找到最佳匹配。核心程序包括自定义的Harris角点计算函数,RANSAC参数设置,以及匹配点的可视化和仿射变换矩阵计算,最终生成全景图像。
|
9月前
|
算法 C++ 芯片
RANSAC算法拟合平面实现(附代码c++)
RANSAC算法拟合平面实现(附代码c++)
336 0
|
算法 计算机视觉
基于SURF+Affine+Ransac+ICP算法的三维点云室内场景重建matlab仿真
基于SURF+Affine+Ransac+ICP算法的三维点云室内场景重建matlab仿真
471 0
|
机器学习/深度学习 资源调度 算法
【图像隐藏】基于小波变换+SURF、RANSAC、LT码、CRC码多种算法实现图像隐藏(抗多种攻击)matlab源码
【图像隐藏】基于小波变换+SURF、RANSAC、LT码、CRC码多种算法实现图像隐藏(抗多种攻击)matlab源码
|
算法 计算机视觉
RANSAC算法在图像拼接上的应用的实现
关于算法原理请参考《基于SURF特征的图像与视频拼接技术的研究》。一、问题提出         RANSAC的算法原理并不复杂,比较复杂的地方在于“建立模型”和“评价模型”。我们经常看到的是采用“直线”或者“圆”作为基本模型进行“建立”,而采用所有点到该“直线”或“圆”的欧拉距离作为标准来“评价”(当然是越小越好)。
2607 0
|
12天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
12天前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
|
1月前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真
|
13天前
|
资源调度 算法
基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
本课题研究基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,并对比UKF、EKF、迭代UKF和迭代EKF的控制效果。倒立摆作为典型的非线性系统,适用于评估不同滤波方法的性能。UKF采用无迹变换逼近非线性函数,避免了EKF中的截断误差;EKF则通过泰勒级数展开近似非线性函数;迭代EKF和迭代UKF通过多次迭代提高状态估计精度。系统使用MATLAB 2022a进行仿真和分析,结果显示UKF和迭代UKF在非线性强的系统中表现更佳,但计算复杂度较高;EKF和迭代EKF则更适合维数较高或计算受限的场景。
|
15天前
|
算法
基于SIR模型的疫情发展趋势预测算法matlab仿真
该程序基于SIR模型预测疫情发展趋势,通过MATLAB 2022a版实现病例增长拟合分析,比较疫情防控力度。使用SIR微分方程模型拟合疫情发展过程,优化参数并求解微分方程组以预测易感者(S)、感染者(I)和移除者(R)的数量变化。![]该模型将总人群分为S、I、R三部分,通过解析或数值求解微分方程组预测疫情趋势。