如何使用已知的正交(相机)投影矩阵将 2d 中的后点转换为 3d?

How to convert back points in 2d to 3d with known orthogonal (camera) projection matrix?

我有一个带有 2d 点的 numpy 数组,我通过以下等式将其从 3d 转换为 2d:

https://wikimedia.org/api/rest_v1/media/math/render/svg/198f15da062c7ce00598d7a2f9bd8169d7042ed3

如何将点转换回 3D?

我使用了上图中的自顶向下视图矩阵。在维基百科中找到:https://en.wikipedia.org/wiki/Orthographic_projection

#To 2D from 3d:
points2D = np.array([np.matmul(camera_pos, point) for point in points3D])[:,:2]

您不能仅使用投影点将其转换回来。请注意,您的投影基本上只是查看 (x,y) 值并丢弃 z 值,因此在执行此操作后无法知道 z 是什么。

例如,考虑点 u = [1,2,3]v=[1,2,-3]。这些都投影到 [1,2,0],因此当我们尝试反转(撤消)投影时,无法知道我们是否应该将 [1,2,0] 变成 uv

在矩阵运算方面,这是因为投影矩阵不可逆(单位矩阵除外)。

除了投影点之外,您还需要更多信息才能恢复原始点。