Open3d学习计划—高级篇 7(颜色映射)
Open3D是一個(gè)開源庫,支持快速開發(fā)和處理3D數(shù)據(jù)。Open3D在c++和Python中公開了一組精心選擇的數(shù)據(jù)結(jié)構(gòu)和算法。后端是高度優(yōu)化的,并且是為并行化而設(shè)置的。
本系列學(xué)習(xí)計(jì)劃有Blue同學(xué)作為發(fā)起人,主要以O(shè)pen3D官方網(wǎng)站的教程為主進(jìn)行翻譯與實(shí)踐的學(xué)習(xí)計(jì)劃。點(diǎn)云PCL公眾號(hào)作為免費(fèi)的3D視覺,點(diǎn)云交流社區(qū),期待有使用Open3D或者感興趣的小伙伴能夠加入我們的翻譯計(jì)劃,貢獻(xiàn)免費(fèi)交流社區(qū),為使用Open3D提供中文的使用教程。
將顏色映射到從深度相機(jī)重建的幾何形狀。由于彩色幀和深度幀不一定是完美對(duì)齊的,所以使用彩色圖像進(jìn)行紋理映射的結(jié)果會(huì)導(dǎo)致一個(gè)模糊的彩色映射。Open3d提供了基于[Zhou2014]中的彩色映射優(yōu)化算法。下面的教程將會(huì)提供彩色映射優(yōu)化算法的示例。
輸入
下面的代碼讀取彩色和深度圖像對(duì),并且生成 rgbd_image。注意convert_rgb_to_intensity標(biāo)志位設(shè)置為 False。只是為了保留8-bit彩色通道而不是使用單通道浮點(diǎn)型圖像。
在應(yīng)用彩色映射優(yōu)化之前,最好先對(duì)RGBD圖像進(jìn)行可視化。debug_mode選擇是否可視化RGBD圖像。
def sorted_alphanum(file_list_ordered):convert = lambda text: int(text) if text.isdigit() else textalphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]return sorted(file_list_ordered, key=alphanum_key)def get_file_list(path, extension=None):if extension is None:file_list = [path + f for f in os.listdir(path) if os.path.isfile(join(path, f))]else:file_list = [path + ffor f in os.listdir(path)if os.path.isfile(os.path.join(path, f)) and os.path.splitext(f)[1] == extension]file_list = sorted_alphanum(file_list)return file_list
path = o3dtut.download_fountain_dataset()
debug_mode = Falsergbd_images = []
depth_image_path = get_file_list(os.path.join(path, "depth/"),extension=".png")
color_image_path = get_file_list(os.path.join(path, "image/"),extension=".jpg")
assert (len(depth_image_path) == len(color_image_path))
for i in range(len(depth_image_path)):depth = o3d.io.read_image(os.path.join(depth_image_path[i]))color = o3d.io.read_image(os.path.join(color_image_path[i]))rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(color, depth, convert_rgb_to_intensity=False)if debug_mode:pcd = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_image,o3d.camera.PinholeCameraIntrinsic(o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault))o3d.visualization.draw_geometries([pcd])rgbd_images.append(rgbd_image)
下面的代碼讀取相機(jī)軌跡和網(wǎng)格數(shù)據(jù)
camera = o3d.io.read_pinhole_camera_trajectory(os.path.join(path, "scene/key.log"))
mesh = o3d.io.read_triangle_mesh(os.path.join(path, "scene", "integrated.ply"))
為了可視化出相機(jī)的姿態(tài)不適合顏色映射,下面的代碼故意設(shè)置迭代次數(shù)為0,也就是不對(duì)其映射做優(yōu)化。color_map_optimization使用對(duì)應(yīng)的相機(jī)姿態(tài)和RGBD圖像來繪制網(wǎng)格。如果沒有優(yōu)化的話,可以看到紋理很模糊。
# Before full optimization, let's just visualize texture map
# with given geometry, RGBD images, and camera poses.
option = o3d.color_map.ColorMapOptimizationOption()
option.maximum_iteration = 0
with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:o3d.color_map.color_map_optimization(mesh, rgbd_images, camera, option)
o3d.visualization.draw_geometries([mesh])
剛性優(yōu)化
下一步優(yōu)化相機(jī)參數(shù)來獲得清晰的彩色圖像。
下面的代碼設(shè)置最大迭代次數(shù)為300。
# Optimize texture and save the mesh as texture_mapped.ply
# This is implementation of following paper
# Q.-Y. Zhou and V. Koltun,
# Color Map Optimization for 3D Reconstruction with Consumer Depth Cameras,
# SIGGRAPH 2014
option.maximum_iteration = 100 if is_ci else 300
option.non_rigid_camera_coordinate = False
with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:o3d.color_map.color_map_optimization(mesh, rgbd_images, camera, option)
o3d.visualization.draw_geometries([mesh])
殘差表示圖像強(qiáng)度不一致,殘差越低表示顏色映射質(zhì)量越好。ColorMapOptimizationOption默認(rèn)使用剛性優(yōu)化,去優(yōu)化相機(jī)的六維姿態(tài)。
非剛性優(yōu)化
為了有一個(gè)更好的映射質(zhì)量,需要使用非剛性優(yōu)化。要啟用非剛性優(yōu)化只需要在調(diào)用color_map_optimization前將option.non_rigid_camera_coordinate設(shè)置為True。除了六維相機(jī)姿態(tài)以外,非剛性優(yōu)化甚至考慮了由錨點(diǎn)表示的局部圖像變形。這種方式更加靈活并且會(huì)有著更高的彩色映射質(zhì)量。殘差也會(huì)小于剛性優(yōu)化的情況。
option.maximum_iteration = 100 if is_ci else 300
option.non_rigid_camera_coordinate = True
with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:o3d.color_map.color_map_optimization(mesh, rgbd_images, camera, option)
o3d.visualization.draw_geometries([mesh])
資源
三維點(diǎn)云論文及相關(guān)應(yīng)用分享
【點(diǎn)云論文速讀】基于激光雷達(dá)的里程計(jì)及3D點(diǎn)云地圖中的定位方法
3D目標(biāo)檢測:MV3D-Net
三維點(diǎn)云分割綜述(上)
3D-MiniNet: 從點(diǎn)云中學(xué)習(xí)2D表示以實(shí)現(xiàn)快速有效的3D LIDAR語義分割(2020)
win下使用QT添加VTK插件實(shí)現(xiàn)點(diǎn)云可視化GUI
JSNet:3D點(diǎn)云的聯(lián)合實(shí)例和語義分割
大場景三維點(diǎn)云的語義分割綜述
PCL中outofcore模塊---基于核外八叉樹的大規(guī)模點(diǎn)云的顯示
基于局部凹凸性進(jìn)行目標(biāo)分割
基于三維卷積神經(jīng)網(wǎng)絡(luò)的點(diǎn)云標(biāo)記
點(diǎn)云的超體素(SuperVoxel)
基于超點(diǎn)圖的大規(guī)模點(diǎn)云分割
更多文章可查看:點(diǎn)云學(xué)習(xí)歷史文章大匯總
SLAM及AR相關(guān)分享
【開源方案共享】ORB-SLAM3開源啦!
【論文速讀】AVP-SLAM:自動(dòng)泊車系統(tǒng)中的語義SLAM
【點(diǎn)云論文速讀】StructSLAM:結(jié)構(gòu)化線特征SLAM
SLAM和AR綜述
常用的3D深度相機(jī)
AR設(shè)備單目視覺慣導(dǎo)SLAM算法綜述與評(píng)價(jià)
SLAM綜述(4)激光與視覺融合SLAM
Kimera實(shí)時(shí)重建的語義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站錄播之點(diǎn)云物體及六自由度姿態(tài)估計(jì)
第五期B站錄播之點(diǎn)云深度學(xué)習(xí)語義分割拓展
第六期B站錄播之Pointnetlk解讀
[線上分享錄播]點(diǎn)云配準(zhǔn)概述及其在激光SLAM中的應(yīng)用
[線上分享錄播]cloudcompare插件開發(fā)
[線上分享錄播]基于點(diǎn)云數(shù)據(jù)的?Mesh重建與處理
[線上分享錄播]機(jī)器人力反饋遙操作技術(shù)及機(jī)器人視覺分享
[線上分享錄播]地面點(diǎn)云配準(zhǔn)與機(jī)載點(diǎn)云航帶平差
點(diǎn)云PCL更多活動(dòng)請(qǐng)查看:點(diǎn)云PCL活動(dòng)之應(yīng)屆生校招群
掃描下方微信視頻號(hào)二維碼可查看最新研究成果及相關(guān)開源方案的演示:
如果你對(duì)Open3D感興趣,或者正在使用該開源方案,就請(qǐng)加入我們,一起翻譯,一起學(xué)習(xí),貢獻(xiàn)自己的力量,目前階段主要以微信群為主,有意者發(fā)送“Open3D學(xué)習(xí)計(jì)劃”到公眾號(hào)后臺(tái),和更多熱愛分享的小伙伴一起交流吧!如果翻譯的有什么問題或者您有更好的意見,請(qǐng)?jiān)u論交流!!!!
以上內(nèi)容如有錯(cuò)誤請(qǐng)留言評(píng)論,歡迎指正交流。如有侵權(quán),請(qǐng)聯(lián)系刪除
掃描二維碼
? ? ? ? ? ? ? ? ? ?關(guān)注我們
讓我們一起分享一起學(xué)習(xí)吧!期待有想法,樂于分享的小伙伴加入免費(fèi)星球注入愛分享的新鮮活力。分享的主題包含但不限于三維視覺,點(diǎn)云,高精地圖,自動(dòng)駕駛,以及機(jī)器人等相關(guān)的領(lǐng)域。
分享及合作:微信“920177957”(需要按要求備注) 聯(lián)系郵箱:dianyunpcl@163.com,歡迎企業(yè)來聯(lián)系公眾號(hào)展開合作。
點(diǎn)一下“在看”你會(huì)更好看耶
總結(jié)
以上是生活随笔為你收集整理的Open3d学习计划—高级篇 7(颜色映射)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于相交线的立体平面SLAM
- 下一篇: 【论文速读】城市自动驾驶应用的概率语义地