如何从深度图像和 RGB 图像生成点云?
How can I generate a point cloud from a depth image and RGB image?
如何从深度或 rgb 图像生成点云?
示例:
我需要从该深度或 rgb 图像生成点云,但我找不到相应的代码。
我在 3js 中找到了一个,但我无法导出它,如果我可以通过深度和 rgb 图像生成点云,有人可以帮助我吗?
您可以看看 PCL 库是如何做到这一点的,using the OpenNI 2 grabber module: this module is responsible for processing RGB/depth images coming from OpenNI compatible devices (e.g. Kinect). Another example is the 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 space。
类似的推理适用于 convertToXYZRGBPointCloud
函数,它还负责在点上设置正确的 RGB 颜色值。
如何从深度或 rgb 图像生成点云?
示例:
我需要从该深度或 rgb 图像生成点云,但我找不到相应的代码。
我在 3js 中找到了一个,但我无法导出它,如果我可以通过深度和 rgb 图像生成点云,有人可以帮助我吗?
您可以看看 PCL 库是如何做到这一点的,using the OpenNI 2 grabber module: this module is responsible for processing RGB/depth images coming from OpenNI compatible devices (e.g. Kinect). Another example is the 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 space。
类似的推理适用于 convertToXYZRGBPointCloud
函数,它还负责在点上设置正确的 RGB 颜色值。