0

我正在尝试将从英特尔实感设备捕获的数据转换为我需要处理的 Open3D PointCloud 对象。目前我只有rosbag 示例文件可以使用,但我认为应该对来自设备的直接流使用类似的程序。到目前为止,我设法使用pyrealsense2和 OpenCV 读取和显示文件。

现在我正在尝试使用 Open3D。例如(使用结构光短程示例):

import open3d as o3d

bag_reader = o3d.t.io.RSBagReader()
bag_reader.open("structured.bag")

rgbd_image = bag_reader.next_frame()
pcd = o3d.geometry.PointCloud.create_from_rgbd_image(
    rgbd_image,
    o3d.camera.PinholeCameraIntrinsic(
        o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault)))

这会导致错误提示:

TypeError: create_from_rgbd_image(): incompatible function arguments.

因此,我尝试Open3D.geometry.RGBDImage使用“正确”格式手动创建:

import numpy as np

raw_rgb = np.array(rgbd_image.color)
raw_depth = np.array(rgbd_image.depth)
new_rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(
    o3d.geometry.Image(raw_rgb), o3d.geometry.Image(raw_depth))

现在创建PointCloud时没有TypeError,但是完全错误,实际上是这样显示的:

o3d.visualization.draw_geometries([pcd])

正视图 侧面图

实际上,它应该看起来像这样(请注意,当 rosbag 文件实际上是视频时,我只是在详细说明第一帧):

正确的

我还尝试使用从 rosbag 文件中提取的参数来处理内在和外在矩阵,但点云看起来仍然很混乱。

我究竟做错了什么?在 Open3D 中从 RealSense 数据正确重建点云的方法是什么?

4

0 回答 0