更新open3d中的相机内参-python

Update camera intrinsic parameter in open3d-python

我正在尝试使用 python 中的 Open3D 库来绘制 3D 模型。我的问题是我无法更新相机的固有属性。我想知道怎么做——如果可能的话。目前它使用默认相机参数。

rgbd_image = o3d.geometry.RGBDImage.create_from_tum_format(color_raw, depth_raw)

a = o3d.camera.PinholeCameraIntrinsicParameters
pcd = o3d.geometry.PointCloud.create_from_rgbd_image(
        rgbd_image,
        o3d.camera.PinholeCameraIntrinsic(
            o3d.camera.PinholeCameraIntrinsicParameters.Kinect2DepthCameraDefault))
# Flip it, otherwise the pointcloud will be upside down
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
o3d.visualization.draw_geometries([pcd])

我想将内在矩阵更新为 [3131.58 0.00 1505.62 , 0.00 3131.58 2004.13, 0.00 0.00 1.00]

谢谢。

您必须声明一个 open3d.camera.PinholeCameraIntrinsic 对象,然后用所需的中间矩阵对其进行初始化,如下所示:

cam = o3d.camera.PinholeCameraIntrinsic()
cam.intrinsic_matrix =  [[3131.58, 0.00, 1505.62] , [0.00, 3131.58, 2004.13], [0.00, 0.00, 1.00]]

然后,您可以像这样将对象传递给 create_point_cloud_from_rgbd_image 方法:

pcd = o3d.geometry.create_point_cloud_from_rgbd_image(rgbd_image,cam)

N.B.

您可以使用非默认构造函数初始化 cam 对象以指定其宽度和高度,如下所示:

cam = o3d.camera.PinholeCameraIntrinsic(W, H, Fx, Fy, Cx, Cy)

编辑

经过一些搜索,我发现最好像这样初始化参数,以便能够同时定义内部和外部矩阵:

intrinsic = o3d.camera.PinholeCameraIntrinsic(w, h, fx,fy, cx, cy)
intrinsic.intrinsic_matrix = [[fx, 0, cx], [0, fy, cy], [0, 0, 1]]
cam = o3d.camera.PinholeCameraParameters()
cam.intrinsic = intrinsic
cam.extrinsic = np.array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 1.]])
pcd = o3d.geometry.create_point_cloud_from_rgbd_image(
    rgbd_image, cam.intrinsic, cam.extrinsic)