从相机上的2D点计算3D点及其到相机的距离

  • 本文关键字:相机 距离 计算 2D 3D 3d geometry
  • 更新时间 :
  • 英文 :


假设我有"look "one_answers";perspective"矩阵。现在我需要从相应的相机上的2d点和相机与前者之间的距离计算一个世界3d点。

当然,相反的问题很容易解决:point2D = lookAt * perspective * point3D。这意味着point3D = (lookAt * perspective)^-1 * point2D。但我不清楚这里的距离应该用在哪里,以及"附加"是什么。点的值,即用问号(x, y, z, ?)(x, y, ?, ?)表示的值。我猜这些值(或其中一些)可以从距离中得出?

或者这个任务不能以这种方式逆转?如果是这样,我该如何在不深入几何的情况下解决它?

我不知道你说的"看"是什么。和";perspective"矩阵。

也就是说,假设相机上有一个坐标系,光轴沿Z轴,光心为原点,成像平面与它的距离为f,以像素表示,我们有关系
f X/Z = i - w/2
f Y/Z = j - h/2

其中X, Y, Z为空间坐标,i, j为像素索引,w, h为图像宽度和高度(以像素为单位)。

由此,我们通过

绘制到摄像机的距离
f²D²/Z² = f²(X²+Y²+Z²)/Z² = (i - w/2)²+(j-h/2)²+f²

Z = fD/√((i - w/2)²+(j-h/2)²+f²)
X = Z/f (i - w/2)
Y = Z/f (j - h/2)

你可以通过仿射变换把这些相对于相机的坐标转换成你的世界坐标。

注意"与相机的距离"可以有不同的理解方式。它可以是真欧几里得距离,也可以是到包含该点的平面的距离。

我非常怀疑

(lookAt * perspective)^-1

存在。你不能逆看,它是一个投影矩阵,所以它有一维核因此它的行列式为零

由于没有关于这些矩阵的具体信息,这可以帮助我找出一个更几何的解决方案,只是使用蛮力计算。建立线性方程组

A = lookAt * perspective
y = 2Dpoint
x = 3Dpoint
A * x = y 

你知道y,所以用高斯消去法求解x。你将得到一个只有一个参数的解族x = x0 + t*u0。然后,取矢量e4 = [0,0,0,1]并建立方程

|perspective*(x0 + t*u0) - e4|^2 = (distance_between_x_and_camera)^2

表示未知变量t。这是一个二次方程,所以很容易解。当你找到解$t0$(有两个解,选一个使3D点更接近2D点的解),你就得到了你的位置

3Dpoint = x = x0 + t0*u0

最新更新