用基本矩阵opencv确定摄像机运动

时间:2012-10-25 09:00:56

标签: opencv 3d translation camera-calibration

我尝试使用opencv从基本矩阵确定相机运动。我目前正在使用光流来跟踪每个其他帧中点的移动。基本矩阵源自基本矩阵和相机矩阵。我的算法如下

1。使用goodfeaturestotrack函数从帧中检测特征点。

2。跟踪点到下两个或三个帧(Lk光流),在此期间使用相应点计算平移和旋转矢量

3。两三帧后刷新点数(使用goodfeaturestotrack)。再次找到平移和旋转向量。

据我所知,当我刷新点并重新开始新的跟踪时,我无法添加平移向量以从头开始查找总运动,因为轴不断变化。任何人都可以建议我如何计算从原点移动的总和。

2 个答案:

答案 0 :(得分:0)

将所有相对摄像机位置写入4x4变换矩阵,然后将每个矩阵一个接一个地相乘。例如:

相对于原点坐标系的第1帧位置= [R1 T1]

相对于第1帧坐标系的第2帧位置= [R2 T2]

相对于第2帧坐标系的第3帧位置= [R3 T3]

相对于原点坐标系=的第3帧位置= [R1 T1] * [R2 T2] * [R3 T3]

答案 1 :(得分:0)

您要问的是一个典型的视觉里程表问题。连接李群的变换矩阵SE3。 您只需将T_1 T_2 T_3乘以T_1to3

您可以尝试使用此代码https://github.com/avisingh599/mono-vo/blob/master/src/visodo.cpp

  for(int numFrame=2; numFrame < MAX_FRAME; numFrame++)
    if ((scale>0.1)&&(t.at<double>(2) > t.at<double>(0)) && (t.at<double>(2) > t.at<double>(1))) {

      t_f = t_f + scale*(R_f*t);
      R_f = R*R_f;

    }

它是简单的数学概念。如果您感到困难,只需看一下机器人技术的正向运动学,以便于理解。只是串联部分,而不是DH算法。 https://en.wikipedia.org/wiki/Forward_kinematics