使用Open3D从RGBD图像生成点云:坐标系疑问及方法验证
问题解答
生成的点云坐标系
默认情况下,o3d.geometry.PointCloud.create_from_rgbd_image生成的是相机坐标系下的点云。当传入extrinsic参数时,该参数是一个4x4变换矩阵,作用是将相机坐标系下的点转换到目标坐标系(即输出点 = extrinsic × 相机坐标系点,齐次坐标乘法)。
当前方法是否正确?
不正确。你传入的W2C是世界坐标系到相机坐标系的变换矩阵,但函数要求extrinsic是相机坐标系到世界坐标系的变换矩阵(也就是W2C的逆矩阵,通常记为C2W)。
如果继续使用W2C作为extrinsic,生成的点云并非世界坐标系下的结果。要得到世界坐标系的点云,需要将extrinsic替换为W2C的逆矩阵,示例代码如下:
import numpy as np # 计算相机到世界的变换矩阵(W2C的逆) C2W = np.linalg.inv(W2C) pcd_tmp = o3d.geometry.PointCloud.create_from_rgbd_image( rgbd, o3d.camera.PinholeCameraIntrinsic( cam.image_width, cam.image_height, cam.fx, cam.fy, cam.cx, cam.cy, ), extrinsic=C2W, project_valid_depth_only=True, )
内容的提问来源于stack exchange,提问作者Muhammad Awais
相关产品推荐
相关产品推荐

