我有一个双摄像头设置,并试图使AR的东西。经立体校正校正后,左右图像效果极佳,极线对齐良好。
我用一个图像检测到AR标记,并希望通过适当的相机移位在另一个图像上渲染它。
stereocaliation给出了两个相机之间的关系,如:
R: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 9.9922768917754268e-001, 2.4924911359451081e-002,
3.0377194976358678e-002, -2.4063699016973375e-002,
9.9930712233274999e-001, -2.8393901539922377e-002,
-3.1063862775397383e-002, 2.7640984945580323e-002,
9.9913513219219230e-001 ]
T: !!opencv-matrix
rows: 3
cols: 1
dt: d
data: [ -5.5054479009004126e+001, -7.1894766441986058e-001,
-2.8661303301073544e+000 ]
我该如何理解这个?特别是平移向量[-55.05,-0.718,-2.866]?是像素单位吗?
在渲染部分,我使用了Ogre,制作了一个自定义的投影矩阵(从摄像机校准矩阵中获得)。我用向量[x,y,z]做一个平移矩阵,然后乘以自定义的投影矩阵。它们以什么单位相关?我的代码是这样工作的:
double pMatrix[16];
camParams.OgreGetProjectionMatrix(camParams.CamSize,camParams.CamSize, pMatrix, 0.05,50, false);
Ogre::Matrix4 PM(pMatrix[0], pMatrix[1], pMatrix[2] , pMatrix[3],
pMatrix[4], pMatrix[5], pMatrix[6] , pMatrix[7],
pMatrix[8], pMatrix[9], pMatrix[10], pMatrix[11],
pMatrix[12], pMatrix[13], pMatrix[14], pMatrix[15]);
.....
//translate the camera a little for the right display
Ogre::Matrix4 matrix_translate;
matrix_translate.makeTrans(Ogre::Vector3(-0.3,0.0,0.0));
Ogre::Matrix3 matrix_rotate;
camera_right->setCustomProjectionMatrix(true, matrix_translate*PM);
camera_right->setCustomViewMatrix(true, Ogre::Matrix4::IDENTITY);
当您校准相机系统时,您必须输入网格图案的大小,以单位表示,并且平移向量共享相同的单位。
我不是很熟悉食人魔,但我认为在你的食人魔场景中一定有一个全局坐标系统,并且这个坐标系统一定有一个指定的单位。