Matlab 多摄像机标定

Matlab 多摄像机标定,matlab,camera,computer-vision,camera-calibration,calibration,Matlab,Camera,Computer Vision,Camera Calibration,Calibration,我有多个相机,我已经分别校准了它们,我选择了一个固定的帧来校准它们的外部矩阵,以获得它们的旋转和变换w.r.t校准模式。因此,在这种情况下,所有这些相机都是旋转的,并以图案为原点进行传输。如果我想将原点移动到摄影机1,并重新计算这些矩阵w.r.t第一个摄影机,该怎么办 编辑: 这是我从这里找到的脚本中得到的: 相机的外观与来自校准的外部原点一致 变换后的样子最简单的方法是将目标旋转平移的标定相机表示为4x4矩阵,旋转矩阵位于左上3x3象限,列向量平移位于第四列的前三行,最后一行表示为(0,0

我有多个相机,我已经分别校准了它们,我选择了一个固定的帧来校准它们的外部矩阵,以获得它们的旋转和变换w.r.t校准模式。因此,在这种情况下,所有这些相机都是旋转的,并以图案为原点进行传输。如果我想将原点移动到摄影机1,并重新计算这些矩阵w.r.t第一个摄影机,该怎么办

编辑:

这是我从这里找到的脚本中得到的:

相机的外观与来自校准的外部原点一致


变换后的样子

最简单的方法是将目标旋转平移的标定相机表示为4x4矩阵,旋转矩阵位于左上3x3象限,列向量平移位于第四列的前三行,最后一行表示为(0,0,0,1)。对于1,2,…,num摄像机中的i,从t中调用这些矩阵。您希望将最后n-1个矩阵“转换”为表示摄像机j从第一个矩阵的运动的矩阵。它是:

Qj_from_1=Qj_from_t*Qt_from_1=Qj_from_t*inv(Q1_from_t)

其中“*”是普通的逐行矩阵积,inv()表示矩阵求逆。

如果是这样呢?变换矩阵是从一点到另一点的移动,它们是相对的,而不是绝对的。您选择了原点。通常,哪一个是原点并不重要,因此您只需选择校准模式。但是你可以用anyI'm voting来结束这个问题,因为这是一个数学问题,与编程无关。@AnderBiguri是的,这是真的,但是让其中一个摄像头作为世界的起源比棋盘上的任意点更容易。我找到了这个线索:但是这样做,我没有得到正确的结果。@user3178756,除非你做了一些我不理解的非常具体的事情,不,用一个摄像机世界坐标做这件事一点也不容易。这也不是很难,但也不是很容易,而且你正在引入一个不必要的额外成本step@AnderBiguri这是真的,就目前而言,我只是想学习和理解这些转变。谢谢答案!我已经试过了,但是我得到的结果和我发布的图片中的结果是一样的。你知道为什么会这样吗?我用你的解决方案和新的转换结果更新了代码。问题解决了!我从校准中得到的旋转矩阵是转置的!
T_ref = translationVector{1} ;
R_ref = rotationMatrix{1};
Q1_from_t = [rotationMatrix{1} T_ref' ; 0 0 0 1 ];


for i = 1:9
   R = rotationMatrix{i};
   T = translationVector{i};

   Qi_from_t = [R T' ; 0 0 0 1];

   Qi_from_1 =  (Qi_from_t) *(Q1_from_t)^-1;

   R_prime = Qi_from_1(1:3,1:3);
   T_prime = Qi_from_1(1:3,4)';

   figure(2),

   hold on 
   orientation = R_prime^-1;
   location = -T_prime*orientation;


    cam = plotCamera('Location',location,'Orientation',orientation,'Size',20);

end