【问题标题】:Converting a series of depth maps and x, y, z, theta values into a 3D model将一系列深度图和 x、y、z、theta 值转换为 3D 模型
【发布时间】:2019-07-20 12:25:19
【问题描述】:

我有一个四旋翼飞行器,它知道它的 x、y、z 位置和沿 x、y、z 轴的角位移。它捕获一个恒定的图像流,这些图像被转换为​​深度图(我们可以估计每个像素和相机之间的距离)。

如何编写一种算法,将这些信息转换为环境的 3D 模型?也就是说,我们如何从这些信息中生成虚拟 3D 地图?

示例:下图说明了四旋翼捕获的内容(上)以及图像被转换为​​输入 3D 映射算法的内容(下)

假设这张图片是从具有某些单位的 x、y、z 坐标 (10, 5, 1) 和围绕 x、y、z 轴的 90、0、0 度角位移的相机拍摄的。我想要做的是获取一堆这些照片坐标元组并将它们转换为该区域的单个 3D 地图。

7/30 编辑 1: 一个明显的解决方案是使用四旋翼相对于 x、y 和 z 轴的角度以及距离图来计算任何障碍物的笛卡尔坐标带触发。我想我可能会编写一个算法,使用这种方法和概率方法来制作粗略的 3D 地图,并可能对其进行矢量化以使其更快。

但是,我想知道是否有任何根本不同且希望更快的方法来解决这个问题?

【问题讨论】:

  • 我已经添加了请求的信息。您能否详细说明一下关于映射到网格/表面的句子?
  • 感谢 Spektre。 1 个快速问题:什么是“输入数据拓扑”?另外,请将您的 cmets 转换为答案,以便我接受。
  • 我把 cmets 转换成了 answer

标签: geometry geometry-surface


【解决方案1】:

只需将您的数据转换为笛卡尔坐标并存储结果...您已经知道输入数据的拓扑结构(数据点之间的空间关系),那么这可以直接映射到网格/表面而不是 PCL(其中将需要三角剖分或凸包等...)。

您的图像表明您已知拓扑(相邻像素在 3D 中也是相邻的......),因此您可以直接构建网格 3D 表面:

  1. 对齐 RGB 和深度 2D 贴图。

    如果这还没有完成,请参阅:

  2. 转换为笛卡尔坐标系。

    首先我们计算每个像素在相机局部空间中的位置:

    因此,RGB 图中的每个像素 (x,y) 我们找出到相机焦点的深度距离并计算相对于相机焦点的 3D 位置。为此,我们可以使用三角形相似度:

     x = camera_focus.x + (pixel.x-camera_focus.x)*depth(pixel.x,pixel.y)/focal_length
     y = camera_focus.y + (pixel.y-camera_focus.y)*depth(pixel.x,pixel.y)/focal_length
     z = camera_focus.z +                          depth(pixel.x,pixel.y)
    

    其中pixel 是像素2D 位置,depth(x,y) 是对应的深度,focal_length=znear 是固定相机参数(确定FOV)。 camera_focus 是相机焦点位置。相机焦点通常位于相机图像的中间,znear 远离图像(投影平面)。

    由于这是从移动设备中获取的,因此您需要将其转换为某个全局坐标系(使用您的相机在空间中的位置和方向)。因为那是最好的:

  3. 构造网格

    由于您的输入数据已经在空间上排序,我们可以直接构建 QUAD 网格。只需为每个像素取其邻居并形成 QUADS。因此,如果您的数据中的 2D 位置 (x,y) 使用上一个项目符号中描述的方法转换为 3D (x,y,z),我们可以以返回 3D 位置的函数形式编写 iot:

    (x,y,z) = 3D(x,y)
    

    然后我可以像这样组成QUADS:

    QUAD( 3D(x,y),3D(x+1,y),3D(x+1,y+1),3D(x,y+1) )
    

    我们可以使用 for 循环:

    for (x=0;x<xs-1;x++)
     for (y=0;y<ys-1;y++)
      QUAD( 3D(x,y),3D(x+1,y),3D(x+1,y+1),3D(x,y+1) )
    

    xs,ys 是地图的分辨率。

如果您不知道相机属性,您可以将focal_length 设置为任何合理常量(导致鱼眼效果和/或缩放输出)或从输入数据推断,例如:

【讨论】:

    猜你喜欢
    • 2022-06-19
    • 1970-01-01
    • 2011-01-13
    • 2017-11-18
    • 2011-06-12
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多