我有一个图像和3个点,每个点有以下数据:
如何计算相机方向(仅左/右)和2d世界位置?
感谢。
编辑:图像是普通摄影(所以透视投影)。世界坐标是地图的俯视图,因此是正投影投影。
答案 0 :(得分:0)
考虑到世界空间中的一个点,投影可以表示为
(x - cx) * cos(phi) - (y - cy) * sin(phi)
proj(x, y) = -----------------------------------------
(x - cx) * sin(phi) + (y - cy) * cos(phi)
cx
和cy
是相机位置,phi
是相机旋转。投影将产生相机坐标值(不是图像坐标)。要将图像坐标转换为相机坐标,请使用
cameraX(imageX) = (2 * imageX / W - 1) * tan(fovy / 2) * ratio
W
是图片的像素宽度,fovy
是垂直视野,ratio
是图片的宽高比。
然后你想要解决由三个给定点形成的方程组。有一个分析解决方案,但它非常复杂。因此,您需要使用数字(可能是最小二乘)求解器。选择一个,插入公式并获得结果。由于您针对位置和角度进行了优化,因此您可能需要对值进行标准化,以使它们具有相似的范围。如果您不确定要使用哪种优化程序,那么levmar对于类似问题我的结果会很好。
这一切都假定相机不会扭曲图像。