3d到2d投影矩阵

时间:2020-03-06 14:41:54  来源:igfitidea点击:

我在3D空间中有3个点,我知道确切的位置。假设它们是:(x0,y0,z0),(x1,y1,z1)和(x2,y2,z2)。

另外,我有一台相机正在注视这三个点,并且我知道这三个点在相机视图平面上的2D位置。因此,例如,((x0,y0,z0)将是((x0',y0')),而((x1,y1,z1)将是(x1,y1')(x2,从相机的角度来看,y2,z2)将为((x2',y2')`。

找到投影矩阵的最简单方法是将那些3D点投影到摄像机视平面上的2D点。我们对相机的位置一无所知。

解决方案

这为我们提供了两个集合,每个集合包含3个变量的3个方程式:

a*x0+b*y0+c*z0 = x0'
a*x1+b*y1+c*z1 = x1'
a*x2+b*y2+c*z2 = x2'

d*x0+e*y0+f*z0 = y0'
d*x1+e*y1+f*z1 = y1'
d*x2+e*y2+f*z2 = y2'

只需使用在情况下最简单的求解联立方程的方法("手动"解决这些问题就不难了)。然后,变换矩阵就是((a,b,c)(d,e,f))。

...

实际上,这过于简单了,并且假设摄像机指向3D坐标系的原点且没有透视图。

从角度来看,转换矩阵的工作方式类似于:

( a, b, c, d )   ( xt )
( x, y, z, 1 ) ( e, f, g, h ) = ( yt )
               ( i, j, k, l )   ( zt )

( xv, yv ) = ( xc+s*xt/zt, yc+s*yt/zt ) if md < zt;

但是4x3矩阵比12自由度更受约束,因为我们应该

a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1

因此,我们应该有4个点才能获得8个方程,以涵盖相机位置和角度的6个变量,以及2-D视点缩放的1个变量,因为我们将能够消除"中心"坐标(xc,yc )。

因此,如果我们有4个点并将2-D视点转换为相对于显示中心,则可以在13个变量中获得14个联立方程并求解。

不幸的是,六个方程不是线性方程。幸运的是,这些方程式中的所有变量都被限制在-1和1之间的值,因此求解方程式仍然可能可行。

我认为没有足够的信息来找到明确的解决方案。在不知道相机位置并且不知道视平面的情况下,可以解决此问题的矩阵数量是无限的。

相机具有(至少)7个自由度,位置3个,方向3个,FOV 1个。我敢肯定,如果我错了,有人会纠正我,但是对于完整的解决方案,似乎3分还不够。

有关此问题的一般解决方案,请在Graphics Gems II中查找" View Correlation"。