我正在研究透视投影,我偶然发现了这个概念:
基本上它说如果我有一个点(x,y,z),我可以通过这样做将它投影到我的透视屏幕(相机空间)中
x' = x/z
y' = y/z
z' = f(z-n) / z(f-n)
我不明白为什么 x' = x/z 或 y' = y/z
我正在研究透视投影,我偶然发现了这个概念:
基本上它说如果我有一个点(x,y,z),我可以通过这样做将它投影到我的透视屏幕(相机空间)中
x' = x/z
y' = y/z
z' = f(z-n) / z(f-n)
我不明白为什么 x' = x/z 或 y' = y/z
看待这一点的一种方法是,您尝试做的是与一条穿过观察者位置(假设位于原点:)0,0,0
和您希望投影的空间点 (P) 的线相交。
因此,您采用线的方程,即P' = P * a
,其中a
只是一个标量值并求解P'.Z = 1
(这是您的投影平面所在的位置)。当标量倍数为 时,这是微不足道的1 / P.Z
,因此投影点为(P.X, P.Y, P.Z) * (1 / P.Z)
在几何上,这是一个相似三角形的问题。
在您的图中,因为(x,y,x)
与 位于同一条虚线上(x',y',z')
:
triangle [(0,0,0), (0,0,z), (x,y,z)]
is similar to
triangle [(0,0,0), (0,0,z'), (x',y',z')]
这意味着相应的边具有固定的比例。而且,进一步,原始向量与投影向量成比例。最后,请注意,名义投影平面位于z' = 1
:
(x,y,z) / z = (x',y',z') / z'
-> so, since z' = 1:
x'/z' = x' = x/z
y'/z' = y' = y/z
[警告:请注意,z'
我的答案与问题中的出现不同。问题z' = f(z-n) / z(f-n)
并不直接对应于物理点:它是一个“深度值”,用于执行隐藏表面移除等操作。]
齐次坐标使我们能够在无穷远处表示点/线。我们将 1 添加到向量表示中。3d空间中一点的距离越远,它倾向于向光学中心移动。笛卡尔到齐次 p=(x,y)to(x,y,1) 齐次到笛卡尔 (X, Y, Z)to(X/Z, Y/Z) 例如,1. 你在飞机上旅行并且当您向下看时,似乎点从一个瞬间移动到另一个瞬间并不快。这是距离非常大,距离=1/Disparity(两帧中同一点的漂移)。2.尝试用Infinity代入视差,表示距离为0。