8

我已经针对某个世界坐标系校准了 2 个相机。我知道它们每个相对于世界框架的旋转矩阵和平移向量。从这些矩阵如何计算一个相机相对于另一个相机的旋转矩阵和平移向量?

请提供任何帮助或建议。谢谢!

4

3 回答 3

5

这是一个更简单的解决方案,因为您已经有了 3x3 旋转矩阵 R1 和 R2,以及 3x1 平移向量 t1 和 t2。

这些表示从世界坐标系到每个摄像机的运动,即,如果 p 是在世界坐标系中表示的一个点,那么在摄像机 1 帧中表示的同一点是 p1 = R1 * p + t1。

那么,从摄像机 1 到 2 的运动就是(a)从摄像机 1 到世界坐标系的运动和(b)从世界坐标系到摄像机 2 的运动的简单组合。您可以轻松地计算此组合,如下所示:

  1. 形成 4x4 旋转平移矩阵 Qw1 = [R1 t1] 和 Qw2 = [ R2 t2 ],第 4 行都等于 [0 0 0 1]。这些矩阵分别完全表达了从世界坐标系到相机 1 和 2 的旋转平移。
  2. 从摄像机 1 到世界坐标系的运动就是 Q1w = inv(Qw1)。这里 inv() 是代数逆矩阵,即对于每个非奇异矩阵 X,inv(X) * X = X * inv(X) = IdentityMatrix。
  3. 从摄像机 1 到 2 的旋转平移是 Q12 = Q1w * Qw2,反之亦然,从摄像机 2 到 1 的旋转平移是 Q21 = Q2w * Qw1 = inv(Qw2) * Qw1。

拥有 Q12 后,您可以根据需要分别从其上部 3x3 子矩阵和右侧 3x1 子列中提取旋转和平移部分。

于 2012-09-06T03:51:41.643 回答
0

首先将您的旋转矩阵转换为旋转向量。现在每个相机都有 2 个 3d 矢量,称为 A1、A2、B1、B2。关于某个起源 O,您拥有所有 4 个。您需要的规则是

A relative to B = (A relative to O)- (B relative to O)

将该规则应用于您的 2 个向量,您将拥有彼此相对的姿势。

可以在此处以及许多其他地方找到有关从旋转矩阵转换为欧拉角的一些文档。如果您使用的是 openCV,则可以使用Rodrigues是我找到的一些 matlab/octave 代码。

于 2012-09-05T15:13:31.320 回答
0

这是非常简单易行的解决方案。我想你的第一台摄像机有 R1 和 T1,第二台摄像机有 R2 和 T2 旋转矩阵和根据公共参考点的平移向量。

从第一个到第二个相机的平移,从第一个到第二个相机的旋转可以通过以下两行matlab代码计算;

R=R2*R1';
T=T2-R*T1;

但请注意,如果每台相机只有一个 R 和 T,那就是真的。(我的意思是一个独特的世界参考的旋转和平移)。如果您有更多的参考平移和旋转,您应该为每个参考点计算 R,T。他们可能会非常接近彼此。但这些可能略有不同。然后您可以计算平移向量的平均值并将所有找到的旋转矩阵转换为旋转向量,计算其平均值,然后将它们转换为旋转矩阵。

于 2018-07-15T20:40:27.317 回答