在OpenCV中查找像素的世界空间坐标

时间:2015-01-18 16:12:14

标签: opencv image-processing 3d 2d

我需要使用OpenCV找到像素的世界坐标。所以当我在我的图像中拍摄像素(0,0)(左上角)时,我想知道这个像素在我的图像平面上对应的3D世界空间坐标。我知道单个像素对应于世界空间中的一条3D点,但我想要特定的是位于图像平面上的那个。

这是OpenCV针孔模型的公式,我有第一个(内在函数)和第二个(外在函数)矩阵。我知道我有你和你,但我不知道如何从你和你的正确的X,Y和Z坐标。

Pinhole Model Opencv

我已经尝试过了:

  • 我想把s设置为1并通过添加1从[u v 1] ^ T创建一个齐次坐标,如下所示:[u v 1 1] ^ T.然后我将内在函数与外在函数相乘,并通过添加以下行将其变为4x4矩阵:[0 0 0 1]。然后将其反转并乘以[uv 1 1] ^ T得到我的X,Y和Z.但是当我检查四个像素是否计算在同一平面(图像平面)上时,这是错误的。

那么,有什么想法吗?

1 个答案:

答案 0 :(得分:2)

IIUC你希望交叉点I与从相机中心反投影给定像素P的光线的像平面。

让我们先定义坐标系。通常的OpenCV约定如下:

  • 图像坐标:左上角的原点,u轴向右(增加列),v轴向下。
  • 摄像机坐标:摄像机中心C的原点,z轴朝向场景,x轴朝右,y轴朝下。

然后相机帧中的图像平面是z = fx ,其中fx是以像素为单位测量的焦距,而像素(u,v)具有相机坐标(u - cx ,v - cy fx )。

将它们乘以(内在)相机矩阵K的倒数,你将在测量相机坐标中获得相同的点。

最后,乘以世界到相机坐标变换的倒数[R | t],你将得到世界坐标中的相同点。