RGBD测程法是去寻找两个连续的RGBD图像对之间的相机移动。它的输入是一对RGBImage的实例,输出是刚体变换形式的运动。Open3D实现了 [Steinbrucker2011] and [Park2017]中的方法。

读取相机内参

我们首先从json文件中读取相机内参。

# -*- coding:utf-8 -*-
import numpy as np
import open3d as o3d
import Open3D.examples.python.open3d_tutorial as o3dtutpinhole_camera_intrinsic = o3d.io.read_pinhole_camera_intrinsic("../../test_data/camera_primesense.json")
print(pinhole_camera_intrinsic.intrinsic_matrix)

[[525. 0. 319.5]
[ 0. 525. 239.5]
[ 0. 0. 1. ]]

注意:
Open3d 中许多小的数据结构都能够通过json文件来读写。包括相机参数,相机轨迹,姿态图等等。

读取RGBD图像

这个代码块是中读取两对Redwood格式的RGBD图像。我们提供了Redwood数据集的解释(在前一节有介绍)。

source_color = o3d.io.read_image("../../test_data/RGBD/color/00000.jpg")
source_depth = o3d.io.read_image("../../test_data/RGBD/depth/00000.png")
target_color = o3d.io.read_image("../../test_data/RGBD/color/00001.jpg")
target_depth = o3d.io.read_image("../../test_data/RGBD/depth/00001.png")
source_rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(source_color, source_depth)
target_rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(target_color, target_depth)
target_pcd = o3d.geometry.PointCloud.create_from_rgbd_image(target_rgbd_image, pinhole_camera_intrinsic)

注意:
Open3D假设彩色图像和深度图像是同步的,并且在同一坐标系下配准。这通常可以在RGBD相机中通过打开同步和配准设置来实现。

从一对RGBD图像中计算里程

option = o3d.pipelines.odometry.OdometryOption()
odo_init = np.identity(4)
print(option)[success_color_term, trans_color_term,info] = o3d.pipelines.odometry.compute_rgbd_odometry(source_rgbd_image, target_rgbd_image, pinhole_camera_intrinsic, odo_init,o3d.pipelines.odometry.RGBDOdometryJacobianFromColorTerm(), option)
[success_hybrid_term, trans_hybrid_term,info] = o3d.pipelines.odometry.compute_rgbd_odometry(source_rgbd_image, target_rgbd_image, pinhole_camera_intrinsic, odo_init,o3d.pipelines.odometry.RGBDOdometryJacobianFromHybridTerm(), option)

odometry::OdometryOption class.
iteration_number_per_pyramid_level = [ 20, 10, 5, ]
max_depth_diff = 0.030000
min_depth = 0.000000
max_depth = 4.000000

这个代码块调用两种不同的RGBD测程方法。第一种来自[Steinbrucker2011].它是去最小化对齐图片的颜色一致性。第二种算法来自[Park2017]。除了颜色一致性以外,它还实现了几何约束。这两种方法运行速度接近。但是[Park2017]在我们的基准数据集中有着更高的精度,所以我们推荐使用。
OdometryOption()有几个参数:

  • minimum_correspondence_ratio:对齐后,测量两张RGBD图像的重叠比率。如果两组RGBD图像的重叠区域小于指定的比例,则测程模块会认为这是失效的情况。
  • max_depth_diff:在深度图像中,如果两个对齐的像素的深度差异是小于一个值的,则认为它们是对应的。值越大,搜索越激进,但是结果越不容易稳定。
  • min_depthmax_depth:大于或小于指定深度的像素会被忽略。

可视化RGBD图像对

将RGBD图像对转换成点云并且一起渲染。要注意的是,第一个(源)RGBD图像是通过测程法估计出的变换来进行变换的。经过变化之后的两组点云是对齐的。

if success_color_term:print("Using RGB-D Odometry")print(trans_color_term)source_pcd_color_term = o3d.geometry.PointCloud.create_from_rgbd_image(source_rgbd_image, pinhole_camera_intrinsic)source_pcd_color_term.transform(trans_color_term)o3d.visualization.draw_geometries([target_pcd, source_pcd_color_term],zoom=0.48,front=[0.0999, -0.1787, -0.9788],lookat=[0.0345, -0.0937, 1.8033],up=[-0.0067, -0.9838, 0.1790])
if success_hybrid_term:print("Using Hybrid RGB-D Odometry")print(trans_hybrid_term)source_pcd_hybrid_term = o3d.geometry.PointCloud.create_from_rgbd_image(source_rgbd_image, pinhole_camera_intrinsic)source_pcd_hybrid_term.transform(trans_hybrid_term)o3d.visualization.draw_geometries([target_pcd, source_pcd_hybrid_term],zoom=0.48,front=[0.0999, -0.1787, -0.9788],lookat=[0.0345, -0.0937, 1.8033],up=[-0.0067, -0.9838, 0.1790])

Using RGB-D Odometry
[[ 9.99988286e-01 -7.53983409e-05 -4.83963172e-03 2.74054550e-04]
[ 1.83909052e-05 9.99930634e-01 -1.17782559e-02 2.29634918e-02]
[ 4.84018408e-03 1.17780289e-02 9.99918922e-01 6.02121265e-04]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00]]

