OPENCV:当我已经有投影矩阵P时,为什么使用solvepnp()



我已经知道,solvepnp()使用2D点坐标和相应的3D点坐标找到相机的位置(旋转和翻译),但是我不太了解为什么我有在我用2个相机及其相应的2D点进行三角凝分后,使用它。

因为在三角剖分新的3D点时,我已经有(需要)两个摄像机的投影矩阵P1和P2(其中包含R1,R2和T1,T2,T2旋转和翻译,并且已经是相机的位置W.R.T.新的三角3D点)。

我的工作流程是:

  1. 从2个图像中获得2D-Corresporces。
  2. 使用以下2D相应的对应获取必需矩阵E。
  3. 从Essential矩阵E中获取2个图像的相对方向(R,T)E。

  4. 将相机1的投影矩阵P1设置为

    p1 =(1,0,0,0,0, 0、1、0、0, 0、0、1、0, 0、0、0、0);

并将相机2的投影矩阵p2设置为

P2 = (R.at<double>(0, 0), R.at<double>(0, 1), R.at<double>(0, 2), t.at<double>(0),
      R.at<double>(1, 0), R.at<double>(1, 1), R.at<double>(1, 2), t.at<double>(1),
      R.at<double>(2, 0), R.at<double>(2, 1), R.at<double>(2, 2), t.at<double>(2));
  1. 解决最小二乘问题

    p1 * x = x1
    p2 * x = x2

    (求解x = 3D点)。等等.....

之后,我从这些投影矩阵P1和p2以及x1和x2 2D点对应关系中获得了三角3D点x。

我的问题现在再次:
为什么我现在需要使用solvepnp()获取相机位置?因为我已经有P1和P2,它应该已经是摄像机的位置(W.R.T.三角3D点)。

您不必拥有每个相机姿势 - 仅需要相对r | t。您不能假定第一或第二摄像头的投影矩阵作为身份 - 应该对投影进行建模。您可以使用平面图案计算固有的矩阵并校准相机方法。

您可以假设R1 = I和T1 = 0(第一摄像头的旋转和翻译)。因此,r2 = r和t2 = t。三角形的3D点将在第一个相机坐标系中具有坐标。

相关内容

  • 没有找到相关文章

最新更新