2

我尝试使用opencv从基本矩阵确定相机运动。我目前正在使用光流来跟踪每隔一帧中点的移动。基本矩阵是从基本矩阵和相机矩阵推导出来的。我的算法如下

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

2. 跟踪点到接下来的两到三帧(Lk 光流),在此期间使用对应点计算平移和旋转向量

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

我知道我无法添加平移向量来从一开始就找到总运动,因为当我刷新点并重新开始新的跟踪时,轴会不断变化。谁能建议我如何计算从原点开始的运动总和。

4

2 回答 2

1

你问的是一个典型的视觉里程计问题。连接李群的变换矩阵 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

于 2019-05-22T03:06:47.673 回答
0

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

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

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

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

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

于 2017-08-04T21:43:20.840 回答