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)) + '\n' + \"Pose : " + "\n" + 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=' \t')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”(需要按要求備注) 聯系郵箱:dianyunpcl@163.com,歡迎企業來聯系公眾號展開合作。
點一下“在看”你會更好看耶
總結
以上是生活随笔為你收集整理的Open3d学习计划—高级篇 5(RGBD融合)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DOT:视觉SLAM的动态目标物跟踪
- 下一篇: LIO-SAM: 紧耦合的激光与惯导里程