RANSAC简介
ransac是RANdom SAmple Consensus的简称,它是根据一组包含异常数据的样本数据集,通过迭代的方法计算出数据的数学模型参数,得到有效样本数据的非确定性的算法。它于1981年由 Fischler和Bolles最先提出。
对于RANSAC算法有一个基本的假设:样本中包含正确数据(inliers,符合模型的数据)和异常数据(Outliers,不符合模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。同时RANSAC也假设, 给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。
RANSAC算法的输入是一组观测数据(往往含有较大的噪声或无效点),一个用于解释观测数据的参数化模型以及一些可信的参数。RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验
1.有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
2.用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
3.如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
4.然后,用所有假设的局内点去重新估计模型(譬如使用最小二乘法),因为它仅仅被初始的假设局内点估计过。
5.最后,通过估计局内点与模型的错误率来评估模型。
利用RANSAC筛选sift特征点匹配
在sift特征点匹配中,同一平面上的物体在不同方向上的成像有一个投射变换的过程。关于投射变换:
投射变换的变换矩阵为一个3×3的矩阵,因此需要4对匹配点来计算变换矩阵。
RANSAC算法在SIFT特征筛选中的主要流程是:
(1) 从样本集中随机抽选一个RANSAC样本,即4个匹配点对
(2) 根据这4个匹配点对计算变换矩阵M
(3) 根据样本集,变换矩阵M,和误差度量函数计算满足当前变换矩阵的一致集consensus,并返回一致集中元素个数
(4) 根据当前一致集中元素个数判断是否最优(最大)一致集,若是则更新当前最优一致集
(5) 更新当前错误概率p,若p大于允许的最小错误概率则重复(1)至(4)继续迭代,直到当前错误概率p小于最小错误概率
筛选效果
在sift论文中,作者已经使用了一种筛选条件d0<0.2d1,这种条件能过滤大部分错误匹配,为了方便查看RANSAC的筛选效果,我这里将这个筛选条件改为d0<0.5d1,这样可以使错误匹配更多。由于匹配点过多,在程序里设置了最多显示80对匹配点,方便观
察。RANSAC算法筛选前:
RANSAC算法筛选后:
从图中可以看到RANSAC对之前的一些错误匹配进行了去除,除此之外,还对电脑键盘部分的正确匹配进行的筛除。原因是因为不同平面上的点进行透视变换所对应的变换矩阵不一样,这一点也是我看到的那些博客所没有提到的,我们使用RANSAC算法更多的是用于图像拼接,但是如果要达到好的图像拼接效果,还是要让所拼接的图像尽量在同一平面。我们这里由RANSAC算法筛选的就是每对特征点对应的变换矩阵。
参考:
来源:https://blog.csdn.net/qq_40692109/article/details/102720499