RANSC算法(随机样本一致性)
一、基本思想
??? 它是根據一組包含異常數據的樣本數據集,計算出數據的數學模型參數,得到有效樣本數據的算法。它于1981年由 Fischler和Bolles最先提出[1]。
?
二、算法描述
????(1)輸入:
??? 1、判斷樣本是否滿足模型的誤差容忍度t。t可以看作為對內點噪聲均方差的假設,對于不同的輸入數據需采用人工干預的方式預設合適的門限,且該參數對RANSAC性能有很大的影響;
??? 2、隨機抽取樣本集S的次數。該參數直接影響SC中樣本參與模型參數的檢驗 次數,從而影響算法的效率,因為大部分隨機抽樣都受到外點的影響;
??? 3、表征得到正確模型時,一致集S*的大小N。為了確保得到表征數據集P的正確模型,一般要求一致集足夠大;另外,足夠多的一致樣本使得重新估計的模型參數更精確。
??? 4、算法的迭代次數k。
??? 5、適應于數據的模型model。
??? 6、隨機在樣本抽樣的數目n。
????(2)算法流程:
??? 1、考慮一個最小抽樣集的勢為n的模型(n為初始化模型參數所需的最小樣本數)和一個樣本集P,集合P的樣本數num(P)>n,從P中隨機 抽取包含n個樣本的P的子集S初始化模型M;
??? 2、余集SC=P\S中與模型M的誤差小于某一設定閾值t的樣本集以及S構成S*。S*認為是內點集,它們構成S的一致集(Consensus Set);
??? 3、若#(S*)≥N,認為得到正確的模型參數,并利用集S*(內點inliers)采用最小二乘等方法重新計算新的模型M*;重新隨機抽取新的S,重復以上過程。
??? 4、在完成一定的抽樣次數后,若沒找到一致集則算法失敗,否則選取抽樣后得到的最大一致集判斷內外點,算法結束。
??? (3)輸出:
??? 1、best_model —— 跟數據最匹配的模型參數(如果沒有找到好的模型,返回null)
??? 2、best_consensus_set —— 估計出模型的數據點
??? 3、best_error —— 跟數據相關的估計出的模型錯誤
?
?三、優缺點
??? RANSAC的優點是它能魯棒的估計模型參數。例如,它能從包含大量局外點的數據集中估計出高精度的參數。RANSAC的缺點是它計算參數的迭代次數沒有上限;如果設置迭代次數的上限,得到的結果可能不是最優的結果,甚至可能得到錯誤的結果。RANSAC只有一定的概率得到可信的模型,概率與迭代次數成正比。RANSAC的另一個缺點是它要求設置跟問題相關的閥值。RANSAC只能從特定的數據集中估計出一個模型,如果存在兩個(或多個)模型,RANSAC不能找到別的模型。
?
四、應用
??? RANSAC算法經常用于計算機視覺,例如同時求解相關問題與估計立體攝像機的基礎矩陣。
?
五、偽代碼描述
??? 輸入:
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
六、優化策略
??? ①如果在選取子集S時可以根據某些已知的樣本特性等采用特定的選取方案或有約束的隨機選取來代替原來的 完全隨機選取;
??? ②當通過一致集S*計算出模型M*后,可以將P中所有與模型M*的誤差小于t的樣本加入S*,然后重新計算M*。
?
七、參考
http://www.cnblogs.com/tjulxh/archive/2011/12/31/2308921.html
http://blog.csdn.net/xufuyuan/article/details/7106040
總結
以上是生活随笔為你收集整理的RANSC算法(随机样本一致性)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象的多态性(1)
- 下一篇: 面向对象的多态性(2)