我想确定立体摄像机相对于其在世界坐标系中的先前位置的位置和方向。我使用的是大黄蜂XB3相机,立体声对之间的运动约为几英尺。
这会走上正确的轨道吗?
谢谢你的帮助!
最佳答案
好吧,听起来您对自己想做的事情有一个很好的了解!拥有预先校准的立体相机(如Bumblebee)将在需要时提供点云数据-但听起来您基本上也希望使用相同的图像执行视觉测距(当然是正确的术语), GPS发生故障时,可从最后一个已知的GPS位置提供绝对方向。
首先是第一件事-我想知道您是否看过文献中有更多想法:和以往一样,通常只是知道要为Google做什么。导航“传感器融合”的整个想法(尤其是在GPS丢失的建筑区域中)促使了整个研究 Realm 。因此,以下(相交)研究 Realm 可能对您有所帮助:
所有这些方法都将遇到的问题包括:
所以,无论如何,务实地说,您想在python中做到这一点(通过OpenCV绑定(bind))吗?
如果您使用的是OpenCV 2.4,则(合并的C / C++和Python)新的API文档为here。
首先,我建议您看以下示例:
/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 book。
然后,例如,您可以使用函数cv2.decomposeProjectionMatrix分解Essential矩阵并恢复R方向和t位移。
希望这可以帮助!最后一个警告词:对于现实世界的数据复杂性,这绝不是“解决的问题”,因此,正在进行的研究!