通过 3 个图像点 (1D) 获取相机 2d 位置

Get Camera 2d position by 3 image points (1D)

我有一张图像和 3 个点,每个点的数据如下:

如何计算相机方向(仅 left/right)和 2d 世界位置?

谢谢。

编辑:图像是普通摄影(所以是透视投影)。世界坐标是一张地图的俯视图,所以正射投影)。

给定世界中的一个点 space,投影可以表示为

             (x - cx) * cos(phi) - (y - cy) * sin(phi)
proj(x, y) = -----------------------------------------
             (x - cx) * sin(phi) + (y - cy) * cos(phi)

cxcy 是相机位置,phi 是相机旋转。投影将产生相机坐标(而非图像坐标)中的值。要将图像坐标转换为相机坐标,usw

cameraX(imageX) = (2 * imageX / W - 1) * tan(fovy / 2) * ratio 

W是图像的像素宽度,fovy是垂直视野,ratio是图像的纵横比。

那你要解给定的三个点所组成的方程组。有一个解析解,但它很复杂。所以你只剩下数值(可能是最小二乘)求解器。选择一个,插入公式并得到你的结果。由于您同时针对位置和角度进行了优化,因此您可能希望对值进行归一化,以便它们具有相似的范围。如果您不确定要使用什么优化器,我用 levmar 得到了很好的结果来解决类似的问题。

这一切都假设相机不会扭曲图像。