首页 > Open3d学习计划—高级篇 5(RGBD融合)

Open3d学习计划—高级篇 5(RGBD融合)

Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。

本系列学习计划有Blue同学作为发起人,主要以Open3D官方网站的教程为主进行翻译与实践的学习计划。点云PCL公众号作为免费的3D视觉,点云交流社区,期待有使用Open3D或者感兴趣的小伙伴能够加入我们的翻译计划,贡献免费交流社区,为使用Open3D提供中文的使用教程。

ps:感觉这章名字应该叫通过RGBD数据生成网格,关于这章的内容建议大家去百度搜一下关于TSDF算法的博客,或者直接看下面给出的参考论文,有助于大家理解)

Open3d实现了一种可扩展的RGBD图像融合算法。这个算法基于[Curless1996] 和[Newcombe2011] 提出的技术。为了支持大尺度的场景,我们使用了Integrater in ElasticReconstruction.中介绍的分层哈希结构。

从 .log 文件中读取轨迹

该教程使用函数 read_trajectory从 .log 文件中读取相机轨迹。一个示例 .log文件如下:

# examples/TestData/RGBD/odometry.log

0   0   1
1   0   0   2
0   1   0   2
0   0   1 -0.3
0   0   0   1
1   1   2
0.999988  3.08668e-005  0.0049181  1.99962
-8.84184e-005  0.999932  0.0117022  1.97704
-0.0049174  -0.0117024  0.999919  -0.300486
0  0  0  1
class CameraPose:def __init__(self, meta, mat):self.metadata = metaself.pose = matdef __str__(self):return 'Metadata : ' + ' '.join(map(str, self.metadata)) + '
' + "Pose : " + "
" + np.array_str(self.pose)def read_trajectory(filename):traj = []with open(filename, 'r') as f:metastr = f.readline()while metastr:metadata = list(map(int, metastr.split()))mat = np.zeros(shape=(4, 4))for i in range(4):matstr = f.readline()mat[i, :] = np.fromstring(matstr, dtype=float, sep=' 	')traj.append(CameraPose(metadata, mat))metastr = f.readline()return traj
camera_poses = read_trajectory("../../TestData/RGBD/odometry.log")

TSDF空间融合(TSDF volume integration)

Open3d提供了两种类型的TSDF空间:UniformTSDFVolume和ScalableTSDFVolume。推荐使用后一种的原因是因为使用了多层结构支持大尺度场景.

ScalableTSDFVolume有几个参数。

  • voxel_length = 4.0 / 512.0 表示TSDF空间中单个体素尺度是 4.0m/512.0 = 7.8125 m 。减小这个值会得到高分辨率的TSDF空间,但是整合结果容易受到深度噪声的影响。

  • sdf_trunc = 0.04指定符号距离函数(signed distance function ,SDF)的截断值。

  • 当 color_type = TSDFVolumeColorType.RGB8时,8位的RGB颜色也被整合作为TSDF空间的一部分。

浮点类型强度也能够通过color_type = TSDFVolumeColorType.Gray32和

convert_rgb_to_intensity = True被整合在一起.颜色整合的灵感来自PCL.

volume = o3d.integration.ScalableTSDFVolume(voxel_length=4.0 / 512.0,sdf_trunc=0.04,color_type=o3d.integration.TSDFVolumeColorType.RGB8)for i in range(len(camera_poses)):print("Integrate {:d}-th image into the volume.".format(i))color = o3d.io.read_image("../../TestData/RGBD/color/{:05d}.jpg".format(i))depth = o3d.io.read_image("../../TestData/RGBD/depth/{:05d}.png".format(i))rgbd = o3d.geometry.RGBDImage.create_from_color_and_depth(color, depth, depth_trunc=4.0, convert_rgb_to_intensity=False)volume.integrate(rgbd,o3d.camera.PinholeCameraIntrinsic(o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault),np.linalg.inv(camera_poses[i].pose))

Integrate 0-th image into the volume.

Integrate 1-th image into the volume.

Integrate 2-th image into the volume.

Integrate 3-th image into the volume.

Integrate 4-th image into the volume.

抽取网格

使用 [LorensenAndCline1987]中提出的marching cubes 算法进行网格绘制.

print("Extract a triangle mesh from the volume and visualize it.")
mesh = volume.extract_triangle_mesh()
mesh.compute_vertex_normals()
o3d.visualization.draw_geometries([mesh], front=[0.5297, -0.1873, -0.8272],lookat=[2.0712, 2.0312, 1.7251],up=[-0.0558, -0.9809, 0.1864], zoom=0.47)

Note:

TSDF空间就像3D空间中的加权平均过滤器.如果有更多的帧被整合,那么空间就会产生更加平滑的网格.请去 Make fragments 中查看更多的例子.

资源

三维点云论文及相关应用分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

3D目标检测:MV3D-Net

三维点云分割综述(上)

3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)

win下使用QT添加VTK插件实现点云可视化GUI

JSNet:3D点云的联合实例和语义分割

大场景三维点云的语义分割综述

PCL中outofcore模块---基于核外八叉树的大规模点云的显示

基于局部凹凸性进行目标分割

基于三维卷积神经网络的点云标记

点云的超体素(SuperVoxel)

基于超点图的大规模点云分割

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

SLAM综述之Lidar SLAM

基于鱼眼相机的SLAM方法介绍

往期线上分享录播汇总

第一期B站录播之三维模型检索技术

第二期B站录播之深度学习在3D场景中的应用

