从单个相机重建运动

时间:2012-07-02 20:47:47

标签: image-processing 3d computer-vision

我有一个校准过的相机(已知的内在参数,即相机矩阵K已知,以及失真系数)。

我想重建相机的三维轨迹。关于这个场景没有先验知识。

通过呈现两个看起来在同一场景上的图像并从中提取两组相应的匹配特征点来简化问题(SIFT,SURF,ORB等) 我的问题是如何计算到视点之间的相机外部参数(即旋转矩阵R和平移向量t)?

我已经设法计算基本矩阵,并且因为K知道,所以也是基本矩阵。使用David Nister's efficient solution to the Five-Point Relative Pose Problem我设法获得了4种可能的解决方案,但是:

  1. 对基本矩阵E~U * diag(s,s,0)* V'的约束并不总是适用 - 导致不正确的结果。 [编辑]:取平均奇异值似乎纠正了结果:)一个下来

  2. 如何判断四者中哪一个是正确的?

  3. 由于

2 个答案:

答案 0 :(得分:2)

你对第1点的解决方案是正确的:diag((s1 + s2)/ 2,(s1 + s2)/ 2,0)。

至于告知四种解决方案中哪一种是正确的,只有一种解决方案相对于相机框架的所有点都会给出正深度。那就是你想要的那个。

可以在此处找到检查哪个解决方案正确的代码:来自http://cs.gmu.edu/%7Ekosecka/examples-code/essentialDiscrete.mhttp://cs.gmu.edu/%7Ekosecka/bookcode.html 他们使用U和V的决定因素来确定具有正确方向的解决方案。寻找评论“那么四种可能性”。由于你只是在估算基本矩阵,所以它很容易受到噪音的影响,如果所有的点都是共面的话,它就不会表现得很好。

此外,转换仅恢复到恒定的缩放因子内,因此您看到单位幅度的归一化平移向量的事实是完全正确的。原因是深度未知并且估计为1.你必须找到一些方法来恢复深度,就像在8点算法+ 3d重建的代码中一样(书签代码链接中的算法5.1)。

上面的示例代码的书也是一个非常好的参考。 http://vision.ucla.edu/MASKS/第5章,您感兴趣的那个,可以在Sample Chapters链接中找到。

答案 1 :(得分:0)

祝贺你的辛勤工作,听起来你已经努力学习这些技巧。 对于实际的生产强度代码,我建议您下载libmvceres,并使用它们重新编码您的解决方案。

您的两个问题实际上是:根据您收集的数据拒绝无效的解决方案。特别是,Nister(以及Stewenius的)算法通常用在类似RANSAC的求解器的内环中,它选择具有最佳拟合/最大内点数的解。