使用Matlab立体相机校准器时的默认坐标系是使Z远离相机(见本页底部图像:http://www.mathworks.com/help/vision/gs/coordinate-systems.html)
我想旋转我的坐标系统,使它仍然是右手的,但在校准目标处z=0, +z指向相机。我可以构造一个旋转矩阵R,它将任意坐标绕x轴旋转180度:
RotMatrix= [1 0 0;
0 -1 0; % 0 cos(pi) -sin(pi)
0 0 -1]; % 0 sin(pi) cos(pi)
我可以看到这是如何旋转任何世界点的坐标的,例如
P_new_coordinates= R*[Px; Py; Pz];
但我不确定如何在从像素坐标到世界坐标的转换中解释这种坐标系的旋转,反之亦然。有没有一种方法可以让我把它直接合并到我的相机矩阵中?我使用的是3x4相机矩阵约定:
[su; sv; s]= M*[X; Y; Z; 1]
您当然可以选择任何您喜欢的世界坐标系统,并且您可以创建相应的相机矩阵。在你的符号中,相机矩阵M可以分解如下:
M = K' * [R t]
,其中K'是立体相机校准器给出的固有矩阵的转置,R是旋转矩阵,t是作为列向量的平移。对于立体系统中的相机1,R是单位矩阵,t是0向量,因为相机1在原点,指向z轴。如果你想使用其他的世界坐标系统,你只需要适当地调整R和t。