2013-01-20 65 views
5

我目前正在完成我的興趣點檢測器的評估工具。在最後的步驟中,我發現了一個令人困惑的錯誤。OpenCV CV findHomography assertion error - counter => 4

Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray()) 

srcPointsdstPointsvector<Points2f>存儲該匹配的關鍵點的對應點。到目前爲止,沒有什麼特別的 - 就像在教程中。

但是當我使用RANSAC並在範圍[0,...,4]中有一個vector<Points2f>時,我得到的斷言錯誤比計數器應該大於或等於4。

問題1:該算法是否至少需要4個點才能描述屬於當前模型的內容,並創建共識?

問題2:有沒有關於此的文檔? (我看了一下doctutorials。)

Please note that I already have seen this question。但是RANSAC的行爲沒有令人滿意的答案。或者我是否應該接受這種方法至少需要四分才能找到單應性?

感謝您的幫助。

回答

8

無法用少於4對點計算單應性。那是因爲只有3分是透視含糊。畫面A三角形

a 


b  c 
在圖像1

在圖像2中的點已被轉化以看起來像這樣

a 


b c 

b和c之間的距離的一半已被切斷。不幸的是,你不知道這是否是因爲c點離你更近或更遠。隨着第四點的差異變得清晰。

a  d 


b  c 

這裏是圖像方1

 d 


a   


b c  

這裏d和c的旋轉向你

a  

    d 
b c 

在這裏,他們旋轉遠離你。

我在openCV文檔中沒有看到這個要求,但是如果您在單應計算中發現任何資源,在找到這個要求之前,您不必讀得很遠,並且有足夠的4點的更嚴格證明。

4

RANSAC用於在一個或多個較大集合中選擇4對匹配點(即,當srcPoints.size() >= 4)。這就是爲什麼你會得到一個錯誤,如果srcPoints.size() <=4

因爲單反矩陣H有8個自由度,所以需要至少4個對應關係,因此需要8個線性方程來找到解。由於每對點生成兩個線性方程(使用x和y座標),因此總共需要至少4個對應關係。

+0

你能給我一個提示,我可以讀這個方程嗎?我只在文中發現了一些短語,告訴我「你至少需要4分」,但沒有任何解釋。 –

+0

看看這個:http://cseweb.ucsd.edu/classes/wi07/cse252a/homography_estimation/homography_estimation.pdf – memecs