我尝试使用opencv从基本矩阵确定相机运动。我目前正在使用光流来跟踪每个其他帧中点的移动。基本矩阵源自基本矩阵和相机矩阵。我的算法如下
1。使用goodfeaturestotrack函数从帧中检测特征点。
2。跟踪点到下两个或三个帧(Lk光流),在此期间使用相应点计算平移和旋转矢量
3。两三帧后刷新点数(使用goodfeaturestotrack)。再次找到平移和旋转向量。
据我所知,当我刷新点并重新开始新的跟踪时,我无法添加平移向量以从头开始查找总运动,因为轴不断变化。任何人都可以建议我如何计算从原点移动的总和。
答案 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