从3个视点获得3个图像上的三个点如何在3d空间中获取其坐标?

Duc*_*een 8 c++ python opencv

我在3d空间中有3个视点位置(3d网格上的x,y,z坐标),方向(相对于视点原点x,y,z矢量).它们都看起来,每个都确实在空间中看到了三个点(标记(x,y)和滤出的背景)(比如我们在白色图像上有一个红色,蓝色,绿色的点).除了分辨率以外,我们不知道任何其他视点 - 相机属性,这是相同(非常相似)的相机.我们怎样才能在太空获得我们的位置?

小智 6

我假设您已经校准了3台摄像机,否则我不知道您的问题是否存在解决方案.

如果您有摄像机校准参数,即摄像机矩阵(A),旋转矢量(T),平移矢量(R).从这些中你可以得到投影矩阵P = A[R|T].这意味着您可以将现实世界X中的任何3d点投影到图像i,X.Pi = x这意味着您可以使用每个视图获得线性方程组,xi' = xi.P3T - P1Tyi' = yi.P3T - P2TPiT是P中第i列的转置.您可以解决此系统使用奇异值分解的方程.

参考文献:

  1. http://www.robots.ox.ac.uk/~az/tutorials/tutoriala.pdf
  2. https://github.com/opencv/opencv_contrib/blob/master/modules/sfm/src/triangulation.cpp
  3. http://www.morethantechnical.com/2012/01/04/simple-triangulation-with-opencv-from-harley-zisserman-w-code/