通过比较3d空间中的点来查找相机位置

时间:2012-09-25 23:25:38

标签: math 3d geometry

我有两个由同一物体的深度相机拍摄的图像。我可以在对象上标记一些(比如说5个)相同的点,并获得相对于摄像机位置的坐标。是否有可能在第二个图像中找到相机位置,假设第一个图像的0,0,0基于这些坐标?

示例:

图片1
摄像头位置:0,0,0
摄像机角度(俯仰,滚动,航向):0,0,0

第1点:21.3,33.2,44.1
第2点:28.3,39.2,41.5
第3点:23.4,31.1,53.4

图片2
相机位置:?
摄像机角度:?

第1点:23.4,31.2,44.7
...

我假设根据点之间的距离以及点和相机之间的距离可以计算出来。是否可以使用简单的脚本完成,例如在python中,没有3d库?

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果您对相机一无所知,我认为两幅图像无法实现。除了绝对缩放模糊之外(如:如果你将场景中的所有内容缩小10倍,你的相机图像将是相同的......),显然存在深度缩放歧义,没有多少匹配对可以固定。您可以通过在3d点集之间提供一定数量的绝对距离值,或通过提供必要的额外长度比例的其他方法来解决此歧义。我在这个主题上找到了paper,虽然不清楚它解决的问题是否正是你正在寻找的问题。

如果您首先通过测量相机的几何成像特征校准相机,您可以更轻松地计算两张照片的相对相机位置(虽然没有其他信息,您仍然会遇到绝对缩放问题!)。如果我没记错的话,你需要至少3分,但是4的数学要简单得多。关于这个主题的一本书(在线的样本章节)是Multiple View Geometry in Computer Vision;另一个是The Geometry of Multiple Images

OpenCV中有一个用于执行此类操作的库。然而,它没有完全正如你正在寻找的功能 - 弄清楚如何使用它确实需要对它背后的数学有所了解,所以你需要阅读一本关于这个主题的书。