给定内部,外部和Y = 0的约束,估计2D像素的深度

时间:2015-03-27 14:55:08

标签: opencv computer-vision perspective camera-calibration perspectivecamera

我有一个距地面一定高度(h)的单视角相机。通过校准我已经获得了内在参数K,旋转矩阵和平移向量[R | t],并且因为我可以完全访问摄像机和环境,所以我可以测量我想要的任何内容。 我的目标是估计相机上像素[u,v]的深度,因为我知道像素在地板上(所以它相对于相机在y = -h)。 鉴于这种限制,我做了以下(没有成功):

  • 从[u,v]创建一个新的3D点P1和相机参数+焦距:[u - cx,v - cy,f]
  • 将P乘以我的相机矩阵K的倒数并调用结果P2
  • 将P2乘以[R | t]矩阵的倒数并调用结果P3
  • P3是一个4x1向量,所以我们将它标准化并将其降低到3x1 [X1,Y1,Z1]。这一点应该是我[u,v]点
  • 的世界坐标投影
  • 当Y = -h时,按以下方式解决X和Z:
    • x = x1 *( - h / y1)
    • y = z1 *( - h / y1)

不幸的是它看起来不对劲!我已经解决了这个问题2个星期了,所以从社区获得一些帮助真的很棒。我确信我错过了很明显的东西。

再次感谢

1 个答案:

答案 0 :(得分:2)

同质图像坐标为P1 = [u,v,1][f*u,f*v,f]

与相机矩阵的倒数相乘可以得到3D点所在的光线。 P2 ~= K⁻¹ * P1 (~= is equality up to a scale factor)

假设摄像机位于C(摄像机坐标系中为(0,0,0,1)),矢量P2的格式为[x,y,z,0] 。 (最后的零使其翻译不变!)

然后您要查找的3D点位于C + k*P2,您必须求解变量k。

P3 = Rt⁻¹ * (C + k*P2)
P4 = C2  + k * P3   

C2是世界坐标中的摄像机位置。 P3是世界坐标中的向量。 P4是Y=-h

的要点

最后,插入约束Y=-h并使用k组件计算y

k = (-h - C2_y) / P3_y