随机抽样一致
此条目翻译品质不佳。 (2011年11月17日) |
随机抽样一致算法(RANdom SAmple Consensus,RANSAC)。它采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数。 RANSAC是一个非确定性算法,在某种意义上说,它会产生一个在一定概率下合理的结果,而更多次的迭代会使这一概率增加。此RANSAC算法在1981年由Fischler和Bolles首次提出。
RANSAC的基本假设是
范例
这里用一个简单的例子来说明,在一组数据点中找到一条最适合的线。假设,此有一组集合包含了内点群以及外点群,其中内点群包含可以被拟合到线段上的点,而外点群则是无法被拟合的点。如果我们用简单的最小二乘法来找此线,我们将无法得到一条适合于内点群的直线,因为最小二乘法会受外点群影响而影响其结果。而用RANSAC,可以只由内点群来计算出模型,而且概率还够高。然而,RANSAC无法保证结果一定最好,所以必须小心选择参数,使其能有足够的概率。
-
包含许多离群的一组数据,要找一条最适合的线。
-
RANSAC找到的线,离群值对结果没影响(蓝色点为内群,红色点为离群)
概述
- 在数据中随机选择若干个点设定为内点群
- 计算拟合内点群的模型
- 把其它刚才没选到的点带入刚才建立的模型中,计算是否属于内点群
- 记下内点群数量
- 重复以上步骤
- 比较哪次计算中内点群数量最多,内点群最多的那次所建的模型就是我们所要求的解
这里有几个问题
- 一开始的时候我们要随机选择多少点(n)
- 以及要重复做多少次(k)
参数决定
假设每个点是真正内点群的几率是 ,则:
- = 真正内点群的数目 / 数据总数
通常我们不知道 是多少, 是所选择的 个点都是内点群的几率, 是所选择的 个点至少有一个不是内点群的几率, 是表示重复 次都没有全部的 个点都是内点群的几率,假设算法跑 次以后成功的几率是 ,那么:
所以如果希望成功几率高, , 当 不变时, 越大, 越大, 当 不变时, 越大,所需的 就越大, 通常 未知,所以 选小一点比较好。
应用
参考资料
- Martin A. Fischler and Robert C. Bolles. Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography. Comm. of the ACM. June 1981, 24 (6): 381–395. doi:10.1145/358669.358692.
- David A. Forsyth and Jean Ponce. Computer Vision, a modern approach. Prentice Hall. 2003. ISBN 0-13-085198-1.
- Richard Hartley and Andrew Zisserman. Multiple View Geometry in Computer Vision 2nd. Cambridge University Press. 2003.
- P.H.S. Torr and D.W. Murray. The Development and Comparison of Robust Methods for Estimating the Fundamental Matrix. International Journal of Computer Vision. 1997, 24 (3): 271–300. doi:10.1023/A:1007927408552.
- Ondrej Chum. Two-View Geometry Estimation by Random Sample and Consensus (PDF). PhD Thesis. 2005. (原始内容 (PDF)存档于2009-08-16).
- Sunglok Choi, Taemin Kim, and Wonpil Yu. Performance Evaluation of RANSAC Family (PDF). In Proceedings of the British Machine Vision Conference (BMVC). 2009 [2011-11-17]. (原始内容存档 (PDF)于2020-08-31).
外部链接
- RANSAC Toolbox for MATLAB (页面存档备份,存于互联网档案馆). A research (and didactic) oriented toolbox to explore the RANSAC algorithm in MATLAB. It is highly configurable and contains the routines to solve a few relevant estimation problems.
- Implementation in C++ (页面存档备份,存于互联网档案馆) as a generic template.
- RANSAC for Dummies (页面存档备份,存于互联网档案馆) A simple tutorial with many examples that uses the RANSAC Toolbox for MATLAB.
- 25 Years of RANSAC Workshop (页面存档备份,存于互联网档案馆)
- ([//web.archive.org/web/20150515081026/http://www.csse.uwa.edu.au/~pk/Research/MatlabFns/#robust 页面存档备份,存于互联网档案馆) Source code for RANSAC in MATLAB]