Open3d学习计划—高级篇 5(RGBD融合)
Open3D是一個開源庫,支持快速開發(fā)和處理3D數(shù)據(jù)。Open3D在c++和Python中公開了一組精心選擇的數(shù)據(jù)結(jié)構(gòu)和算法。后端是高度優(yōu)化的,并且是為并行化而設(shè)置的。
本系列學(xué)習(xí)計劃有Blue同學(xué)作為發(fā)起人,主要以O(shè)pen3D官方網(wǎng)站的教程為主進(jìn)行翻譯與實踐的學(xué)習(xí)計劃。點云PCL公眾號作為免費(fèi)的3D視覺,點云交流社區(qū),期待有使用Open3D或者感興趣的小伙伴能夠加入我們的翻譯計劃,貢獻(xiàn)免費(fèi)交流社區(qū),為使用Open3D提供中文的使用教程。
ps:感覺這章名字應(yīng)該叫通過RGBD數(shù)據(jù)生成網(wǎng)格,關(guān)于這章的內(nèi)容建議大家去百度搜一下關(guān)于TSDF算法的博客,或者直接看下面給出的參考論文,有助于大家理解)
Open3d實現(xiàn)了一種可擴(kuò)展的RGBD圖像融合算法。這個算法基于[Curless1996]?和[Newcombe2011]?提出的技術(shù)。為了支持大尺度的場景,我們使用了Integrater in ElasticReconstruction.中介紹的分層哈希結(jié)構(gòu)。
從 .log 文件中讀取軌跡
該教程使用函數(shù) read_trajectory從 .log 文件中讀取相機(jī)軌跡。一個示例 .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。推薦使用后一種的原因是因為使用了多層結(jié)構(gòu)支持大尺度場景.
ScalableTSDFVolume有幾個參數(shù)。
voxel_length = 4.0 / 512.0 表示TSDF空間中單個體素尺度是 4.0m/512.0 = 7.8125 m 。減小這個值會得到高分辨率的TSDF空間,但是整合結(jié)果容易受到深度噪聲的影響。
sdf_trunc = 0.04指定符號距離函數(shù)(signed distance function ,SDF)的截斷值。
當(dāng) color_type = TSDFVolumeColorType.RGB8時,8位的RGB顏色也被整合作為TSDF空間的一部分。
浮點類型強(qiáng)度也能夠通過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.
抽取網(wǎng)格
使用?[LorensenAndCline1987]中提出的marching cubes 算法進(jìn)行網(wǎng)格繪制.
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空間中的加權(quán)平均過濾器.如果有更多的幀被整合,那么空間就會產(chǎn)生更加平滑的網(wǎng)格.請去?Make fragments?中查看更多的例子.
資源
三維點云論文及相關(guān)應(yīng)用分享
【點云論文速讀】基于激光雷達(dá)的里程計及3D點云地圖中的定位方法
3D目標(biāo)檢測:MV3D-Net
三維點云分割綜述(上)
3D-MiniNet: 從點云中學(xué)習(xí)2D表示以實現(xiàn)快速有效的3D LIDAR語義分割(2020)
win下使用QT添加VTK插件實現(xiàn)點云可視化GUI
JSNet:3D點云的聯(lián)合實例和語義分割
大場景三維點云的語義分割綜述
PCL中outofcore模塊---基于核外八叉樹的大規(guī)模點云的顯示
基于局部凹凸性進(jìn)行目標(biāo)分割
基于三維卷積神經(jīng)網(wǎng)絡(luò)的點云標(biāo)記
點云的超體素(SuperVoxel)
基于超點圖的大規(guī)模點云分割
更多文章可查看:點云學(xué)習(xí)歷史文章大匯總
SLAM及AR相關(guān)分享
【開源方案共享】ORB-SLAM3開源啦!
【論文速讀】AVP-SLAM:自動泊車系統(tǒng)中的語義SLAM
【點云論文速讀】StructSLAM:結(jié)構(gòu)化線特征SLAM
SLAM和AR綜述
常用的3D深度相機(jī)
AR設(shè)備單目視覺慣導(dǎo)SLAM算法綜述與評價
SLAM綜述(4)激光與視覺融合SLAM
Kimera實時重建的語義SLAM系統(tǒng)
SLAM綜述(3)-視覺與慣導(dǎo),視覺與深度學(xué)習(xí)SLAM
易擴(kuò)展的SLAM框架-OpenVSLAM
高翔:非結(jié)構(gòu)化道路激光SLAM中的挑戰(zhàn)
SLAM綜述之Lidar SLAM
基于魚眼相機(jī)的SLAM方法介紹
往期線上分享錄播匯總
第一期B站錄播之三維模型檢索技術(shù)
第二期B站錄播之深度學(xué)習(xí)在3D場景中的應(yīng)用
第三期B站錄播之CMake進(jìn)階學(xué)習(xí)
第四期B站錄播之點云物體及六自由度姿態(tài)估計
第五期B站錄播之點云深度學(xué)習(xí)語義分割拓展
第六期B站錄播之Pointnetlk解讀
[線上分享錄播]點云配準(zhǔn)概述及其在激光SLAM中的應(yīng)用
[線上分享錄播]cloudcompare插件開發(fā)
[線上分享錄播]基于點云數(shù)據(jù)的?Mesh重建與處理
[線上分享錄播]機(jī)器人力反饋遙操作技術(shù)及機(jī)器人視覺分享
[線上分享錄播]地面點云配準(zhǔn)與機(jī)載點云航帶平差
點云PCL更多活動請查看:點云PCL活動之應(yīng)屆生校招群
掃描下方微信視頻號二維碼可查看最新研究成果及相關(guān)開源方案的演示:
如果你對Open3D感興趣,或者正在使用該開源方案,就請加入我們,一起翻譯,一起學(xué)習(xí),貢獻(xiàn)自己的力量,目前階段主要以微信群為主,有意者發(fā)送“Open3D學(xué)習(xí)計劃”到公眾號后臺,和更多熱愛分享的小伙伴一起交流吧!如果翻譯的有什么問題或者您有更好的意見,請評論交流!!!!
以上內(nèi)容如有錯誤請留言評論,歡迎指正交流。如有侵權(quán),請聯(lián)系刪除
掃描二維碼
? ? ? ? ? ? ? ? ? ?關(guān)注我們
讓我們一起分享一起學(xué)習(xí)吧!期待有想法,樂于分享的小伙伴加入免費(fèi)星球注入愛分享的新鮮活力。分享的主題包含但不限于三維視覺,點云,高精地圖,自動駕駛,以及機(jī)器人等相關(guān)的領(lǐng)域。
分享及合作:微信“920177957”(需要按要求備注) 聯(lián)系郵箱:dianyunpcl@163.com,歡迎企業(yè)來聯(lián)系公眾號展開合作。
點一下“在看”你會更好看耶
總結(jié)
以上是生活随笔為你收集整理的Open3d学习计划—高级篇 5(RGBD融合)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DOT:视觉SLAM的动态目标物跟踪
- 下一篇: LIO-SAM: 紧耦合的激光与惯导里程