隨機抽樣一致
此條目翻譯品質不佳。 (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]