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

Wou*_*r92 5 3d opencv 2d image-processing

我需要使用OpenCV查找像素的世界坐标。因此,当我在图像(即左上角)中获取像素(0,0)时,我想知道该像素在图像平面上对应的3D世界空间坐标。我知道一个像素对应于世界空间中的3D点线,但是我想具体说明位于图像平面本身上的那个像素。

这是OpenCV针孔模型的公式,其中我具有第一个(本征)矩阵和第二个(本征)矩阵。我知道我有u和v,但我不知道如何从此u和v到达正确的X,Y和Z坐标。

针孔模型Opencv

我已经尝试过的

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

那么,有什么想法吗?

Fra*_*ari 5

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

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

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

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

将它们乘以(固有)相机矩阵 K 的逆矩阵,您将得到度量相机坐标中的相同点。

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

  • 为什么使用 fx 而不是 fy? (2认同)