如何从已知物体的图片计算相机的位置/方向?

问题描述:

我在3D空间中有一个已知的对象(方形),我知道它的角*的确切位置。 我拍摄了该物体的照片,并且我已经能够精确地识别照片上的哪个像素对应于正方形的哪个角落。 (我也知道相机的传感器分辨率和镜头的焦距**)。如何从已知物体的图片计算相机的位置/方向?

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

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

**焦距不是以35mm等效值表示,而是以离焦点1米远的视口的宽度和高度表示。

你试图做的是'单反'。

OpenCV库提供的各种功能来实现这一点 - 你可以在这里阅读有关的一些数学:

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

尤其是findHomography功能将利用之间的对应点的列表采样图像和相机图像来计算相机位置的矩阵。