[英]How do I generate a partial view of a mesh as a point cloud in Python?
我有一个网格数据集,我想用它来生成局部视图数据作为点云。 换句话说,模拟 RGB-D 传感器的工作方式。
我的解决方案非常幼稚,所以请随意忽略它并提出另一种方法。
它包括从 o3d 可视化中获取渲染的 RGB 和渲染的 D 图像,如下所示:
vis.add_geometry(tr_mesh)
... # set some params to have a certain angle
vis.capture_screen_image('somepath.png')
vis.capture_depth_image('someotherpath.png')
这些被保存为 PNG 文件。 然后我将它们组合成一个 o3d RGBDImage:
# Load the RGB image
rgb = o3d.io.read_image(rgb_path)
# Load the depth image
depth = o3d.io.read_image(depth_path)
# Convert the RGB and depth images into pointcloud
rgbd = o3d.geometry.RGBDImage.create_from_color_and_depth(color=o3d.geometry.Image(rgb),
depth=o3d.geometry.Image(depth),
convert_rgb_to_intensity=False)
并将其转换为 PointCloud
pcd = o3d.geometry.PointCloud.create_from_rgbd_image(image=rgbd,
intrinsic=o3d.camera.PinholeCameraIntrinsic(o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault))
这有很多限制:
同样,这是一个非常幼稚的解决方案,因此非常欢迎完全不同的方法。
这不是我可以从网格生成点云吗? 因为我想要局部视图。 所以想想这个问题,但背面剔除。
回到解决方案。
不需要图像捕获。 有一个function叫vis.capture_depth_point_cloud()
所以局部视图可以通过简单地运行来生成
vis.add_geometry(tr_mesh)
... # set some params to have a certain angle
vis.capture_depth_point_cloud("somefilename.pcd")
这还有一个非常有用的名为convert_to_world_coordinate
的参数。
似乎没有办法改变传感器的分辨率。 虽然向上(或向下)缩放 object,捕获点云,然后向下(或向上)缩放点云应该获得相同的效果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.