下面是正确的步骤:
- 获取每一对图像的校正图像
- 检测/匹配校正图像上的特征点
- 计算基础矩阵
- 计算本质矩阵
好的,听起来你对自己想要做的事情有一定的了解!拥有预校准的立体相机(例如Bumblebee)将在需要时提供点云数据 - 但是似乎你还想使用相同的图像执行视觉里程计(当然是正确的术语),并从上一个已知GPS位置提供绝对方向,当GPS失效时。
首先 - 我想知道你是否查阅过文献以获取更多想法:通常只需要知道该搜索什么。在导航中“传感器融合”的整个概念 - 特别是在GPS失去信号的城市区域 - 促进了一整个研究领域。因此,以下(交叉)研究领域可能对你有所帮助:
所有这些方法都可能会遇到以下问题:
所以,实际上,您想通过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 book。
例如,您可以使用函数cv2.decomposeProjectionMatrix来分解本质矩阵并恢复R方向和t位移。
希望这可以帮助您!最后警告一句:这绝不是针对真实世界数据复杂性的“已解决问题” - 因此持续进行研究!