计算机视觉 - 确定相机在移动时指向的角度?

时间:2013-12-17 17:47:25

标签: video video-processing computer-vision

我有时会将一台摄像机连接到我的摩托车头盔上并四处骑行。显然我稍微移动了一下头,转过角落等等。这是一个sample, edited video to give you an idea。除了原始原件都将在一个序列中(没有切割)。

鉴于这样的视频,是否有可能找出/做出关于每帧相对于前一帧指向哪个方向的好猜测,并因此弄清楚每个帧指向哪个方向?

我认为应该可以使用特征检测(SIFT?)和/或图像稳定中使用的相同类型的东西?但是我没有计算机视觉方面的经验,所以我不确定这是不可能的,以前做过的,或者是否已经有了它的库。因此这个问题。

我有很多Python经验和一些gstreamer和C经验。开源解决方案更可取,并且“在Linux上运行”是必需的。我很想自己编写代码,但我不知道是否已经完成了任何数学/算法(如果有的话,是什么?)

1 个答案:

答案 0 :(得分:3)

如果你不想从运动算法中实现一个完整的结构(这是一个大任务),我想尝试一下这个想法:

首先跟踪从一帧到下一帧的兴趣点。 SIFT或SURF可能是一个良好的开端。大多数兴趣点都不会移动很远,一旦你处理了前两帧,你就可以很好地估计每个兴趣点在下一帧中的位置,所以这应该是可能的。

一旦两个帧之间存在特征对应关系,每个特征点的移动(大约)是两个分量的总和:远离消失点的一个分量(即自行车的运动方向)和一个分量对于每个点(相机的方向变化)都是相同的。

enter image description here

从数学角度来说,这意味着点p在时间t1的位置是:

enter image description here

其中v是消失点,d是远离图像中消失点的移动速度(取决于物体与观察者的距离和自行车的速度),m是相机的运动。对于n个点,这是2 * n方程和4 + n个未知数,这意味着如果你有4个或更多个点,你可以找到(近似)解。