欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > cv2.stereoRectify中R1, R2, P1, P2, Q中每一个分量的物理意义

cv2.stereoRectify中R1, R2, P1, P2, Q中每一个分量的物理意义

2025/6/9 1:17:57 来源:https://blog.csdn.net/ergevv/article/details/148451519  浏览:    关键词:cv2.stereoRectify中R1, R2, P1, P2, Q中每一个分量的物理意义

源于deepseek:

在 OpenCV 的 cv2.stereoRectify 函数中,R1, R2, P1, P2, Q 是计算立体校正和三维重建所需的关键输出矩阵。它们各自代表不同的几何变换和投影关系:

  • 目标:立体校正使左右相机图像平面共面且行对齐(极线平行于图像行)。
  • 输入:左右相机内参 (cameraMatrix1, cameraMatrix2)、畸变系数 (distCoeffs1, distCoeffs2)、相机间旋转矩阵 R 和平移向量 T
  • 输出:用于校正图像 (initUndistortRectifyMap) 和计算视差/深度 (reprojectImageTo3D)。

输出矩阵详解

  1. R1 (3x3 旋转矩阵)

    • 物理意义:将左相机原始坐标系旋转到校正后虚拟相机坐标系的旋转变换。
    • 作用:描述左相机为了达到共面行对准状态,其坐标系需要进行的旋转。应用 R1 后,左相机光轴垂直于新的公共成像平面(基线平面),且成像平面的行方向平行。
    • 几何解释:想象你物理上转动左相机,使它的成像平面与一个虚拟的理想平面重合(该平面平行于基线且水平)。R1 就是这个转动操作对应的数学旋转矩阵。
  2. R2 (3x3 旋转矩阵)

    • 物理意义:将右相机原始坐标系旋转到校正后虚拟相机坐标系的旋转变换。
    • 作用:描述右相机为了达到共面行对准状态,其坐标系需要进行的旋转。应用 R2 后,右相机光轴也垂直于同一个新的公共成像平面(基线平面),且成像平面的行方向与左相机严格平行。
    • 几何解释:想象你物理上转动右相机,使它的成像平面与左相机转动后到达的同一个虚拟理想平面重合(平行于基线且水平)。R2 就是这个转动操作对应的数学旋转矩阵。
    • 关键点R1R2 共同作用使得两个虚拟相机坐标系的 Z 轴平行(都垂直于公共成像平面),X 轴平行(通常指向相同方向),Y 轴平行(垂直向下)。这就实现了共面行对准。
  3. P1 (3x4 投影矩阵 - 左相机)

    • 物理意义:将校正后左虚拟相机坐标系下的三维点投影到校正后左图像平面上的齐次坐标变换矩阵。
    • 结构P1 = [K1_new * [I | 0]]P1 = [K1_new * [R1 | 0]] (取决于 alpha 参数)
      • K1_new (3x3):校正后左虚拟相机的内参矩阵。它的主点 (cx, cy) 可能因 alpha 参数(用于控制有效图像区域)而改变,焦距通常保持不变或根据 alpha 略有调整。
      • [I | 0] (3x4):单位旋转矩阵 + 零平移向量。这是最常见的情况,意味着校正后的左虚拟相机坐标系原点与原始左相机坐标系原点重合(即只旋转,不改变位置)。
      • [R1 | 0] (3x4):如果 cv2.stereoRectify 内部实现需要额外的旋转(取决于算法和 flags),但物理意义仍是原点在原始左相机位置。
    • 作用:定义校正后左图像是如何从校正后左虚拟相机观察到的三维世界投影而来的。
    • 几何解释P1 定义了一个新的“虚拟左相机”。这个相机的内参是 K1_new,它位于原始左相机的位置(原点),但它的朝向是经过 R1 旋转后的方向(即朝向新的公共成像平面)。
  4. P2 (3x4 投影矩阵 - 右相机)

    • 物理意义:将校正后右虚拟相机坐标系下的三维点投影到校正后右图像平面上的齐次坐标变换矩阵。
    • 结构P2 = [K2_new * [R | T_new]]
      • K2_new (3x3):校正后右虚拟相机的内参矩阵。主点也可能因 alpha 改变,焦距通常与 K1_new 相同(即 K1_new[0,0] == K2_new[0,0]K1_new[1,1] == K2_new[1,1])。
      • R (3x3):一个旋转矩阵。在 Bouguet 算法中,R 通常是 R1R2 的转置,用于将点转换到校正后坐标系。
      • T_new (3x1):最关键的部分! 这是校正后虚拟相机坐标系下的基线平移向量。它的形式通常是 T_new = [Tx, 0, 0]^T
        • Tx = -fx * B (其中 fxK1_new[0,0]B 是原始基线长度 ||T||)。
        • 物理意义Tx 表示在校正后坐标系中,右虚拟相机原点相对于左虚拟相机原点沿 X 轴的偏移量(单位为像素)。Tx 是负值,因为右相机在左相机的负 X 方向(假设左相机在原点)。
    • 作用:定义校正后右图像是如何从校正后右虚拟相机观察到的三维世界投影而来的。T_new 中的 Tx 直接决定了视差与深度的关系。
    • 几何解释P2 定义了一个新的“虚拟右相机”。这个相机的内参是 K2_new。它位于原始右相机的位置,但朝向是经过 R2 旋转后的方向(朝向新的公共成像平面)。T_new 精确地描述了在校正后的坐标系下,这个右虚拟相机相对于左虚拟相机的位置(只有 X 方向有偏移)。
  5. Q (4x4 视差-深度映射矩阵)

    • 物理意义:将校正后左图像中的像素坐标 (u, v) 及其视差值 d 映射回原始左相机坐标系下的三维点坐标 (X, Y, Z, W) 的齐次变换矩阵。最终三维坐标为 (X/W, Y/W, Z/W)
    • 结构
      Q = [ 1,  0,    0,      -cx;0,  1,    0,      -cy;0,  0,    0,       f;0,  0, -1/Tx, (cx - cx')/Tx ]
      
      • cx, cyP1[0,2]P1[1,2] (校正后左图像主点)。
      • cx'P2[0,2] (校正后右图像主点)。在校正良好的系统中,cy == cy',且 cxcx' 通常相等(图像水平对齐)。
      • fP1[0,0]P1[1,1] (校正后虚拟相机的焦距,通常 P1[0,0] 用于 X, P1[1,1] 用于 Y)。
      • TxP2[0,3] / P2[0,0] (来自 P2 的基线平移量,负值)。
    • 核心公式:深度 Z = f * B / |d| = f * |Tx| / |d| (因为 B = |Tx| / fTx = -f * B => |Tx| = f * B)。
    • 作用:这是立体视觉三维重建的核心。给定左校正图像中的一个点 (u, v) 和通过立体匹配计算得到的该点对应的视差值 dQ 矩阵可以直接计算出该点在原始左相机坐标系下的三维坐标 (X, Y, Z)
    • 使用cv2.reprojectImageTo3D(disparity_map, Q) 函数就是利用 Q 矩阵将视差图转换为三维点云。

关键物理意义总结表

矩阵维度核心物理意义关键作用
R13x3左相机原始坐标系 -> 校正后虚拟相机坐标系的旋转定义左相机为达到共面行对准所需的姿态调整
R23x3右相机原始坐标系 -> 校正后虚拟相机坐标系的旋转定义右相机为达到共面行对准所需的姿态调整
P13x4校正后左虚拟相机坐标系下的 3D点 -> 校正后左图像像素坐标的投影 ([K1_new * [I|0]])定义校正后左图像的成像模型(位置、朝向、内参)
P23x4校正后右虚拟相机坐标系下的 3D点 -> 校正后右图像像素坐标的投影 ([K2_new * [R|T_new]], T_new=[Tx,0,0])定义校正后右图像的成像模型(位置、朝向、内参),Tx 是核心基线参数
Q4x4校正后左图像像素 (u, v) + 视差 d -> 原始左相机坐标系下的 3D点 (X, Y, Z)立体三维重建的核心公式,将视差转换为深度和三维坐标

补充说明

  • alpha 参数:控制有效图像区域。alpha=0 表示只保留所有像素都有效的重叠区域(可能有黑边),alpha=1 表示保留原始图像所有像素(有效区域可能包含畸变严重的部分)。它会影响 K1_new, K2_new 的主点坐标 (cx, cy)(cx', cy'),进而影响 P1, P2, Q
  • 图像校正R1, R2, P1, P2 用于计算映射表 (cv2.initUndistortRectifyMap),然后用 cv2.remap 函数实际校正原始图像。
  • 视差图:在校正后的图像对上 (rectified1, rectified2),使用立体匹配算法(如 cv2.StereoSGBM, cv2.StereoBM) 计算视差图 disparity_map
  • 三维重建:使用 Q 矩阵和视差图 (cv2.reprojectImageTo3D(disparity_map, Q)) 计算每个像素对应的三维点坐标。
  • 基线 B:原始平移向量 T 的模 ||T|| 就是物理基线长度。在 P2 中体现为 Tx (Tx = -f * B),在 Q 矩阵中用于深度计算 Z = f * B / d
  • Tx 的重要性:它是连接视差 d 和深度 Z 的桥梁 (Z ∝ 1/d,比例常数是 f * |Tx| / |d| 中的 f * |Tx|)。Tx 的值直接决定了深度计算的尺度。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词