2012-06-15 97 views
21

當使用OpenCV的findHomography函數來估計兩組點之間的單應性時,即使使用RANSAC或LMEDS,由於輸入點內的離羣值,您有時會得到不良的單應性。如何判斷單應性矩陣是否可以接受?

// opencv java example: 
Mat H = Calib3d.findHomography(src_points, dst_points, Calib3d.RANSAC, 10); 

如何判斷生成的3x3單應性矩陣是否可以接受?

我在這裏尋找答案在這裏在Stackoverflow和谷歌,無法找到它。

我發現這篇文章,但它是一個有點神祕對我說:

"The geometric error for homographies"

+2

查看問題http://stackoverflow.com/questions/10972438/detecting-garbage-homographies-from-findhomography-in-opencv/10981249#10981249 –

+0

如果您的相機移動受限,您可以嘗試分解您的單應性和測試縮放比例,旋轉和/或平移參數以獲得最大值。其他方法:如果您知道(或採取約束)圖像的大部分應該重疊,則可以在變形之後計算重疊,並確定它是否顯然是錯誤的單應性。其他方法:如果您使用RANSAC,您可以根據inlier數量(和/或inlier/total的比率)決定單應是否應該被拒絕) – Micka

+0

@Micka感謝您的幫助,我已經在使用RANSAC,相機運動是不受限制,我正在尋找方法來放棄單應性(主要是數學),然後再進行更重的計算,如應用單應性和檢查重疊。 –

回答

22

的最佳方式告訴我們,如果單應是可以接受的。

1-獲取一個圖像的點並使用計算出的單應矩陣重新投影它們。

//for one 3D point, this would be the projection 
px' = H * px; 
py' = H * py; 
pz' = H * pz; 

2-計算重新投影的點和圖像中的實際點之間的euclidean distance

Reprojection error一點。 p是投影點,q是實際點。

enter image description here

3-建立該決定是否重投影誤差是可接受一個treshold。

例如,大於一個像素的錯誤對於許多跟蹤應用程序來說是不可接受的。

+11

當您知道很可能兩個圖像在類似位置共享一個修補程序時,您建議的內容適用於跟蹤。當計算兩幅不同圖像之間的單應性來檢查一幅圖像是否包含另一幅圖像時,重投影誤差根本沒有用處。例如,在我的情況下,我經常會從一個圖像中將很多(〜30個)點映射到第二個圖像中的同一個點(或幾個,關閉點)。你對這個案子有什麼建議嗎? –

相關問題