You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于相机世界坐标系位姿计算外参矩阵的方法正确性问询

问题解答

一、先明确CMU课件里的相机矩阵定义

CMU的相机投影矩阵规则是 P = K * [R | t],其中:

  • K 是内参矩阵
  • [R | t] 是世界坐标系转到相机坐标系的变换矩阵(3x4),直白说就是把世界里的点转成相机视角下的点,对应齐次变换逻辑是 X_c = R*X_w + t
  • 如果知道相机中心在世界里的位置 C_w,那 t = -R*C_w,本质就是 X_c = R*(X_w - C_w)——先把世界点平移到相机中心,再旋转到相机视角

二、你的代码里的问题

1. 相机2的外参完全错了

你现在直接用 T12 当相机2的外参(P2 = K*T12),这只有在 T12 是世界直接到相机2的变换时才对。但你说明 theta2 是相机的偏航角(绕自身Y轴旋转),t12 是相机1到相机2的平移,这意味着 T12 是相机1到相机2的相对变换,不是世界到相机2的绝对变换。

正确的做法是把相对变换叠加到相机1的世界位姿上:

TW2 = T12 * TW1; % 先将世界点转到相机1坐标系,再转到相机2坐标系,得到相机2的世界→相机变换矩阵
P2 = K * TW2;

2. 旋转矩阵的方向要盯紧

你写的 RW1 和 R12 是绕Y轴的旋转矩阵:

RW1 = [[cos(theta1), 0, sin(theta1)];
       [0,1, 0];
       [-sin(theta1), 0, cos(theta1)]];

这是右手坐标系里绕Y轴顺时针旋转θ的矩阵(从Y轴正方向向下看),你得确保这个旋转方向和你实际的相机姿态定义一致,别搞反了。

三、你提到的外参公式是对的

你给出的外参公式 T = [R -Rt; 0 1](3x4形式为 [R | -Rt])没问题,但要明确定义:

  • 这里的 R 是相机坐标系转到世界坐标系的旋转矩阵(即相机的姿态,相机三个轴在世界中的朝向)
  • t 是相机中心在世界坐标系下的位置
    此时世界点转相机点的公式是 X_c = R^T*(X_w - t),对应的矩阵就是 [R^T | -R^T t],和你写的公式本质逻辑一致,只是旋转矩阵的视角不同而已。

四、你确实遗漏了世界-相机坐标系的变换

如果 T12 是相机之间的相对位姿,你漏了把相机2的相对位姿转换成世界坐标系下的绝对位姿——必须通过相机1的世界位姿 TW1 推导出相机2的世界位姿 TW2,不能直接拿相对变换当外参使用。

内容的提问来源于stack exchange,提问作者Stark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:40:35