使用OpenCV进行视觉里程计(又称自我运动估计)

9

我计划实现一个具有增强现实功能的应用程序。其中之一需要进行自我运动估计。只有相机在移动,在一个固定物体的空间中(没有或只有小部分会移动,因此可以忽略)。

因此,我搜索并阅读了很多资料,并偶然发现了OpenCV。维基百科明确指出它可用于自我运动估计。但我找不到任何关于它的文档。

  1. 我是否需要使用OpenCV的对象检测方法自己实现自我运动算法?(我认为这将非常复杂,因为物体将以不同的速度移动,这取决于它们与相机的距离。而且我还需要考虑旋转。)
  2. 如果是这样,我应该从哪里开始?是否有一个支持缩放和旋转的Kanade-Lucas-Tomasi特征跟踪器的良好代码示例

附言:我也知道类似vuforia这样的基于标记的框架,但使用标记会限制可能的视点,所以我想避免使用。

更新2013-01-08:我了解到自运动估计更为人所知的是视觉里程计。因此,我更新了标题。

2个回答

4

您可以在这里找到基于光流的单目视觉里程计的很好的实现(链接)

它使用emgucv(C# opencv包装器)编码,但是您将不会在将其转换回纯opencv时遇到任何问题。


非常感谢,我已经阅读了那篇论文,它是实现的基础,但其中并没有足够的信息让我自己实现。所以那个链接对我帮助很大,特别是因为它包含了论文作者源代码的更新链接。 - Christian Strempfer

2
自我运动(或视觉里程计)通常基于光流,OpenCv具有一些用于计算光流的运动分析和对象跟踪函数(与特征检测器如cvGoodFeaturesToTrack()配合使用)。
这个例子可能会有用。
虽然不是完整的解决方案,但至少可以让您朝着正确的方向前进。

我担心我必须自己实现这个算法。 :-/ - Christian Strempfer
@ChristianStrempfer 你好。我想知道你是如何解决问题的。你能发一下代码吗? - Clive
@Clive:我实现了一个简单的Android应用程序,用于跟踪视觉特征。我得出结论,移动电话还不足以支持里程计,因为我无法分析足够的每秒帧数来支持即使是缓慢的运动,并且电池很快就会耗尽。因此,我没有实现里程计算法。 - Christian Strempfer
@ChristianStrempfer 感谢您提供的信息。 - Clive

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