基于相机世界坐标系位姿计算外参矩阵的方法正确性问询
问题解答
一、先明确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
相关产品推荐
相关产品推荐

