2D 坐标到 3D 世界坐标

Sha*_*rma 4 opencv computer-vision

我想将 2D 图像坐标转换为 3D 世界坐标。我正在使用 ZED 相机,它是一个立体相机,它附带的 sdk 提供了视差图。因此我有深度。两个摄像头相互平行。虽然这个问题是微不足道的,但我无法弄清楚转换背后的数学。我有以下信息

1) 我有像素信息(即由 u 和 v 表示的行和列号)和该像素处的深度 D(以米为单位)。

2) 我也知道两台相机的焦距和 cx, cy 值

3)投影B(基线)的两个中心之间的距离是已知的。

我想知道如何从图像中的像素(行、列、深度)到世界坐标中的(X、Y、Z)。

假设世界坐标系的原点为两个相机之间的中心点,垂直于地面下方。(相机的高度称为 H)。

谢谢你。

小智 5

正如您已经知道每个像素的深度 D(以米为单位),您不需要相机之间的基线 B(您需要根据视差值计算深度)。事实上,D 已经是你搜索到的 Z 坐标。

针孔相机模型的一般公式(假设没有失真)是:

u = fx * (X / Z) + cx
v = fy * (Y / Z) + cy
Run Code Online (Sandbox Code Playgroud)

因此,计算 3D 坐标就很简单了:

X = Z / fx * (u - cx)
Y = Z / fy * (v - cy)
[Z = D]
Run Code Online (Sandbox Code Playgroud)

请注意,这仅在您使用校正后的图像(或低失真图像)时才正确。