C++ 如何从第一台摄像机获取另一台摄像机的外部参数?

C++ 如何从第一台摄像机获取另一台摄像机的外部参数?,c++,matlab,opencv,camera,calibration,C++,Matlab,Opencv,Camera,Calibration,我试着做多摄像机校准 在我的情况下,我最终想要获得第二个相机的外部参数,或者从第一个相机的参数(内部和外部)获得第二个相机的投影矩阵 我在钻机上安装了两个摄像头,它们的距离和角度也是固定的。我想我可以找出它们之间的关系,通过这个关系,我可以从第一个摄像机得到第二个摄像机的参数 在实际情况下,我在机器人上安装了两个摄像头(固定在钻机上),在这种情况下,我无法获得所有参数。(我可以获得第一个摄影机的外部参数)。所以在这种情况下,我想从第一个摄像机和它们之间的关系来做第二个摄像机校准 在目前,我发现第

我试着做多摄像机校准

在我的情况下,我最终想要获得第二个相机的外部参数,或者从第一个相机的参数(内部和外部)获得第二个相机的投影矩阵

我在钻机上安装了两个摄像头,它们的距离和角度也是固定的。我想我可以找出它们之间的关系,通过这个关系,我可以从第一个摄像机得到第二个摄像机的参数

在实际情况下,我在机器人上安装了两个摄像头(固定在钻机上),在这种情况下,我无法获得所有参数。(我可以获得第一个摄影机的外部参数)。所以在这种情况下,我想从第一个摄像机和它们之间的关系来做第二个摄像机校准

在目前,我发现第一和第二相机的失真,内在参数和当前的外在参数。当然,外部参数与实际情况不同。我这样安排他们的关系

R_rel = R_2 * inv(R_1) ,  t_rel = -R_rel * t_1 + t_2 
我做到了

norimg_2 = R_rel * norimg_1 + t_rel  (norimg_1 = inv(intinsic_1) * img_1, norimg_2 = inv(intrinsic_2) * img_2
然而,我不能得到正确的答案。我想知道这种关系是错误的还是这种方式是错误的

  • 当然,

    wld = [0, 0, 1];
    imgpoint_1 = K_n.' * extrin_1 * wld.';
    imgpoint_1_ = imgpoint_1/imgpoint_1(3);
    imgpoint_2 = K_f.' * extrin_2 * wld.';
    imgpoint_2_ = imgpoint_2/imgpoint_2(3);
    

这样我就能得到正确的答案。但是,我无法在实际情况中获得外部参数,因此我非常困惑。

我建议您使用二分法,如在中

您必须为无法猜测的参数
\u 2
尝试不同的值。然后,一点一点地,改变帧内的值,使其越来越小。最后,对摄像机1进行摄像机2的标定

这意味着您可以评估给定参数值的结果的不精确性
\u 2


如果您在SO上找不到您要查找的内容,那么您也应该尝试

这是一个对于堆栈溢出来说可能过于专业化的问题。