Opencv 如何从两个外部摄影机矩阵导出相对平移和旋转?

Opencv 如何从两个外部摄影机矩阵导出相对平移和旋转?,opencv,computer-vision,perspectivecamera,Opencv,Computer Vision,Perspectivecamera,我有两组与视频序列相关的数据。其中一个包含使用一种算法生成的相对旋转和平移数据。另一种是由与每一帧相关联的基本真值外部矩阵组成 我想比较数据集,以确定它们之间的差异。我的问题是,如何从两个外部摄影机矩阵推导出相对平移和旋转?外部矩阵由旋转矩阵3x3和平移向量3x1组成 所以,m3x4,只是两个[rt]的串联。除非我误解了你的问题,否则获得旋转和平移是微不足道的。如果你有camera1poseP1=[R1 | T1]和camera2poseP2=[R2 | T2]那么P1to2=P2*P1^-1

我有两组与视频序列相关的数据。其中一个包含使用一种算法生成的相对旋转和平移数据。另一种是由与每一帧相关联的基本真值外部矩阵组成


我想比较数据集,以确定它们之间的差异。我的问题是,如何从两个外部摄影机矩阵推导出相对平移和旋转?

外部矩阵由旋转矩阵3x3和平移向量3x1组成


所以,m3x4,只是两个[rt]的串联。除非我误解了你的问题,否则获得旋转和平移是微不足道的。

如果你有
camera1
pose
P1=[R1 | T1]
camera2
pose
P2=[R2 | T2]
那么
P1to2=P2*P1^-1

直观地想象一个简单的情况,其中两个相机都有平移零,
camera1
在X轴上旋转+30度,
camera2
在X轴上旋转+60度

P1 = [R1|0] P2 = [R2|0]
因此,它们在X轴上旋转+30度的角度不同:

P1to2 = P2 * P1^-1 = [R2|0] * [R1|0]^-1 = [R2|0] * [R1^1|0]

R2 * R1^1 = 60 - 30 on X = rotation of +30 degrees on X

R和t是世界相对于相机的旋转和平移。获得它们的世界坐标等价物也不难。我要找的是两帧之间的增量,给定它们的外部矩阵。例如,第1帧和第2帧之间的平移。你是指第1帧和第2帧中像素坐标之间的变换吗?你能确认姿势P=N^-1,其中N是外部矩阵吗?那么如何计算相对平移?@aledalgrande当相机没有零平移时,相对旋转是什么?我们将如何应用逆平移来获得上述零平移的情况?