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

Find world space coordinate for pixel in OpenCV

我需要使用 OpenCV 找到像素的世界坐标。因此,当我在我的图像中获取像素 (0,0)(即 upper-left 角)时,我想知道该像素在我的图像平面上对应于哪个 3D 世界 space 坐标。我知道单个像素对应于世界中的一行 3D 点 space,但我想要特定的位于图像平面本身的点。

这是我有第一个(内部)和第二个(外部)矩阵的 OpenCV 针孔模型的公式。我知道我有 u 和 v,但我不知道如何从这个 u 和 v 得到正确的 X、Y 和 Z 坐标。

我已经尝试过的:

那么,有什么想法吗?

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

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

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

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

将它们乘以(固有)相机矩阵 K 的倒数,您将在相机坐标系中得到相同的点。

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