Python OpenCV立体摄像机的位置

时间:2012-09-12 22:10:06

标签: python opencv computer-vision stereo-3d

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

这会在正确的轨道上吗?

  1. 获得每对的整理图像
  2. 检测/匹配特征点修正图像
  3. 计算基本矩阵
  4. 计算基本矩阵
  5. 感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

嗯,听起来你对你想做的事情有一个公平的理解!预先校准的立体相机(如Bumblebee)将在您需要时提供点云数据 - 但听起来您也基本上也希望使用相同的图像来执行视觉测距(当然是正确的术语)并在GPS发生故障时从最后已知的GPS位置提供绝对方向。

首先要做的事情 - 我想知道你是否已经看过一些更多想法的文献:一如既往,它通常只是知道谷歌的用途。用于导航的“传感器融合”的整个想法 - 特别是在GPS丢失的建成区域 - 引发了大量的研究。因此,以下(相交)研究领域可能对您有所帮助:

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

  • 处理静态场景与动态场景(即完全基于相机运动而改变的场景 - 比较由于场景中发生的独立运动而发生变化的其他场景:树木移动,汽车驶过等等。)
  • 将视觉动作的数量与真实世界的动作联系起来(我提到的另一种形式的“校准” - 对象是小还是远?这是立体声信息可以证明非常方便的地方,我们会看到... )
  • 问题的因素化/优化 - 特别是随着时间的推移处理相机路径上的累积误差和异常值特征(交易的所有技巧:捆绑调整,ransac等)

所以,无论如何,实际上,你想在python中做这件事(通过OpenCV绑定)?

如果您使用的是OpenCV 2.4(组合的C / C ++和Python)新的API文档是here

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

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

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

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

最终,正如您在问题中正确指定的那样,您需要Essential矩阵E - 因为这是在实际物理坐标中操作的(不仅仅是沿着epipoles的像素之间的映射)。我一直认为基本矩阵是基本矩阵的一般化,通过它可以省略相机内部校准(K)的(非本质)知识,反之亦然。

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

E =  K'^T F K

所以,你毕竟需要知道你的立体相机校准K!参见着名的哈特利& amp; Zisserman book了解更多信息。

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

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