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