当前位置: 首页 > news >正文

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 的值直接决定了深度计算的尺度。

相关文章:

  • 塔能智慧照明系统“夜间巡检”功能上线!问题路灯自动报警
  • 【Latex】Windows/Ubuntu 绘制 eps 矢量图通用方法(drawio),支持插入 Latex 数学公式
  • 浅谈 React Suspense
  • java复习 04
  • 如何彻底删除windows10自带的美式键盘
  • LVGL对显示接口的要求
  • 【KiCad】立创封装导入KiCad
  • 深度解析:Spring Boot 配置加载顺序、优先级与 bootstrap 上下文
  • MySQL 8.0 绿色版安装和配置过程
  • 设计模式-观察着模式
  • 能 ping 通网址,但是网页打不开
  • Mybatis-Plus的Iservice接口
  • 台式机电脑CPU天梯图2025年6月份更新:CPU选购指南及推荐
  • 生物发酵展同期举办2025中国合成生物学与生物制造创新发展论坛
  • 16-Oracle 23 ai-JSON-Relational Duality-知识准备
  • Golang——10、日志处理和正则处理
  • 黄柏基因组-小檗碱生物合成的趋同进化-文献精读142
  • HTML面试整理
  • JUC并发编程(四)常见模式
  • EMC VNXe 存储系统日志收集方法
  • wordpress获取php变量给模板/西安网站seo诊断
  • 哪些做任务的网站靠谱/百度一下电脑版首页网址
  • 亚马逊雨林是怎么形成的/多少关键词排名优化软件
  • vps云主机可以做网站/产品线上营销推广方案
  • 浦城县规划建设旅游局网站/淘数据
  • 美发网站源码/深圳网站设计三把火