2016-05-01 126 views
1

不同的I得到的左照相機(pointL)中的圖像點和右照相機對應的圖像點(pointR)的我的立體相機使用功能匹配。這兩臺相機是平行的並且處於相同的「高度」。他們之間只有一個x翻譯。OpenCV的立體視覺的三維座標到2D照相機平面上的投影比三角測量的2D點到3D

我也知道每個攝像頭的投影矩陣(projL,projR),我在校準期間使用initUndistortRectifyMap獲得了投影矩陣。

對於三角測量這一點,我打電話: triangulatePoints(projL, projR, pointL, pointR, pos3D)documentation),其中pos3D是對象的輸出3D位置。現在

,我想項目的三維座標,以左攝像機的2D圖像

2Dpos = projL * 3dPos

產生的x座標正確。但y座標約20像素錯誤。

我該如何解決這個問題?

編輯: 當然,我需要使用齊次座標,以便乘以投影矩陣(3x4)。出於這個原因,我設置:

3dPos[0] = x; 
3dPos[1] = y; 
3dPos[2] = z; 
3dPos[3] = 1; 

是錯,要設置3dPos[3]1

注:

  1. 所有圖像都重新映射,我這樣做是一種預處理步驟。
  2. 當然,我總是用齊次座標

回答

1

你很可能伸入糾正相機。需要應用糾正扭曲的逆來獲得原始(未畸變)線性相機座標中的點,然後應用失真進入原始圖像。

+0

你知道如何在OpenCV中做到這一點嗎?我試圖找到任何解決辦法;沒有找到任何。 – black

+0

顯示您嘗試過的內容。 –

+0

我明白我應該不會打擾我在問題中用公式得到的2pos,對吧?但是在這個網站上(http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html),我沒有找到任何解決方案來保持某種特定的地位。只有解決方案才能將修正圖應用於整個墊子。 – black