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

问题描述 投票:0回答:1

我需要使用2D图像中的u,v坐标来计算相对于摄影机的X,Y坐标。我正在使用S7边缘相机向MATLAB发送720x480视频供稿。

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

假设图像点位于(u,v)=(400,400)。

我的方法如下:

  1. 从图像中点的u,v像素坐标中减去中心点(240,360)的像素值。这应该给我们相对于相机光轴(z轴)的像素坐标。现在,原点位于图像的中心。因此,新坐标为:(160,-40)
  2. 将新的u,v像素值乘以像素大小,以物理单位获得点到原点的距离。我们称之为(x,y)。我们以毫米为单位得到(x,y)=(0.224,-0.056)。
  3. 使用公式X = xZ / f和Y = yZ / f来计算相对于相机光轴的真实世界中的X,Y坐标。

我的方法正确吗?

matlab image-processing robotics coordinate-systems
1个回答
0
投票

您的方法采用了正确的方法,但是如果您使用更标准化的方法,将会更容易。我们通常要做的是使用Pinhole Camera Model为您提供世界坐标[X, Y, Z]与像素[x, y]之间的转换。看看this guide,它逐步描述了构建转换的过程。

基本上,您必须定义内部摄像机矩阵才能进行转换:

enter image description here

  • fx和fy是缩放的焦距以用作像素距离。您可以使用FOV和每个方向上的总像素进行计算。查看herehere了解更多信息。
  • u0和v0是穿刺点。由于我们的像素不在[0, 0]的中心,因此这些参数表示到图像中心的平移。 (光轴与以像素坐标提供的像平面的交点)。

  • 如果需要,您还可以添加歪斜因子a,可用于校正相机的剪切效果。然后,内部摄像机矩阵将为:

enter image description here

由于您的深度是固定的,所以只需固定Z并继续进行转换就不会出现问题。

Matlab has also a very good guide for this transformation. Take a look.

© www.soinside.com 2019 - 2024. All rights reserved.