隨機抽樣一致性(RANSAC)算法可以有效的剔除特徵匹配中的錯誤匹配點。html
實際上,RANSAC可以有效擬合存在噪聲模型下的擬合函數。實際上,RANSAC算法的核心在於將點劃分爲「內點」和「外點」。在一組包含「外點」的數據集中,採用不斷迭代的方法,尋找最優參數模型,不符合最優模型的點,被定義爲「外點」。這就是RANSAC的核心思想。算法
RANSAC原理函數
OpenCV中濾除誤匹配對採用RANSAC算法尋找一個最佳單應性矩陣H,矩陣大小爲3×3。RANSAC目的是找到最優的參數矩陣使得知足該矩陣的數據點個數最多,一般令h33=1來歸一化矩陣。因爲單應性矩陣有8個未知參數,至少須要8個線性方程求解,對應到點位置信息上,一組點對能夠列出兩個方程,則至少包含4組匹配點對。測試
RANSAC算法從匹配數據集中隨機抽出4個樣本並保證這4個樣本之間不共線,計算出單應性矩陣,而後利用這個模型測試全部數據,並計算知足這個模型數據點的個數與投影偏差(即代價函數),若此模型爲最優模型,則對應的代價函數最小。spa
損失函數:.net
也就是經過隨機抽樣求解獲得一個矩陣,而後驗證其餘的點是否符合模型,而後符合的點成爲「內點」,不符合的點成爲「外點」。下次依然從「新的內點集合」中抽取點構造新的矩陣,從新計算偏差。最後偏差最小,點數最多就是最終的模型。3d
RANSAC算法步驟:htm
RANSAC算法步驟: blog
1. 隨機從數據集中隨機抽出4個樣本數據 (此4個樣本之間不能共線),計算出變換矩陣H,記爲模型M;get
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