mmatl / pyrender

Easy-to-use glTF 2.0-compliant OpenGL renderer for visualization of 3D scenes.
http://pyrender.readthedocs.io/
MIT License
1.3k stars 226 forks source link

restore pcl from depth image #240

Open LogWell opened 2 years ago

LogWell commented 2 years ago

How to restore point cloud from rendered depth image for persp camera: camera = pyrender.camera.IntrinsicsCamera(fx, fy, cx, cy, znear=0.05, zfar=100.0, name=None) and ortho camera: camera = pyrender.camera.OrthographicCamera(1.0, 1.0, znear=znear, zfar=zfar, name=None)?

seel-channel commented 1 year ago

Camera for pyrender

    HEIGHT_DEPTH = 100
    WIDTH_DEPTH = 100

    FX_DEPTH = WIDTH_DEPTH
    FY_DEPTH = HEIGHT_DEPTH
    CX_DEPTH = WIDTH_DEPTH // 2
    CY_DEPTH = HEIGHT_DEPTH // 2

    camera = pyrender.IntrinsicsCamera(FX_DEPTH , FY_DEPTH, CX_DEPTH, CY_DEPTH)

From pyrender RGB + Depth to PointCloud. I would use open3d

    def rgb_depth_to_RGBD(rgb, depth):
        rgb = o3d.geometry.Image(rgb)
        depth = o3d.geometry.Image(depth)

        rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(
            rgb, depth, convert_rgb_to_intensity=False
        )

        return rgbd_image

    intrinsic = o3d.camera.PinholeCameraIntrinsic(
        WIDTH_DEPTH,
        HEIGHT_DEPTH,
        FX_DEPTH,
        FY_DEPTH,
        CX_DEPTH,
        CY_DEPTH,
    )

    rgbd_images = [
        rgb_depth_to_RGBD(rgb, depth) for rgb, depth in zip(rgb_images, depth_images)
    ]

    point_clouds = [
        o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_image, intrinsic)
        for rgbd_image in rgbd_images
    ]