假设我有来自相机的2D RGB图像。然后,我在其上画一个点,该点由两个参数x
和y
定义。
在鸟瞰图中,我想投影一条线以表示该点可能存在的所有位置(因为我没有距离信息)。实际上,我只需要x
的值,因为我只对这条线感兴趣,y
或该点的高度不能为我提供鸟瞰的重要信息。
那是我要寻找的结果:
我有相机光圈,我已经尝试过使用它,但是我仍然没有获得必要的变换来获得直线所在的角度。有人可以帮我吗?谢谢。
编辑:我知道相机的位置(比如说是原点(0,0))
答案 0 :(得分:1)
您需要摄像机FOVx
或focal_length
(有时称为znear
),假设屏幕(分辨率xs*ys
)以透视投影为中心:
从这个角度看,只是简单的测角学问题:
FOVx
和focal_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'
即可匹配您想要的范围。