4

我想确定立体相机相对于其在世界坐标中的先前位置的位置和方向。我正在使用 Bumblebee XB3 相机,立体声对之间的运动大约是几英尺。

这会在正确的轨道上吗?

  1. 获取每对的校正图像
  2. 检测/匹配特征点校正图像
  3. 计算基本矩阵
  4. 计算基本矩阵

谢谢你的帮助!

4

1 回答 1

4

好吧,听起来您对自己想要做什么有一个公平的了解!拥有一个预先校准的立体相机(如 Bumblebee)将在您需要时提供点云数据 - 但听起来您基本上也想使用相同的图像来执行视觉里程计(当然是正确的术语)和当 GPS 出现故障时,提供从最后已知 GPS 位置的绝对方向。

首先要做的事情-我想知道您是否已经查看了文献以获得更多想法:与以往一样,它通常只是知道谷歌搜索的内容。用于导航的“传感器融合”的整个想法——尤其是在 GPS 丢失的建筑区域——已经引发了一系列的研究。因此,也许以下(交叉)研究领域可能对您有所帮助:

您将在所有这些方法中遇到的问题包括:

  • 处理静态与动态场景(即纯粹基于相机运动而变化的场景 - 参见其他因场景中发生的独立运动而变化的场景:树木移动、汽车驶过等)。
  • 将视觉运动的数量与现实世界的运动相关联(我提到的另一种“校准”形式 - 物体是小还是远?这是立体信息可以证明非常方便的地方,正如我们将看到的......)
  • 问题的分解/优化 - 特别是随着时间的推移处理相机路径上的累积误差和异常特征(所有交易技巧:捆绑调整、ransac 等)

所以,无论如何,务实地说,你想在 python 中做到这一点(通过 OpenCV 绑定)?

如果您使用的是 OpenCV 2.4(结合 C/C++ 和 Python)新的 API 文档在这里

作为起点,我建议查看以下示例:

/OpenCV-2.4.2/samples/python2/lk_homography.py

它使用函数cv2.findHomography从光流中提供了一个很好的基本自我运动估计实例。

当然,这个单应性H仅适用于点共面的情况(即在相同的投影变换下位于同一平面上——因此它适用于平坦道路的视频)。但是 - 通过相同的原则,我们可以使用基本矩阵 F 来表示对极几何中的运动。这可以通过非常相似的函数cv2.findFundamentalMat来计算。

最终,正如您在上面的问题中正确指定的那样,您需要基本矩阵 E - 因为这是在实际物理坐标中运行的矩阵(不仅仅是沿极点的像素之间的映射)。我一直认为基本矩阵是基本矩阵的概括,通过它省略了相机内在校准 (K) 的(非基本)知识,反之亦然。

因此,关系可以正式表示为:

E =  K'^T F K

因此,您毕竟需要了解立体相机校准 K!有关更多信息,请参阅著名的 Hartley & Zisserman书籍

然后,您可以使用函数cv2.decomposeProjectionMatrix分解基本矩阵并恢复您的 R 方向和 t 位移。

希望这可以帮助!最后一句警告:对于现实世界数据的复杂性,这绝不是一个“已解决的问题”——因此正在进行研究!

于 2012-09-14T15:59:32.267 回答