使用3个或更多相机计算空间中点的3D坐标

时间:2015-07-21 13:58:33

标签: math camera geometry

我正在研究这个项目,我需要知道对象空间中的“精确”坐标。我开始用这篇论文寻找答案:http://dsc.ijs.si/files/papers/S101%20Mrovlje.pdf

它描述了如何找到从两个对齐的摄像机的轴到对象的距离。太棒了,所以这给了我一个距离我知道,但我只知道距离轴的距离而不是摄像机的中间距离,所以我认为如果我没有距离的距离,那就不会太好了。相机中间。

所以我想,很好,为什么不添加两个垂直于前两个相机的相机。好的,现在,这给了我一个平面的坐标。

然后我心想,如果摄像机不在同一个平面上,我肯定可以计算另一个距离,一个摄像头来自底部平面,另一个来自上部平面,但这就是问题开始发生的地方:那些相机没有对齐。

所以我想到了两个问题:

  • 是否可以使用不平行的相机轻松使用公式?

  • 如果是的话,会有一种方法只使用两个相机,对吗?

1 个答案:

答案 0 :(得分:0)

一般情况下,您只需要两个摄像头来回答您的问题。

现在,假设您的相机位于(100)(010),您可以找到从每个相机指向相关点的矢量,例如(m1,m2,m3)(n1,n2,n3)。那么问题就在于两条线的交叉点

(1,0,0) + s(m1,m2,m3)
(0,1,0) + t(n1,n2,n3)

从那里,我们获得方程组

-m1 * s + n1 * t = 1
 m2 * s - n2 * t = 1
 m3 * s - n3 * t = 0

系统有3个方程和2个变量,但是2e知道系统有解,因为在两条线的交点处有一个点。我建议使用高斯消元法来解决系统问题,但在大多数情况下,我们也可以通过简单的消除进行如下操作:

s = (n3/m3) * t
m2 * (n3/m3) * t - n2 * t = 1
(m2 * n3 - n2 * m3)/m3 * t = 1
t = m3/(m2 * n3 - n2 * m3)

并且问题在于

(  (n1*m3)/(m2*n3-n2*m3), 1 + (n2*m3)/(m2*n3-n2*m3), (n3*m3)/(m2*n3-n2*m3) )

或做一点代数,

(n1*m3, m2*n3, n3*m3)/(m2*n3-n2*m3)

大部分时间都有效,除非m3=0m2*n3-n2*m3=0

类似的计算适用于一般位置的两台摄像机;或者,你可以使用任何线性变换,将你的相机带到(100)(010),使用上面的计算,并使用逆变换将结果恢复到原始坐标。

存在各种病理和特殊情况(特别是,如果点位于由两个摄像机确定的轴上,则无法找到该点的位置),但这些不会显示典型数据。但是,如果您希望保证能够在所有情况下回答问题,则需要三个非共线摄像头。