RANSAC是计算机视觉中非常重要的算法,对于真实世界含有噪声数据的模型拟合非常有效。
CVPR2006曾经专门有一个RANSAC Workshop:25 Years of RANSAC(http://cmp.felk.cvut.cz/ransac-cvpr2006/)。
说它是算法,但其实它更像一种思想,使用不同的模型假设能演变出不同的算法。非常值得学习~
本文来自视觉IMAX。
一 前言
在很多计算机视觉任务中,需要估计本质矩阵或者基本矩阵。但真实世界的数据往往含有噪声,那么如何稳健的估计呢?正是这篇文章重点介绍的内容。
基本矩阵求解方法主要有:
1)直接线性变换法
a)8点法
b)最小二乘法
2)基于RANSAC的鲁棒方法。
先简单介绍一下直接线性变换法:


注:
三个红线标注的三个等式等价。
在上述分析过程中,如果n>=8时,最小二乘法求解是否是最优估计呢?
接下来,我们重点探讨一下这个问题。
二 稳健估计
2.1 稳健的定义
稳健(robust):对数据噪声的敏感性。

对于上述采样,如果出现外点(距离正确值较远),将会影响实际估计效果。
2.2 RANSAC——随机一致性采样
RANSAC主要解决样本中的外点问题,最多可处理50%的外点情况。
基本思想:
RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:
有一个模型适用于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。
最后,通过估计局内点与模型的错误率来评估模型.
这个过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为它比现有的模型更好而被选用。

对上述步骤,进行简单总结如下:

举个例子:使用RANSAC——拟合直线






2.3 关于OpenCV中使用到RANSAC的相关函数
1. solvePnPRansac
2. findFundamentalMat
加群交流
关注计算机视觉与机器学习技术,欢迎加入52CV群,扫码添加52CV君拉你入群,
(请务必注明:加群)

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:928997753。
(不会时时在线,如果没能及时通过验证还请见谅)
更多技术干货,详见:
新年快乐!"我爱计算机视觉"干货集锦与新年展望