隨機抽樣一致演算法(random
sample
consensus,ransac),採用迭代的方式從一組包含離群的被觀測資料中估算出數學模型的引數。
資料分兩種:有效資料(inliers)和無效資料(outliers)。偏差不大的資料稱為有效資料,偏差大的資料是無效資料。如果有效資料佔大多數,無效資料只是少量時,我們可以通過最小二乘法或類似的方法來確定模型的引數和誤差;如果無效資料很多(比如超過了50%的資料都是無效資料),最小二乘法就失效了,我們需要新的演算法
ransac的基本假設:1、」
內群」資料可以通過幾組模型的引數來敘述其分別,而「離群」資料則是不適合模型化的資料
2、資料會受雜訊影響,雜訊指的是離群,例如從極端的雜訊或錯誤解釋有關資料的測量或不正確的假設
3、ransac假定,給定一組(通常很小)的內群,存在乙個程式,這個程式可以估算最佳解釋或最適用於這一資料模型的引數
概述:1、
在資料中隨機選擇幾個點設定為內群
2、計算適合內群的模型
3、把其他剛才沒有選到的點帶入剛才建立的模型中,計算是否為內群
4、記下內群數量
5、重複以上步驟多次
6、比較哪次計算中內群數量最多,內群最多的那次所建的模型就是我們所要求的解
這裡有幾個問題:
1、一開始的時候我們要隨機選擇多少點
2、以及要重複多少次
演算法:
偽**的演算法如下所示:
輸入:data
一組觀測資料
model
適應於資料的模型
n 適應於模型的最小資料個數
k 演算法的迭代次數
t 用於決定資料是否適應於模型的閾值
d 判定模型是否適用於資料集的資料數目
best_model
與資料最匹配的模型引數
(沒有返回
null)
best_consensus_set
估計出模型的資料點
best_error
跟資料相關的估計出的模型錯誤
iterations = 0
best_model = null
best_consensus_set = null
best_error = 無窮大
while ( iterations
< k )
maybe_inliers = 從資料集中隨機選擇n個點
maybe_model = 適合於maybe_inliers的模型引數
consensus_set = maybe_inliers
for ( 每個資料集中不屬於maybe_inliers的點 )
if ( 如果點適合於maybe_model,且錯誤小於t )
將點新增到consensus_set
if ( consensus_set中的元素數目大於d )
已經找到了好的模型,現在測試該模型到底有多好
better_model = 適合於consensus_set中所有點的模型引數
this_error = better_model究竟如何適合這些點的度量
if ( this_error
< best_error )
我們發現了比以前好的模型,儲存該模型直到更好的模型出現
best_model =
better_model
best_consensus_set = consensus_set
best_error =
this_error
增加迭代次數
返回 best_model, best_consensus_set, best_error
引數決定:
假設每個點是真正內群的概率是w
:w =
真正內群的數目
/資料總共的數量
通常我們不知道w
是多少,w的
n次方是所選擇的
n個點都是內群的概率,
1-w^n
所選擇的
n個點至少有乙個不是內群的概率,(
1-w^n)^k
表示重複
k次都沒有全部的
n個點都是內群的概率
這邊定演算法跑k
次以後成功的概率是
p,那麼,
1-p = (1 - w^n)^k
p = 1 - 1 - w^n)^k
所以如果希望成功率提高,p = 0.99,當n
不變時,
k越大,
p越大;當
w 不變時,
n越大,所需的
k就越大,通常,
w位置,所以選小一點比較好
應用:rasac
常被用在電腦視覺,例如對應點問題和估算立體攝影機雙眼相對點的基本矩陣
優缺點:
ransac
演算法的優點是能魯棒的估計模型引數。例如,他能從包含大量局外點的資料集中估計出高精度的引數。
缺點是它計算引數的迭代次數沒有上限,如果設定迭代次數的上限,得到的結果可能不是最優的結果,甚至可能得到錯誤的結果。
ransac只有一定的概率得到的可信的模型,概率與迭代次數成正比。另乙個缺點是它要求設定跟問題相關的閾值,
ransac職能從特定的資料集中估計出乙個模型,如果存在兩個(或多個)模型,
ransac
不能找到別的模型
RANSAC演算法詳解
另參考 給定兩個點p1與p2的座標,確定這兩點所構成的直線,要求對於輸入的任意點p3,都可以判斷它是否在該直線上。初中解析幾何知識告訴我們,判斷乙個點在直線上,只需其與直線上任意兩點點斜率都相同即可。實際操作當中,往往會先根據已知的兩點算出直線的表示式 點斜式 截距式等等 然後通過向量計算即可方便地...
RANSAC演算法詳解
另參考 給定兩個點p1與p2的座標,確定這兩點所構成的直線,要求對於輸入的任意點p3,都可以判斷它是否在該直線上。初中解析幾何知識告訴我們,判斷乙個點在直線上,只需其與直線上任意兩點點斜率都相同即可。實際操作當中,往往會先根據已知的兩點算出直線的表示式 點斜式 截距式等等 然後通過向量計算即可方便地...
RANSAC演算法應用
在對資料進行建模時,我們往往會遇到資料中存在異常資料 outlier,一般稱為外點 的情況,如圖,用一條直線擬合圖中的點,其中左下和右上的點明顯是外點。此時使用最小二乘法,則會由於外點的存在偏離正確模型較多,如下圖,因此我們需要找出並剔除這些外點,從而得到乙個較好的模型。ransac random ...