提问者:小点点

使用2D图像坐标查找相对于相机的3D坐标


我需要使用2D图像中的u,v坐标来计算相机的X,Y坐标。我使用S7 edge摄像机向MATLAB发送720x480视频。

我所知道的:Z即物体离相机的深度、相机像素的大小(1.4um)、焦距(4.2mm)

假设图像点在(u, v)=(400,400)处。

我的方法如下:

  1. 从图像中该点的u,v像素坐标中减去中心点(240360)的像素值。这应该为我们提供相对于相机光轴(z轴)的像素坐标。原点现在位于图像的中心。因此,新坐标为:(160,-40)
  2. 将新的u,v像素值与像素大小相乘,以获得以物理单位表示的点与原点的距离。我们称之为(x,y)。我们得到(x,y)=(0.224,-0.056),单位为mm
  3. 使用公式X=xZ/f

我的做法正确吗?


共1个答案

匿名用户

你的方法是正确的,但是如果你使用更标准化的方法会更容易。我们通常做的是使用针孔相机模型给你一个世界坐标[X, Y, Z]到像素[x, y]之间的转换。看看这个指南,它描述了一步一步地构建你的转换过程。

基本上,你必须定义你的内部相机矩阵来完成转换:

>

  • FX 和 Fy 是缩放为像素距离的焦距。您可以使用 FOV 和每个方向的总像素来计算这一点。查看此处和此处以获取更多信息。
  • U0 和 V0 是穿刺点。由于我们的像素不在 [0, 0] 中居中,这些参数表示向图像中心的平移。(光轴与以像素坐标提供的图像平面的交点)。

    如果需要,您还可以添加一个倾斜因子a,您可以使用它来校正相机的剪切效果。然后,内部相机矩阵将是:

    因为深度是固定的,所以只需固定Z并继续变换,而不会出现问题。

    记住:如果你想要逆变换(相机到世界),只要反转你的相机矩阵,你就开心了!

    Matlab对于这种转换也有很好的指导。看一看。