gpt4 book ai didi

3d 到 2d 投影矩阵

转载 作者:行者123 更新时间:2023-12-03 05:03:35 24 4
gpt4 key购买 nike

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

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

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

最佳答案

这将为您提供两组,每组包含 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 个变量,以及另外 1 个用于缩放 2-D 视点的变量,因为我们将能够消除“中心”坐标( xc,yc)。

因此,如果您有 4 个点并将 2-D 视点转换为相对于显示器中心,那么您可以得到 13 个变量的 14 个联立方程并求解。

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

关于3d 到 2d 投影矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/130829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com