【问题标题】:2D Coordinate to 3D world coordinate2D 坐标到 3D 世界坐标
【发布时间】:2016-08-12 04:02:48
【问题描述】:

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

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: opencv computer-vision


    【解决方案1】:

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

    针孔相机模型的通用公式(假设没有失真)为:

    u = fx * (X / Z) + cx
    v = fy * (Y / Z) + cy
    

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

    X = Z / fx * (u - cx)
    Y = Z / fy * (v - cy)
    [Z = D]
    

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

    【讨论】:

      【解决方案2】:

      偶然发现了这个。我也在使用 ZED 相机。

      仅供参考,ZED API(SDK v. 1.2)为此提供了一个很好的功能: 您可以使用

      简单地检索图像上所有点的XYZ图

      sl::zed::Mat xyz = zed->retrieveMeasure(sl::zed::XYZABGR);

      请注意确定这是否是您所追求的,但绝对有用:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 2020-09-17
        • 2018-01-29
        相关资源
        最近更新 更多