point-cloud-library - 如何从深度图像和 RGB 图像生成点云?
问题描述
如何从深度或 rgb 图像生成点云?
例子:
我需要从该深度或 rgb 图像生成点云,但我找不到相应的代码。
我设法在 3js 中找到了一个,但我无法导出它,如果我可以通过深度和 rgb 的图像生成点云,有人可以帮助我吗?
解决方案
你可以看看 PCL 库是如何使用 OpenNI 2 抓取模块的:这个模块负责处理来自 OpenNI 兼容设备(例如 Kinect)的 RGB/深度图像。另一个例子是来自 ROS 的 depth2cloud。让我们集中讨论前一个例子。
首先,它获取相机的内在参数。这通常通过校准离线完成,或者您可能已经知道相机的参数。
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;
然后,经过一系列有效性检查并创建适当大小的缓冲区,它为每个点设置 3d 坐标:
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 颜色值。
推荐阅读
- ubuntu - Ubuntu 21.04 无法使用用户名.surname 加入域
- oauth-2.0 - PKCE 的授权代码流正确地将 code_verifier 分配给 code_challenge
- reactjs - 调用api时无限滚动在反应中不起作用
- python - 我正在尝试获取代码以使用 python 将纪元时间(例如 1621690499.4047496)转换为 unix 十六进制时间戳(例如 60a90883XXXXXXXX)
- javascript - 删除请求消息
- javascript - 对 ac# 控制器进行 ajax 调用时如何显示进度条
- image-processing - 将图案应用于实心像素并保持背景透明?
- nginx - k3s - ingress-nginx - 路径匹配确实有效
- rust - 结果
输入锈。为什么引用不能作为 T 或 E 传递? - python - PySide2 中的“QtBluetooth”支持(QT for python 项目)