2012-09-12 124 views
3

我想確定立體相機相對於其在世界座標中的先前位置的位置和方向。我使用的是大黃蜂XB3相機,立體聲對之間的運動大約在幾英尺的範圍內。Python OpenCV立體相機位置

這是否是正確的軌道?

  1. 獲取經校正的圖像的每對
  2. 檢測/匹配特徵點糾正圖像
  3. 計算基本矩陣
  4. 計算本質矩陣

感謝您的幫助!

+0

聽起來像你在正確的軌道上。但是,有幾個問:相機的校準怎麼樣?(也就是說你認爲這已經完成了)嗎?兩臺相機對世界的校準情況如何?(例如,你是否在假設任何初始已知物體你移動 - 與知道尺寸和/或標記)?你希望在立體環境中執行此操作時獲得什麼(即你是否希望通過深度來獲得更高的準確度)? – timlukins

+1

從根本上說,您是否對某個任意初始位置(例如相機移動[dx,dy,dz])或絕對移動的相對運動感興趣?(例如,如果您有一個模型現在的世界和相機現在在[x,y,z])? – timlukins

+0

好的問題,我會盡我所能來回答,因爲我對CV條款和實踐的經驗有限。第一個問題可能是最相關的。我真的很喜歡絕對運動,因爲我試圖通過耦合GPS(當它已知是好的)和當GPS不好時使用視覺odometery(?)來實現室外移動映射系統。我假定相機(立體聲對)已經由製造商相互校準過,或者您是指「成對的相機」?如果第二,那麼我不知道這是必需的。 – user1667061

回答

3

好吧,這聽起來像你有一個公平的理解你想做什麼!有了一個預先校準的立體相機(如大黃蜂),然後將提供點雲數據,當你需要它 - 但它也聽起來像你基本上也想使用相同的圖像來執行視覺測距(當然是正確的術語),並在GPS失效時提供最後一次已知的GPS位置的絕對方位。首先要做的事情 - 我想知道你是否看過一些更多想法的文獻:和往常一樣,它通常只是知道谷歌應該做些什麼。用於導航的「傳感器融合」的整個想法 - 特別是在GPS被丟失的建築區域 - 已經促成了一整套研究。因此,也許研究以下(交叉)領域可能對你有所幫助:你要與所有這些遭遇

問題方法包括:

  • 處理靜態與動態場景(即那些純粹基於相機運動而改變的 - c.f.其他由於場景中發生的獨立運動而改變:樹木移動,汽車駛過等等)。
  • 將視覺運動的量與真實世界的運動(我稱之爲「校準」的另一種形式)相關聯的量很小或很遠?這是立體信息可以證明非常方便的地方,我們將會看到...... )
  • 問題的
  • 因子分解/優化 - 尤其是處理積累沿着相機的路徑誤差隨着時間和異常特徵(交易的所有的招數:束調整,RANSAC等)

所以,無論如何,從實用的角度來說,你想用Python(通過OpenCV綁定)來做到這一點?

如果您使用的是OpenCV 2.4,那麼(組合的C/C++和Python)新的API文檔是here

作爲一個起點,我建議在看下面的示例:

/OpenCV-2.4.2/samples/python2/lk_homography.py 

從使用功能cv2.findHomography光流提供基本的自運動估計的一個很好的實例。

當然,這種單應H只適用於點共平面(即在同一投影變換下位於同一平面上的情況 - 所以它適用於漂亮的平坦道路的視頻)。但是 - 通過相同的原理,我們可以使用基本矩陣F代替對極幾何中的運動。這可以通過非常相似的函數cv2.findFundamentalMat來計算。最終,正如你在你的問題中正確地指定了上面那樣,你需要基本矩陣E--因爲這是在實際物理座標中操作的那個(不僅僅是沿着epipoles的像素之間的映射)。我始終認爲基礎矩陣是基本矩陣的一般化,通過該矩陣可以省略相機校準(K)的(非必要)知識,反之亦然。

因此,關係可以正式表述爲:

E = K'^T F K 

所以,你需要知道你的立體攝像機標定的K東西畢竟!請參閱着名的Hartley & Zisserman book瞭解更多信息。

例如,您可以使用函數cv2.decomposeProjectionMatrix來分解基本矩陣並恢復您的R方向和位移。

希望這會有所幫助!最後一句警告:這絕不是解決現實世界數據複雜性的「解決問題」 - 因此正在進行的研究!

+0

優秀的反應蒂姆,正是我希望加一些! – user1667061

+0

我拿起Hartley&Zisserman的書,以及Szeliski的書,試圖獲得更廣泛的理解。追蹤神祕的內在參數(K)。看來在我的情況下,我有一個攝像頭f = 801.408020(像素),ppX = 324.561127和ppY = 240.855042(這些提取使用點灰色庫)。那麼我的(K)可以寫成([801.408020,0,324.561127],[0,801.408020,240.855042],[0,0,1])? – user1667061

+0

很棒,你得到了這本書。手工操作K對真實世界的相機來說有點危險。你在上面的工作看起來不錯 - 但是假設一個具有這些確切參數的「針孔」相機模型。真正的相機有光學系統,需要更復雜的模型來適應失真和其他影響。真正解決相機內在問題的唯一方法是使用能夠有效描述光學和成像系統的模型進行校準。這並不難,只需看看OpenCV基於棋盤格校準的功能即可。 – timlukins