【问题标题】:How can I generate a point cloud from a depth image and RGB image?如何从深度图像和 RGB 图像生成点云?
【发布时间】:2021-01-13 13:56:09
【问题描述】:

如何从深度或 rgb 图像生成点云?

例子:

我需要从该深度或 rgb 图像生成点云,但我找不到相应的代码。

我设法在 3js 中找到了一个,但我无法导出它,如果我可以通过深度和 rgb 图像生成点云,有人可以帮助我吗?

【问题讨论】:

    标签: point-cloud-library point-clouds


    【解决方案1】:

    您可以看看 PCL 库是如何做到这一点的,using the OpenNI 2 grabber module:该模块负责处理来自 OpenNI 兼容设备(例如 Kinect)的 RGB/深度图像。另一个例子是depth2cloud from ROS。让我们集中在前面的例子。

    首先,它获取intrinsic camera parameters。这通常通过校准离线完成,或者您可能已经知道相机的参数。

      float constant_x = 1.0f / device_->getDepthFocalLength ();
      float constant_y = 1.0f / device_->getDepthFocalLength ();
      float centerX = ((float)cloud->width - 1.f) / 2.f;
      float centerY = ((float)cloud->height - 1.f) / 2.f;
    

    然后,经过一堆有效性检查并创建适当大小的缓冲区,它为每个点sets the 3d coordinates

      pt.z = depth_map[depth_idx] * 0.001f;
      pt.x = (static_cast<float> (u) - centerX) * pt.z * constant_x;
      pt.y = (static_cast<float> (v) - centerY) * pt.z * constant_y;
    

    从原始代码可以看出,它遍历深度图像的所有像素,然后使用相机参数将它们投影到 3d 空间中。

    类似的推理适用于convertToXYZRGBPointCloud 函数,它还负责在点上设置正确的 RGB 颜色值。

    【讨论】:

    • 但是我没有 kinect 或摄像头来获取这些参数,有没有办法只用这 2 个图像生成这个点云?
    • 恐怕你需要知道相机的特性(你也许可以从图像中的EXIF数据推导出相机模型)。另一种 hacky 方法可能是从其他现有相机获取参数并尝试这些以获取“某些东西”。但这会导致不精确的重建:(
    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2016-08-21
    • 2016-06-16
    • 1970-01-01
    • 2014-08-17
    相关资源
    最近更新 更多