用基础矩阵 OpenCV 确定相机运动

3
我尝试使用opencv从基础矩阵确定相机运动。我目前正在使用光流来跟踪每个其他帧中点的移动。基本矩阵是从基础矩阵和相机矩阵派生出来的。我的算法如下:
1. 使用“goodfeaturestotrack”函数从帧中检测特征点。
2. 将这些点跟踪至下两个或三个帧(使用Lk光流算法),期间用对应的点计算平移和旋转向量。
3. 在两个或三个帧之后刷新这些点(使用“goodfeaturestotrack”)。再次找到平移和旋转向量。
我知道不能将平移向量相加以找到从起点开始的总移动,因为当我刷新点并重新开始跟踪时,轴会不断变化。请问有人可以建议我如何计算自起点以来的运动总和吗?

如果您没有旋转,则应该能够添加您的翻译向量;如果您有旋转,则将向量转换为3x4姿态矩阵,并乘以每个帧的矩阵,以获得姿态总变化。 - Hammer
谢谢你的帮助!!其实我已经有旋转了,会尝试你的建议。 - madhu_kiran
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

0

将相机的所有相关位置写在一个4x4的变换矩阵中,然后依次相乘。例如:

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接