从2D相机视图到2D鸟瞰视图的投影

时间:2019-08-09 07:15:29

标签: graphics camera computer-vision

假设我有来自相机的2D RGB图像。然后,我在其上画一个点,该点由两个参数xy定义。

Camera view

在鸟瞰图中,我想投影一条线以表示该点可能存在的所有位置(因为我没有距离信息)。实际上,我只需要x的值,因为我只对这条线感兴趣,y或该点的高度不能为我提供鸟瞰的重要信息。

那是我要寻找的结果:

Bird-eye view

我有相机光圈,我已经尝试过使用它,但是我仍然没有获得必要的变换来获得直线所在的角度。有人可以帮我吗?谢谢。

编辑:我知道相机的位置(比如说是原点(0,0))

1 个答案:

答案 0 :(得分:1)

您需要摄像机FOVxfocal_length(有时称为znear),假设屏幕(分辨率xs*ys)以透视投影为中心:

FOVx 3D

从这个角度看,只是简单的测角学问题:

FOVx 2D

FOVxfocal_length之间的关系:

FOVx = atan(xs/(2*focal_length))
focal_length = xs/(2*tan(FOVx))

最后是与ang之间的角度x

ang = atan( (x - (xs/2)) / focal_length )

如果您只想将(x,y,z)转换为鸟瞰(x',y'),请利用三角形相似性:

x' = z + focal_length
y' = (ys'/2) + (x-(xs/2))*focal_length/z

其中xs'*ys'是鸟瞰图的分辨率。但是,通常渲染到远平面(或达到某些可见性)而不是渲染到近平面……在这种情况下,只需偏移z'即可匹配您想要的范围。