我想确定立体相机相对于其在世界坐标中的先前位置的位置和方向。我正在使用大黄蜂XB3相机,立体声对之间的动作大约是几英尺。
这会在正确的轨道上吗?
感谢您的帮助!
答案 0 :(得分:3)
嗯,听起来你对你想做的事情有一个公平的理解!预先校准的立体相机(如Bumblebee)将在您需要时提供点云数据 - 但听起来您也基本上也希望使用相同的图像来执行视觉测距(当然是正确的术语)并在GPS发生故障时从最后已知的GPS位置提供绝对方向。
首先要做的事情 - 我想知道你是否已经看过一些更多想法的文献:一如既往,它通常只是知道谷歌的用途。用于导航的“传感器融合”的整个想法 - 特别是在GPS丢失的建成区域 - 引发了大量的研究。因此,以下(相交)研究领域可能对您有所帮助:
您将遇到的所有这些方法的问题包括:
所以,无论如何,实际上,你想在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位移。
希望这有帮助!最后一句警告:这绝不是现实世界数据复杂性的“解决问题” - 因此正在进行的研究!