在求解Fundamental的時候,Opencv有提供許多種求解方式,這邊舉八點法為例子。
當我們知道八個點可以求取一種基礎矩陣的時候,如果我的匹配剛好只有八個點,
那很好這組基礎矩陣很有可能就是你要的解。
然而在實際應用上我們很難確定哪八個點的對應關係是很美好的,
所以我們會匹配很多,裡面有正確的匹配也會有錯誤的匹配,
而我們透過一些演算機制,來從這些匹配中篩選。
而RANSAC算是一種學習的技巧,透過觀測數據的隨機樣本來估計模型,
而我們這邊的模型就是Fundamental,當然你如果有其他想要求解的也可以使用RANSAC的技巧,
而RANSAC具體流程大致如下
最後重複步驟直到迭代次數大於k。
而k這個數我們要怎麼計算呢?
假設RANSAC 需要做k次,選擇8個觀測點來計算基礎矩陣,則
每次都有任意一個以上選擇的觀測點是outlier的機率為
w=inlier/allpoints
這組模型是錯的=任意一個以上選擇的觀測點是outlier=任一筆不是inlier
所以我們可以假設我們的RANSAC的成功機率為P,就會等於其8個觀測點的資料皆為inlier的機率為
整理一下把K提出來
=> K = log(1 - P) / log
也就是說,利用上式,我可以在求出初步模型之後,算出初步模型的評分(即可得知w的機率為多少),並依據我們要求計算出模型是正確的機率為何,依此來計算至少計算的迭代次數才可以使模型的可信度confidence,P達到我們的要求。