2

我正在使用2個攝像頭進行頭部姿態估計項目。對於一個攝像機系統工作並返回相對於每個攝像機座標系的頭部的旋轉矩陣和平移向量。我在OpenGL場景中渲染了對象,該場景被旋轉並翻譯成表示頭部動作。要顯示計算旋轉矩陣和平移向量,我只需使用以下OpenGL命令。2個攝像頭的頭部姿態估計

glMatrixMode(GL_MODELVIEW); 
glLoadMatrixd(pose_matrix); 

其中姿態矩陣是OpenGL ModelView矩陣由旋轉矩陣和頭部的平移向量構成。

現在我正在試圖爲2個校準相機做到這一點。當第一臺相機失去了一張臉的軌跡,但第二臺相機估計了頭部姿勢時,我顯示了相對於第二張的旋轉和平移,反之亦然。我想顯示一個OpenGl對象並將其移動到兩種情況。爲此我需要將姿態矩陣轉移到公共座標系中。

我知道兩臺攝像機相對於彼此的相對幾何關係。我假設其中一個攝像頭是世界座標系,我通過將第二個攝像頭的姿態矩陣和校準矩陣相對於第一個攝像頭相乘,將第二個攝像頭的頭部姿態矩陣轉移到第一個攝像頭的幀。當我將這個乘法矩陣加載到OpenGL ModelView矩陣中時,我得到錯誤的結果。當第一個攝像頭捕捉到物體時,物體正在向右移動,但第二個攝像機物體被平移和旋轉,與第一個攝像機不在同一個地方。

可能是什麼問題?也許OpenGL的顯示部分是錯誤的或?

回答

0

安全的默認假設:OpenGL是正確的,你的代碼是錯誤的。

沒有看到你的代碼,我可以建議printf你的矩陣,並在Matlab或Octave中仔細檢查他們的數學。

一個常見的錯誤是忘記默認情況下,OpenGL將ROW向量乘以模型矩陣(實際上是所有矩陣)。也就是說,它乘以v_row * M,矩陣以col-major的順序存儲,而你可能正在考慮將通常的數學約定作爲COLUMN處理向量,並將它們乘以後乘以M * v_col(M存儲行優先)。

如果您更喜歡使用後者的慣例(推薦),請查看GL_ARB_transpose_matrix擴展名。