2015-05-28 799 views
3

我使用opencv校準了我的單色相機。現在我知道攝像機的攝像機固有矩陣和失真係數[K1,K2,P1,P2,K3,K4,K5,K6]。假設相機以[Roll,Pitch,Yaw]旋轉放置在[x,y,z]中。當攝像機在地板上看時,我怎樣才能獲得世界座標中的每個像素[z = 0]。圖像座標到世界座標opencv

enter image description here

回答

2

你說你校準你的相機,讓你:

  • 內在參數
  • 外在參數(旋轉,平移)
  • 失真係數

首先,以補償失真,您可以使用undistort函數並獲取未失真的圖像。現在,你剩下的是內在/外在參數和針孔相機模型。從OpenCV documentation採取以下等式說明如何變換3D世界座標轉換成2D圖像座標使用這些參數:

enter image description here

基本上,你乘以一個投影矩陣,這又是一個組合的3D座標內部參數(方程中的第一個矩陣)和外部參數(方程中的第二個矩陣)。外部參數矩陣包含旋轉和平移分量[R|T]

+0

感謝您的回答。我認爲這是一般情況。看起來相機位置的過渡[X,Y,Z]應該變爲t1 t2 t3。但我不明白我怎麼能從[Roll,Pitch,Yaw]中獲得r11〜r33。那我的常規攝像機正在尋找地板[Z = 0]呢? – mefmef

+1

如果您正在尋找地面,方程中的Z = 0,並且轉換變爲可逆的,如我在回答中提到的演示文稿幻燈片27中所述(http://www.gris.tu-darmstadt。德/教學/課程/ SS11/CV1/L9-singleview-v1.pdf)。 –

+1

關於值r11〜r33,它們形成了所謂的旋轉矩陣。它可以寫成R = ABC,其中A,B和C表示圍繞不同軸的旋轉(根據慣例選擇軸)。旋轉量由滾動角,俯仰角和偏航角給出,但由於存在不同的慣例,因此A,B和C的值可能會有所不同。作爲實施轉換的參考,您可以使用http://mathworld.wolfram.com/EulerAngles.html。 –

2

我建議你通過學習針孔相機模型,該款機型的過程中,通過其在3D世界中的一個點使用相機內部參數映射到圖像平面開始。正如你所看到的,這個過程不是一對一的,因此它通常不能被倒置(圖像到3D),除非你有深度信息(你有,因爲你說的點位於z = 0 )。 this presentation幻燈片27中提到了這種特殊情況。先前的講座詳細解釋了圖像形成過程,並且可以用作實際確定從圖像到世界座標的轉換的第一參考。 Szeliski's bookthis PDF也是很好的資源。