隨機抽樣一致性(RANSAC)演算法能夠有效的剔除特徵匹配中的錯誤匹配點。
實際上,RANSAC能夠有效擬合存在噪聲模型下的擬合函式。實際上,RANSAC演算法的核心在於將點劃分為“內點”和“外點”。在一組包含“外點”的資料集中,採用不斷迭代的方法,尋找最優引數模型,不符合最優模型的點,被定義為“外點”。這就是RANSAC的核心思想。
RANSAC原理
OpenCV中濾除誤匹配對採用RANSAC演算法尋找一個最佳單應性矩陣H,矩陣大小為3×3。RANSAC目的是找到最優的引數矩陣使得滿足該矩陣的資料點個數最多,通常令h33=1來歸一化矩陣。由於單應性矩陣有8個未知引數,至少需要8個線性方程求解,對應到點位置資訊上,一組點對可以列出兩個方程,則至少包含4組匹配點對。
RANSAC演算法從匹配資料集中隨機抽出4個樣本並保證這4個樣本之間不共線,計算出單應性矩陣,然後利用這個模型測試所有資料,並計算滿足這個模型資料點的個數與投影誤差(即代價函式),若此模型為最優模型,則對應的代價函式最小。
損失函式:
也就是通過隨機抽樣求解得到一個矩陣,然後驗證其他的點是否符合模型,然後符合的點成為“內點”,不符合的點成為“外點”。下次依然從“新的內點集合”中抽取點構造新的矩陣,重新計算誤差。最後誤差最小,點數最多就是最終的模型。
RANSAC演算法步驟:
RANSAC演算法步驟:
1. 隨機從資料集中隨機抽出4個樣本資料 (此4個樣本之間不能共線),計算出變換矩陣H,記為模型M;
2. 計算資料集中所有資料與模型M的投影誤差,若誤差小於閾值,加入內點集 I ;
3. 如果當前內點集 I 元素個數大於最優內點集 I_best , 則更新 I_best = I,同時更新迭代次數k ;
4. 如果迭代次數大於k,則退出 ; 否則迭代次數加1,並重覆上述步驟;
注:迭代次數k在不大於最大迭代次數的情況下,是在不斷更新而不是固定的;
其中,p為置信度,一般取0.995;w為"內點"的比例 ; m為計算模型所需要的最少樣本數=4;
關於RANSAC演算法的思想,可以用下圖表示
也就是RANSAC演算法的本質是:在存在噪聲的資料中,我們求解一個模型,使得非噪聲資料可以用該模型表示,而噪聲資料被排除在外。
分享三個講解RANSAC演算法的網址:
https://www.csdn.net/gather_2d/MtjaMg3sNDAwNS1ibG9n.html
https://www.cnblogs.com/xrwang/archive/2011/03/09/ransac-1.html
https://blog.csdn.net/yanghan742915081/article/details/83005442