【问题标题】:Exact definition of the matrices in OpenCv StereoRectifyOpenCv StereoRectify 中矩阵的精确定义
【发布时间】:2015-04-25 02:00:31
【问题描述】:

投影矩阵P的定义通常是 3x4 矩阵,它将点从世界坐标投影到图像/像素坐标。投影矩阵可以拆分为:

  • K:具有内在参数的 3x4 相机矩阵 K
  • T:带有外参的 4x4 变换矩阵

那么投影矩阵是P = K * T

OpenCV 的 stereoRectify 的以下输入的明确定义是什么:

  • cameraMatrix1 - 第一个相机矩阵(我假设它是投影矩阵的固有 K 部分,对吗?)
  • R – 第一个和第二个摄像机坐标系之间的旋转矩阵。 ('between'是什么意思?是从cam1到cam2还是从cam2到cam1的旋转?)
  • T – 摄像机坐标系之间的平移向量。 (同上。是从 cam1 -> cam2 还是 cam2->cam1 的翻译)
  • R1 – 为第一台摄像机输出 3x3 校正变换(旋转矩阵)。 (这是不是校正后的旋转,所以投影矩阵的新外在部分变为 T1new = R1*T1old?)
  • P1 – 在第一台摄像机的新(校正)坐标系中输出 3x4 投影矩阵。 ('新坐标系中的投影矩阵'是什么意思?看来这个投影矩阵依赖于旋转矩阵R1将点从世界坐标投影到图像/像素坐标,所以从上面的定义来看是既不是“投影矩阵”也不是“相机矩阵”,而是两者的某种混合)

【问题讨论】:

    标签: opencv matrix transformation projection


    【解决方案1】:
    1. CAMERAMATRIX1 - 是由 opencv 中的 stereocalibrate() 函数计算的内在 K 矩阵。你没看错!!!
    2. R 是 cam2 框架相对于 cam1 框架的旋转矩阵。类似地,T 是 cam2 原点 w.r.t 的平移向量 cam1 原点。
    3. 如果您查看 O'Riley 的书“学习 OPENCV”pg.-434,您将了解 R1(/Rl) 和 R2(/Rr) 是。

      Rl=[Rrect][rl强>]; Rr=[矩形][rr];

      让相机的图片平面为plane1和plane2。当没有进行立体校正时,plane1 和plane2 将完全不平行。此外,epilines 不会与立体相机基线平行。因此,Rl 所做的是将左图像平面转换为与右图像平面平行(由 Rr 转换),而且,两个图像上的外延线现在是平行的。
    4. P1P2是立体校正后的新投影矩阵。请记住,相机矩阵(K)将 3d 空间中的一个点转换为 2d 图像平面。但是 P1 和 P2 将 3d 空间中的一个点转换到经过校正的 2d 图像平面上。
      如果您之前校准过立体相机装置并观察了 P1 和 K1 值,您会发现如果立体装置几乎处于校正配置(显然在人类范围内),它们非常相似

    【讨论】:

    • 问题:如果 T = cam2 wrt cam1 的平移向量,这是否意味着“如果 cam1 在 0,0,0 而 cam2 在 0.066, 0, 0, 那么 T = 0.066,0, 0?还是 T = -0.066,0,0?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 2017-02-12
    • 2012-10-15
    • 2015-02-20
    相关资源
    最近更新 更多