第三期B站录播之CMake进阶学习

第四期B站录播之点云物体及六自由度姿态估计

第五期B站录播之点云深度学习语义分割拓展

第六期B站录播之Pointnetlk解读

[线上分享录播]点云配准概述及其在激光SLAM中的应用

[线上分享录播]cloudcompare插件开发

[线上分享录播]基于点云数据的 Mesh重建与处理

[线上分享录播]机器人力反馈遥操作技术及机器人视觉分享

[线上分享录播]地面点云配准与机载点云航带平差

点云PCL更多活动请查看:点云PCL活动之应届生校招群

扫描下方微信视频号二维码可查看最新研究成果及相关开源方案的演示:

如果你对Open3D感兴趣,或者正在使用该开源方案,就请加入我们,一起翻译,一起学习,贡献自己的力量,目前阶段主要以微信群为主,有意者发送“Open3D学习计划”到公众号后台,和更多热爱分享的小伙伴一起交流吧!如果翻译的有什么问题或者您有更好的意见,请评论交流!!!!

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享及合作:微信“920177957”(需要按要求备注) 联系邮箱:[email protected],欢迎企业来联系公众号展开合作。

点一下“在看”你会更好看耶

更多相关:

  • 点云PCL免费知识星球,点云论文速读。标题:三维点云分割综述(上)排版:particle欢迎各位加入免费知识星球,获取PDF文档,欢迎转发朋友圈,分享快乐。这是一篇综述性论文,以下只做概述性介绍,介绍文章已共享在微信群和免费知识星球中,文章在公众号将分成三个部分:第一部分介绍点云的获取以及各种传感器获取点云的特性,以及分割概念的区别...

  • 点云PCL免费知识星球,点云论文速读。文章:DLL: Direct LIDAR Localization. A map-based localization approach for aerial robots作者:Fernando Caballero1 and Luis Merino编译:点云PCL代码:https://githu...

  • CloudCompare是一个三维点云(网格)编辑和处理软件。最初,它被设计用来对稠密的三维点云进行直接比较。它依赖于一种特定的八叉树结构,在进行点云对比这类任务时具有出色的性能【1】。此外,由于大多数点云都是由地面激光扫描仪采集的,CloudCompare的目的是在一台标准笔记本电脑上处理大规模的点云——通常超过1000万个点云。...

  • 点云PCL免费知识星球,点云论文速读。文章:Open3DGen: Open-Source Software for Reconstructing Textured 3D Models from RGB-D Images作者:Teo T. Niemirepo, Marko Viitanen, and Jarno Vanne编译:点云P...

  • 点云PCL免费知识星球,点云论文速读。标题:Real-Time Spatio-Temporal LiDAR Point Cloud Compression作者:Yu Feng , Shaoshan Liu , and Yuhao Zhu来源:2020IROS本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PDF...

  • 标题:Voxelized GICP for Fast and Accurate 3D Point Cloud Registration作者:Kenji Koide, Masashi Yokozuka, Shuji Oishi, and Atsuhiko Banno来源:分享者代码:https://github.com/SMRT-AI...

  • 点云PCL免费知识星球,点云论文速读。标题:LIC-Fusion 2.0: LiDAR-Inertial-Camera Odometry with Sliding-Window Plane-Feature Tracking作者:Xingxing Zuo1;2, Yulin Yang3, Patrick Geneva3, Jiajun...

  • 点云PCL免费知识星球,点云论文速读。标题:CMRNet++: Map and Camera Agnostic Monocular Visual Localization in LiDAR Maps作者:Daniele Cattaneo, Domenico Giorgio Sorrenti, Abhinav Valada来源:分享者...

  • 点云PCL免费知识星球,点云论文速读。标题:LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping作者:Tixiao Shan, Brendan Englot, Drew Meyers, Wei Wang, Carlo Ratti, and...

  • 前言CloudCompare是另一款开源且完善的点云处理软件,我们可以在这款软件的基础上,任意的设计成我们想要的界面,可以说是点云处理软件的最佳选择,所以我认为如果你是研究点云算法的可以使用PCL,GDAL,等其他库,如果你是做工程的需要点云的界面显示,那么cloudCompare就是不二选择,当然如果是简单的界面使用PCL和QT也...

  • 公众号致力于分享点云处理,SLAM,三维视觉,高精地图相关的文章与技术,欢迎各位加入我们,一起每交流一起进步,有兴趣的可联系微信:920177957。本文来自点云PCL博主的分享,未经作者允许请勿转载,欢迎各位同学积极分享和交流。资源三维点云论文及相关应用分享【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法3D目标检测...

  • Thanks to LOAM, A-LOAM, and LIO-SAM code authors. The major codes in this repository are borrowed from their efforts.代码:https://github.com/gisbi-kim/SC-A-LOAM编译:点云PCL本...

  • 文章:Inertial-Only Optimization for Visual-Inertial Initialization作者:Carlos Campos, Jose M.M. Montiel and Juan D. Tard ´ os´代码:https://github.com/bxh1/VIDO-SLAM.git编译:点云...

  • 点云PCL免费知识星球,点云论文速读。文章:Monocular Object and Plane SLAM in Structured Environments作者:Shichao Yang, Sebastian Scherer翻译:particle本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PDF论文,欢...

  • 点云PCL免费知识星球,点云论文速读。文章:Persistent Map Saving for Visual Localization for Autonomous Vehicles: An ORB-SLAM 2 Extension作者:Felix Nobis∗, Odysseas Papanikolaou, Johannes Be...