我需要使用2D图像中的u,v坐标来计算相机的X,Y坐标。我使用S7 edge摄像机向MATLAB发送720x480视频。
我所知道的:Z即物体离相机的深度、相机像素的大小(1.4um)、焦距(4.2mm)
假设图像点在(u, v)=(400,400)处。
我的方法如下:
我的做法正确吗?
你的方法是正确的,但是如果你使用更标准化的方法会更容易。我们通常做的是使用针孔相机模型给你一个世界坐标[X, Y, Z]
到像素[x, y]
之间的转换。看看这个指南,它描述了一步一步地构建你的转换过程。
基本上,你必须定义你的内部相机矩阵来完成转换:
>
U0 和 V0 是穿刺点。由于我们的像素不在 [0, 0]
中居中,这些参数表示向图像中心的平移。(光轴与以像素坐标提供的图像平面的交点)。
如果需要,您还可以添加一个倾斜因子a,您可以使用它来校正相机的剪切效果。然后,内部相机矩阵将是:
因为深度是固定的,所以只需固定Z并继续变换,而不会出现问题。
记住:如果你想要逆变换(相机到世界),只要反转你的相机矩阵,你就开心了!
Matlab对于这种转换也有很好的指导。看一看。