我正在研究这个项目,我需要知道对象空间中的“精确”坐标。我开始用这篇论文寻找答案:http://dsc.ijs.si/files/papers/S101%20Mrovlje.pdf
它描述了如何找到从两个对齐的摄像机的轴到对象的距离。太棒了,所以这给了我一个距离我知道,但我只知道距离轴的距离而不是摄像机的中间距离,所以我认为如果我没有距离的距离,那就不会太好了。相机中间。
所以我想,很好,为什么不添加两个垂直于前两个相机的相机。好的,现在,这给了我一个平面的坐标。
然后我心想,如果摄像机不在同一个平面上,我肯定可以计算另一个距离,一个摄像头来自底部平面,另一个来自上部平面,但这就是问题开始发生的地方:那些相机没有对齐。
所以我想到了两个问题:
是否可以使用不平行的相机轻松使用公式?
如果是的话,会有一种方法只使用两个相机,对吗?
答案 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=0
或m2*n3-n2*m3=0
。
类似的计算适用于一般位置的两台摄像机;或者,你可以使用任何线性变换,将你的相机带到(100)
和(010)
,使用上面的计算,并使用逆变换将结果恢复到原始坐标。
存在各种病理和特殊情况(特别是,如果点位于由两个摄像机确定的轴上,则无法找到该点的位置),但这些不会显示典型数据。但是,如果您希望保证能够在所有情况下回答问题,则需要三个非共线摄像头。