Geometry 将一系列深度贴图和x、y、z、θ值转换为三维模型

Geometry 将一系列深度贴图和x、y、z、θ值转换为三维模型,geometry,geometry-surface,Geometry,Geometry Surface,我有一个四旋翼,它绕着它飞行,知道它的x,y,z位置和沿x,y,z轴的角位移。它捕获恒定的图像流,这些图像被转换为深度贴图(我们可以估计每个像素和相机之间的距离) 如何编写一种算法,将这些信息转换为环境的三维模型?也就是说,我们如何根据这些信息生成虚拟3D地图 示例:下面的图片说明了quadrotor捕获的内容(顶部)以及将图像转换为什么以输入3D映射算法(底部) 让我们假设这张图像是从一台相机上拍摄的,它的x、y、z坐标(10、5、1)以某些单位表示,x、y、z轴的角位移为90、0、0度。我

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

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

示例:下面的图片说明了quadrotor捕获的内容(顶部)以及将图像转换为什么以输入3D映射算法(底部)

让我们假设这张图像是从一台相机上拍摄的,它的x、y、z坐标(10、5、1)以某些单位表示,x、y、z轴的角位移为90、0、0度。我想做的是把一堆照片坐标元组转换成一张该地区的3D地图

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


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

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

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

  • 对齐RGB和深度2D贴图。

    如果尚未完成,请参见:

  • 转换为笛卡尔坐标系。

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

    因此,在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)
    
    其中,
    像素
    为像素2D位置,
    深度(x,y)
    为相应深度,
    焦距=znear
    为固定摄像机参数(确定视野)。
    摄像机的焦点是摄像机的焦点位置。通常相机焦点在相机图像的中间,而 Znime/COD>远离图像(投影平面)。

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

  • 构造网格

    由于您的输入数据已经在空间上进行了排序,我们可以直接构建四边形网格。对于每个像素,只需取其邻域并形成四边形。因此,如果您的数据中的2D位置
    (x,y)
    转换为3D
    (x,y,z)
    ,我们可以以返回3D位置的函数形式编写iot:

    (x,y,z) = 3D(x,y)
    
    然后我可以像这样形成四边形:

    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) )
    

    <代码> >(x=0;席)已添加了请求的信息。请您详细说明映射到网格/表面的句子。谢谢SpktRe。1个快速问题:什么是“输入数据的拓扑结构”?请将您的评论转换成答案,以便我接受它。我将评论转换为答案。