文章目录
- RANSAC简介
- RANSAC算法
- Ransac在3D视觉中的用法
- 直线拟合
- 单应性矩阵拟合
- RANSAC的优缺点
- RANSAC的优点
- RANSAC的缺点
- RANSAC在弯曲场景中的缺点:
- RANSAC适用场景
RANSAC简介
RANSAC是 RANdom SAmple Consensus 的缩写,中文翻译叫随机采样一致。它可以从一组观测数据中,找出符合某些数学模型的样本集,并且估计出这个数学模型的参数。其中数据点包括inlier,outlier。outlier对模型的估计没有价值,因此该方法也可以叫做outlier检测方法。这是一种非确定性算法,因为它是在一定概率下得到一个合理的结果,当迭代次数增加,概率也会增加。
深入点讨论,有一组观测数据,要建立一个模型来拟合数据,我们第一步要做的,肯定是用一个标准对数据进行筛选,去除噪声点,让数据尽量干净和准确。但是如果我们没有一个合适的筛选标准,该怎么办呢?我们可以假设:观测数据中除了外点(噪声),肯定存在内点(准确点),而且内点的个数够我们用来拟合一个模型(比如拟合一条直线,至少要两个数据点)。有了这个假设,我们可以从观测数据中随机挑选出n个数据点,用这n个点来拟合模型,然后对这个模型进行评价。如果通过迭代,反复重复这个过程,只要迭代次数过大,我们随机挑选出来的n个样本点是有可能全部是内点的,再配合上模型评价,就能找到最优的拟合模型。这就是ransac的主要假设和思想,官方叙述如下:
- RANSAC的基本假设是 “内群”数据可以通过几组模型参数来叙述其数据分布,而“离群”数据则 是不适合模型化的数据。 数据会受噪声影响, 噪声指的是离群:例如从极端的噪声, 错误解释有关数据的测量, 或不正确的假设。RANSAC假定,给定一组(通常很小的)内群,存在一个 程序,这个程序可以估算最佳解释或最适用于这一数据模型的参数。
- RANSAC是一种思想,一个求解已知模型的参数的框架。它不限定某一特定的问题,可以是计算机视觉的问题,同样也可以是统计数学,甚至可以是经济学领域的模型参数估计问题。
- RANSAC是一种迭代的方法,用来在一组包含离群的被观测数据中估算出数学模型的参数。 RANSAC 是一个非确定性算法,在某种意义上说,它会产生一个在一定概率下合理的结果,其允许使用更多次的迭代来使其概率增加。
此RANSAC算法在1981年由Fischler和Bolles首次提出。最基本的假设便是数据中是有inlier,例如:其可以用一些参数模型来描述,尽管可能有些微噪音,以及outlier不能用模型拟合。outlier一般噪音极大或者由不正确的假设得到的错误测量。RANSAC同时也假设在给定的inlier情况下,存在一个过程可以估计好参数模型并且可以很好地拟合这些数据。
举个例子,如下图所示,这些点是观测数据,给定的数学模型是圆形和直线,我们想从这些观测数据中找出圆形和直线,并且估计出它们的几何参数。
RANSAC算法
下面介绍一下RANSAC算法:
输入:观测数据data,数学模型models;输出是匹配data的数学模型match_models和对应的样本集sub_data
- 随机采样data中的一些样本sub_data
- 用数学模型match_model去匹配样本集sub_data,估计出数学模型的参数
- 评价估计出来的match_model,如果可以接受,则把它放入match_models,并且从原始观测数据中剔除对应的样本集sub_data
- 迭代步骤1-3,直到估计出了所有的数学模型,或者迭代次数到了最大值
RANSAC算法是一类模式识别方法的框架,算法步骤里的具体内容是需要根据实际情况来实例化的。
以下是RANSAC工作原理的基本概述:
1.随机选择数据的子集: 随机选择整个数据集的一个子集。此子集的大小取决于您尝试拟合的模型。例如,如果你试图拟合一条线,你应该选择两个数据点(因为两个点唯一地决定了一条线)。
2.拟合模型: 使用选定的数据子集来拟合模型。对于直线示例,您可以找到穿过两个随机选择的点的直线。
3.确定Inliers: 计算在一定的容差内有多少剩余数据点适合该模型。那些这样做的人被认为是失败者;那些没有的被认为是异常值。
4.重复: 返回步骤1,重复该过程预定次数的迭代,或者直到满足某个其他标准。
5.选择最佳模型: 在所有迭代完成后,选择具有最大内联数的模型。
6.优化模型(可选): 有时,在使用初始RANSAC迭代找到最佳模型后,会执行第二步,在该步骤中,使用所有inlier来优化模型。
RANSAC的主要优点是其鲁棒性。即使数据集有大量异常值,它也可以提供准确的结果。然而,它不能保证找到最佳模型,并且其性能可能受到预定义迭代次数和容差水平的影响。
Ransac在3D视觉中的用法
Ransac最主要的作用主要包括直线拟合,平面拟合,单应性矩阵拟合等。
直线拟合
直线拟合是指用连续曲线近似地刻画或比拟平面上离散点组所表示的坐标之间的函数关系。更广泛地说,空间或高维空间中的相应问题亦属此范畴。
假设我们知道两个变量X与Y之间呈线性关系,Y=aX+b,我们想确定参数a与b的具体值。通过实验, 可以得到一组X与Y的测试值。虽然理论上两个未知数的方程只需要两组值即可确认,但由于系统误差的原因,任意取两点算出的a与b的值都不尽相同。通常情况下,我们可以采用最小二乘法拟合出直线方程(最小二乘法:通过计算最小均方差关于参数a、b的偏导数为零时的值)。但是最小二乘法只适合于误差较小的情况,如果测量数据中外点较多,误差很大,就需要采用Ransac算法。
单应性矩阵拟合
在进行图像匹配,全景拼接等时,常会用到单应性矩阵。例如在做全景拼接时,对于同一个场景,相机在不同角度拍摄了两张照片,一般先寻找两幅图片的匹配特征点,然后通过匹配特征点的对应关系计算出一个矩阵,这个矩阵就是单应性矩阵,利用这个矩阵就能将两张图片组合在一起。所以单应矩阵描述的是两组坐标点的关系,即:
[ x y 1 ] = H [ X Y 1 ] \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = H \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix} xy1 =H