如何从已知物体的图片中计算相机position/orientation?

How to calculate camera position/orientation from the picture of a known object?

我有一个已知的 3D 物体(正方形)space,我知道它的角的确切位置*。 我给这个物体拍了一张照片,我已经能够准确地识别照片上的哪个像素对应于正方形的哪个角。 (我也知道相机的传感器分辨率和镜头的焦距**)。

如何计算相机的位置和方向?我想在 C# 中实现解决方案。这听起来像是 3D 游戏引擎中一直使用的相当基本的矩阵运算,只是执行相反的方向。我希望它真的是。 :)

*所有位置和长度信息在本地坐标系中以[米]表示。没有使用 lat/lons。

**焦距不是用35mm当量来表示,而是用距焦点1米处视口的宽度和高度来表示。

您要执行的操作的术语是 'Homography'。

OpenCV 库提供了多种函数来实现此目的 - 您可以在此处阅读一些数学知识:

http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html?highlight=findhomography

特别是,findHomography 函数将利用样本图像和相机图像之间的点对应列表来计算相机位置的矩阵。