2012-11-14 169 views
4

我正在嘗試使用OpenCV估計相對姿態。相機在我的情況下進行校準(我知道相機的內在參數)。使用OpenCV進行相機姿態估計

鑑於在兩個位置拍攝的圖像,我需要找出兩個相機之間的相對旋轉和平移。典型的平移約爲5至15米,相機之間的偏航角度旋轉範圍在0-20度之間。

爲達此目的,採取以下步驟。 a。查找點使用SIFT/SURF b。基本矩陣識別 c。用E = K'FK估計基本矩陣並修改E用於奇異約束 d。分解本質矩陣得到旋轉,R = UWVt/UW'Vt(U和Vt是E的SVD) e。從旋轉矩陣中獲得真實旋轉角度

實驗1:真實數據 對於真實數據實驗,我通過將相機安裝在三腳架上來捕獲圖像。在位置1捕獲的圖像,然後移動到另一個對齊位置,並以5度爲單位改變偏航角度,並捕獲位置2的圖像。

問題/問題: 1.估計的偏航角的符號與地面不匹配真理偏航角度。有時5度估計爲5度,但10度爲-10度,15度又爲15度。 2.在實驗中,只有偏航角度發生變化,但估計的滾動角度和俯仰角度的非零值接近180/-180度。 3.在某些情況下,精度很差,估計和地面真實角度誤差約爲2-5度。 4.如何找出比例因子以獲得真實世界測量單位的翻譯?

行爲在模擬數據上也是一樣的。

有沒有人遇到類似我的問題?對於如何解決它們有任何線索。 任何人的幫助將不勝感激。

(我知道有類似的問題已經那麼多帖子,去低谷所有的人都沒有救了我。因此,發佈一次。)

+0

我知道這個問題已經過去幾個月了,但我一直在研究類似的東西,我相信我在角度上遇到了同樣的問題。經過一番研究,我發現SVD分解有4種不同的結果。這可能是你爲什麼得到這些角度?順便說一下:你解決了這個問題嗎? – zync

回答

0

對於問題1和2, 尋找「歐拉角「在維基百科或任何好的數學網站,如Wolfram Mathworld。你會發現歐拉角的不同可能性。我相信你可以根據文獻閱讀的結果弄清楚爲什麼你的結果會有變化。

對於問題3, 它應該主要與我們單個相機校準的準確性有關。對於問題4, 不確定。如何使用磁帶測量相機中的一個點並將其與翻譯標準進行比較以獲取比例因子。壞準確性

可能的原因:

1)在攝像機標定得到合理和精確的準確度之間的差異。看到這個thread。 2)你正在移動三腳架的準確性。您如何確保在更換位置時,​​三腳架不會圍繞垂直於表面的軸旋轉。

我沒有得到你的模擬概念。但是,我會建議下面的測試。

在不移動相機或物體的情況下拍攝圖像。現在,如果您計算相對相機的姿態,旋轉應該是單位矩陣,並且翻譯應該是空矢量。由於數值不準確和噪音,您可能會在弧分鐘內看到旋轉偏差。

+0

謝謝@CV愛好者的回覆。對於旋轉矩陣到歐拉角的轉換,我假設維基在http://en.wikipedia.org/wiki/Rotation_matrix(2.2一般旋轉)提供的旋轉矩陣表示。爲了校準,使用了由OpenCV提供的Zang的實現。未扭曲的圖像看起來不錯,返回的重投影誤差爲0.12。所以不確定如何確認校準的準確性。對於翻譯問題,我只在水平方向移動三腳架而不改變高度或垂直位移。但是trans矢量在所有方向都有非零值。 – Aarambh

+0

只是爲了排除校準矩陣的準確性問題,我試圖模擬數據。通過假設校準矩陣爲單位矩陣,產生具有約10度偏航角的E = [R | t]。由於校準是Unity,基本矩陣和基本矩陣將是相同的(E = F)。最後,使用假設x2'F x1 = 0;生成了一些點集。這種模擬數據也具有與真實數據相似的行爲。這種模擬方法是否正確?有沒有其他方法可以模擬點並驗證我的實現?先謝謝你。 – Aarambh

+0

我想我應該正確地閱讀你的問題。如果我是對的,你正在計算兩個攝像頭之間的相對姿勢。而你通過用這兩款相機對一個共同的目標進行成像來實現這一點。我對嗎? –

2

在Hartley和Zisserman的第9.6章中,他們指出,對於一個特定的基本矩陣,如果一個攝像機被保持在規範的位置/方向,則第二個攝像機矩陣有四種可能的解決方案:[UWV' u3],[UWV'| -u3],[UW'V'| u3]和[UW'V'| -u3。

第一個和第三個解決方案(以及第二個和第四個解決方案)之間的區別在於方向圍繞連接兩個攝像頭的線旋轉180度,稱爲「雙絞線」,聽起來像您所描述的。

這本書說,爲了從四個選項中選擇正確的翻譯和方向組合,您需要測試場景中的一個點,並確保該點位於兩個相機的前方。