5 Open3D学习笔记——odometry

里程计:在两个连续的图像对之间找到相机移动

在open3d中实现odometry有两种方式:

  • open3d.odometry.RGBDOdometryJacobianFromColorTerm()

  • open3d.odometry.RGBDOdometryJacobianFromHybridTerm()

具体示例代码如下:

import open3d as o3d 
import numpy as np 

if __name__ == "__main__":
    #以json方式读取相机内参
    pinhole_camera_intrinsic = o3d.io.read_pinhole_camera_intrinsic(
        "/home/jhon/Apps/Open3D/examples/TestData/camera_primesense.json")
    #打印内参矩阵
    print("相机内参:\n",pinhole_camera_intrinsic.intrinsic_matrix,"\n")
    
    #读取图像
    s_color = o3d.io.read_image("/home/jhon/Apps/Open3D/examples/TestData/RGBD/color/00000.jpg")
    s_depth = o3d.io.read_image("/home/jhon/Apps/Open3D/examples/TestData/RGBD/depth/00000.png")
    t_color = o3d.io.read_image("/home/jhon/Apps/Open3D/examples/TestData/RGBD/color/00001.jpg")
    t_depth = o3d.io.read_image("/home/jhon/Apps/Open3D/examples/TestData/RGBD/depth/00001.png")
    
    #生成RGBD图像
    s_rgbd = o3d.geometry.create_rgbd_image_from_color_and_depth(s_color, s_depth)
    t_rgbd = o3d.geometry.create_rgbd_image_from_color_and_depth(t_color, t_depth)
    #生成点云
    t_pcd = o3d.geometry.create_point_cloud_from_rgbd_image(t_rgbd, pinhole_camera_intrinsic)
     
    option = o3d.odometry.OdometryOption()
    odo_init = np.identity(4)
    print(option)

    #odometry_color
    [success_color_term, trans_color_term, info] = o3d.odometry.compute_rgbd_odometry(
        s_rgbd, t_rgbd, pinhole_camera_intrinsic, odo_init, o3d.odometry.RGBDOdometryJacobianFromColorTerm(),
        option)
    #odometry_Hybrid
    [success_hybrid_term, trans_hybrid_term, info] = o3d.odometry.compute_rgbd_odometry(
        s_rgbd, t_rgbd, pinhole_camera_intrinsic, odo_init, o3d.odometry.RGBDOdometryJacobianFromHybridTerm(),
        option)

    if success_color_term:
        print("Using RGBD Odometry\n")
        print(trans_color_term,"\n")
        s_pcd = o3d.geometry.create_point_cloud_from_rgbd_image(
            s_rgbd, pinhole_camera_intrinsic)
        #变换
        s_pcd.transform(trans_color_term)
        o3d.visualization.draw_geometries([t_pcd,s_pcd],"rgbd",960,540,500,400)      

    if success_hybrid_term:
        print("Using Hybrid rgbd odometry\n")
        print(trans_hybrid_term)
        s_pcd_hybrid = o3d.geometry.create_point_cloud_from_rgbd_image(
            s_rgbd, pinhole_camera_intrinsic)
        s_pcd_hybrid.transform(trans_hybrid_term)
        o3d.visualization.draw_geometries([s_pcd_hybrid, t_pcd])

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值