You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Open3D中利用两类点云实现旋转、变换及RGBD图像投影?

在Open3D中实现点云旋转、变换并投影到RGBD图像的解决方案

Open3D的两类点云(open3d.geometry.PointCloud和open3d.t.geometry.PointCloud)各自绑定了不同的功能集,你可以通过类型转换或手动实现缺失功能的方式打通旋转、变换、投影的全流程,以下是两种可行方案:

方案1:传统点云完成旋转变换,转张量点云投影

利用传统点云成熟的旋转矩阵生成能力完成变换,再转成支持投影的张量点云,是最直接的路径:

import open3d as o3d
import open3d.t.geometry as t_geom

# 1. 创建/加载传统点云
pcd = o3d.io.read_point_cloud("your_point_cloud.ply")

# 2. 生成旋转矩阵并完成点云变换
# 传入XYZ轴的旋转弧度值,生成对应旋转矩阵
rotation_mat = o3d.geometry.get_rotation_matrix_from_xyz((0.2, 0.3, 0.1))
pcd.transform(rotation_mat)

# 3. 转换为张量点云(支持CUDA加速,可加 .cuda() 移到GPU)
t_pcd = t_geom.PointCloud.from_legacy(pcd)

# 4. 加载RGBD图像与相机内参
rgbd_img = o3d.io.read_rgbd_image("your_rgbd_image.png")
intrinsic = o3d.camera.PinholeCameraIntrinsic(
    o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault
)
# 转成张量框架兼容的内参格式
t_intrinsic = t_geom.PinholeCameraIntrinsic(intrinsic)

# 5. 投影到RGBD图像
projected_pcd = t_pcd.project_to_rgbd_image(rgbd_img, t_intrinsic)

方案2:直接在张量点云框架下实现旋转变换

如果想全程使用张量点云,可手动构造旋转矩阵(基于PyTorch张量操作),再完成变换与投影:

import open3d as o3d
import open3d.t.geometry as t_geom
import torch

# 1. 创建/加载张量点云
t_pcd = t_geom.PointCloud.from_file("your_point_cloud.ply")

# 2. 手动生成XYZ旋转矩阵(传入弧度值)
rx, ry, rz = 0.2, 0.3, 0.1

# 构造各轴旋转矩阵
Rx = torch.tensor([
    [1, 0, 0],
    [0, torch.cos(rx), -torch.sin(rx)],
    [0, torch.sin(rx), torch.cos(rx)]
])
Ry = torch.tensor([
    [torch.cos(ry), 0, torch.sin(ry)],
    [0, 1, 0],
    [-torch.sin(ry), 0, torch.cos(ry)]
])
Rz = torch.tensor([
    [torch.cos(rz), -torch.sin(rz), 0],
    [torch.sin(rz), torch.cos(rz), 0],
    [0, 0, 1]
])

# 组合成最终旋转矩阵(XYZ顺序)
rotation_mat = Rz @ Ry @ Rx
# 构造4x4变换矩阵(兼容点云transform方法)
transform_mat = torch.eye(4)
transform_mat[:3, :3] = rotation_mat

# 3. 应用变换到张量点云
t_pcd.transform(transform_mat)

# 4. 投影到RGBD图像(同方案1步骤4-5)
rgbd_img = o3d.io.read_rgbd_image("your_rgbd_image.png")
intrinsic = o3d.camera.PinholeCameraIntrinsic(
    o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault
)
t_intrinsic = t_geom.PinholeCameraIntrinsic(intrinsic)

projected_pcd = t_pcd.project_to_rgbd_image(rgbd_img, t_intrinsic)

额外说明

两类点云可通过from_legacy()和to_legacy()方法互相转换,你可以根据需求在不同阶段切换使用对应的API;如果需要CUDA加速,张量点云可通过t_pcd.cuda()移至GPU操作。

内容的提问来源于stack exchange,提问作者hjy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:22:31