Using Hybrid RGB-D Odometry
[[ 9.99992973e-01 -2.51084541e-04 -3.74035273e-03 -1.07049775e-03]
[ 2.07046059e-04 9.99930714e-01 -1.17696227e-02 2.32280983e-02]
[ 3.74304875e-03 1.17687656e-02 9.99923740e-01 1.40592054e-03]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00]]

Open3d之RGBD测程法相关推荐

  1. Open3d(六)——RGBD测程法

    亲测代码程序可运行使用,open3d版本0.13.0. open3d数据资源下载:GitHub - Cobotic/Open3D: Open3D: A Modern Library for 3D Da ...

  2. Open3d从RGBD生成点云、mesh

    相机模型 x=PX→x=K[R∣t]X→zc[uv1]=[kx0u00kyv0001][R∣t][xcyczc]x=PX \rightarrow x = K[R|t]X \rightarrow z_c ...

  3. Open3D:如何使用RGBD图像集成实现三维重建?

    Open3D:如何使用RGBD图像集成实现三维重建? Open3D是一个开源的跨平台计算机视觉库,可用于处理点云.深度图像和RGB图像等数据.在三维重建中,RGBD图像集成是非常重要的一步,可以帮助我 ...

  4. 3D视觉创新应用(三维重建)竞赛作品系列——人体三维精准量测与动作捕捉

    一.背景介绍 1 项目背景与国内外研究现状 1.1 项目背景分析 近年来,RGB-Depth(RGB-D)传感器,如Kinect V1,和Structure Sensor等,在室内即时定位与地图构建应 ...

  5. (19)深度点云学习--利用RGBD图三维重建room

    1.主要参考 (1)最主要参考,官方的blog Make fragments - Open3D 0.16.0 documentation (2)操作流程参考 Python从RGBD数据进行3D场景重建 ...

  6. Open3d利用彩色图和深度图生成点云进行室内三维重建

    上一次得到的点云图在累加多张后配准会出现少量离群的点云,效果很差,于是考虑从 ICL-NUIM dataset这个数据集获得官方的室内图进行三维重建,数据集网址如下: ICL-NUIM RGB-D B ...

  7. 多源传感器GNSS INS 视觉 LiDAR 组合导航与SLAM开源项目总结

    多源传感器GNSS INS 视觉 LiDAR 组合导航与SLAM开源项目总结 本文基于 吴桐wutong 微信公众号文章完善而来. 开源代码总览 名称 传感器类型 组合类型 滤波方法 备注 RTKLI ...

  8. PL-VIO(点线slam)学习笔记(持续更新)

    论文翻译 PL-VIO:使用点和线特征的紧耦合单目视觉惯性里程计 收稿日期:2018年3月23日;录用日期:2018年4月9日;发布日期:2018年4月10日 摘要 摘要: 为解决这一问题的估计相机轨 ...

  9. 计算机的未来无可限量英文,(整理笔记)Day86【BBC】无人驾驶5:无人驾驶已是大势所趋 The trend of driverless cars is unstoppable...

    课前想一想 1.What influences will driverless cars bring to our society? 2. Do you believe that driverless ...

最新文章

  1. 如何在bash脚本中提示用户进行确认? [重复]
  2. 关于登录linux时,/etc/profile、~/.bash_profile等几个文件的执行过程
  3. 蓝牙耳机测试用例_移动端测试用例设计总结,这些你得懂!
  4. pyqt5中QWidget的show 一闪而过的原因及解决办法实例
  5. 小型动漫知识图谱的构建 (Python+Neo4j) (纯实践内容,基于bilibili所有正版番剧的动漫、声优、角色、类型)
  6. JQuery果然是神器,这里顺便测试一下我发现的那个漏洞!
  7. PHP 简单计算器代码实现
  8. 多项式乘法:练习总结
  9. epoll实现高并发聊天室
  10. html 列表点,HTML列表
  11. Vortex DeFi与DeFi Wizard合作建立ETH-BSC跨链桥
  12. Web笔记:jQuery的使用
  13. ubuntu18.04安装nvidia显卡驱动的正确方法
  14. 使用Sophix热修复注意事项
  15. office2007怎么卸载干净?
  16. Unity商店插件/工具收藏篇
  17. CDR2021安装教程 CorelDRAW 2021完整版下载
  18. 机器学习--单细胞聚类(二)
  19. 作业2021-03-12
  20. 给你心爱的 npm 包上个『北京户口』

热门文章

  1. ASP.NET MVC:实现我们自己的视图引擎
  2. 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印) 【转载】...
  3. 如何在 Zabbix 执行远程主机的脚本或指令?如何用 Zabbix 监控网站的访问量?
  4. ES组件elasticsearch-head报错 npm ERR! Please include the following file with any support request
  5. 关于微信小程序开发环境苹果IOS真机预览报SSL协议错误问题解决方案
  6. 关于Windows 1803版本内核隔离打开后无法关闭的解决方案
  7. 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习
  8. 深入理解前端跨域问题的解决方案——前端面试
  9. 为什么用JS取不到cookie的值?解决方法如下!
  10. Android基础知识:在UI线程中运行代码