Open3d学习计划—高级篇 2(彩色点云配准)
Open3D是一個(gè)開(kāi)源庫(kù),支持快速開(kāi)發(fā)和處理3D數(shù)據(jù)。Open3D在c++和Python中公開(kāi)了一組精心選擇的數(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視覺(jué),點(diǎn)云交流社區(qū),期待有使用Open3D或者感興趣的小伙伴能夠加入我們的翻譯計(jì)劃,貢獻(xiàn)免費(fèi)交流社區(qū),為使用Open3D提供中文的使用教程。
本教程演示了一種同時(shí)使用幾何和顏色進(jìn)行配準(zhǔn)的ICP變體。它實(shí)現(xiàn)了這篇文章的算法 [Park2017] ,實(shí)現(xiàn)了顏色信息鎖定與切平面的對(duì)齊(The color information locks the alignment along the tangent plane)。這個(gè)算法與之前的ICP配準(zhǔn)速度相當(dāng),但是實(shí)現(xiàn)了更高的精度和魯棒性。本教程使用的符號(hào)來(lái)自ICP配準(zhǔn)。
可視化函數(shù)
為了掩飾不同顏色點(diǎn)云之間的對(duì)齊,draw_registration_result_original_color使用原本的顏色可視化源點(diǎn)云.
def draw_registration_result_original_color(source, target, transformation):source_temp = copy.deepcopy(source)source_temp.transform(transformation)o3d.visualization.draw_geometries([source_temp, target])
注意:這里原來(lái)的教程里可視化函數(shù)都加了初始視角之類的,但是很多人反映這個(gè)會(huì)報(bào)錯(cuò),并且官方函數(shù)里也沒(méi)給出可接受的參數(shù),所以在這里把初始視角的參數(shù)都去掉了
輸入
這段代碼從兩個(gè)文件中讀取源點(diǎn)云和目標(biāo)點(diǎn)云.使用單位陣作為初始化的配準(zhǔn)矩陣.
print("1. Load two point clouds and show initial pose")
source = o3d.io.read_point_cloud("../../TestData/ColoredICP/frag_115.ply")
target = o3d.io.read_point_cloud("../../TestData/ColoredICP/frag_116.ply")# draw initial alignment
current_transformation = np.identity(4)
draw_registration_result_original_color(source, target, current_transformation)
Point-to-plane ICP
我們首先使用?Point-to-plane ICP?作為一個(gè)基準(zhǔn)算法.下面的可視化結(jié)果展示了未對(duì)其的綠色三角形紋理.這是因?yàn)閹缀渭s束不能夠阻止兩個(gè)平面滑動(dòng).
# point to plane ICP
current_transformation = np.identity(4)
print("2. Point-to-plane ICP registration is applied on original point")
print(" clouds to refine the alignment. Distance threshold 0.02.")
result_icp = o3d.registration.registration_icp(source, target, 0.02, current_transformation,o3d.registration.TransformationEstimationPointToPlane())
print(result_icp)
draw_registration_result_original_color(source, target, result_icp.transformation)
彩色點(diǎn)云配準(zhǔn)
彩色點(diǎn)云配準(zhǔn)的核心函數(shù)是 registration_colored_icp .
在這篇文章中,他使用的是具有聯(lián)合優(yōu)化目標(biāo)的ICP迭代(細(xì)節(jié)請(qǐng)看?Point-to-point ICP):
這里的?T 是被估計(jì)旋轉(zhuǎn)矩陣. E_C 和? E_G分別是光度項(xiàng)和幾何項(xiàng).?δ ∈ [ 0 , 1 ]? δ∈[0,1]是通過(guò)經(jīng)驗(yàn)決定的權(quán)重變量.
這里的幾何項(xiàng) E_G 和?Point-to-plane ICP?的目標(biāo)是相等的.
這里的 K是當(dāng)前迭代的對(duì)應(yīng)集, n_p 是對(duì)應(yīng)點(diǎn) p?的法線.
顏色項(xiàng)E_C測(cè)量的是q 點(diǎn)的顏色(用 C(q))?表示)與其在點(diǎn)p的切平面的投影上的顏色之間的差.
這里的C_p 是在?p? 的切平面上連續(xù)定義的預(yù)計(jì)算函數(shù). 函數(shù) f(?)?將3D點(diǎn)投影到切平面.更多細(xì)節(jié)請(qǐng)參看?[Park2017].
為了提高效率,?[Park2017]提供了多尺度的配準(zhǔn)方案,已經(jīng)在以下接口中實(shí)現(xiàn).
# colored pointcloud registration
# This is implementation of following paper
# J. Park, Q.-Y. Zhou, V. Koltun,
# Colored Point Cloud Registration Revisited, ICCV 2017
voxel_radius = [0.04, 0.02, 0.01]
max_iter = [50, 30, 14]
current_transformation = np.identity(4)
print("3. Colored point cloud registration")
for scale in range(3):iter = max_iter[scale]radius = voxel_radius[scale]print([iter, radius, scale])print("3-1. Downsample with a voxel size %.2f" % radius)source_down = source.voxel_down_sample(radius)target_down = target.voxel_down_sample(radius)print("3-2. Estimate normal.")source_down.estimate_normals(o3d.geometry.KDTreeSearchParamHybrid(radius=radius * 2, max_nn=30))target_down.estimate_normals(o3d.geometry.KDTreeSearchParamHybrid(radius=radius * 2, max_nn=30))print("3-3. Applying colored point cloud registration")result_icp = o3d.registration.registration_colored_icp(source_down, target_down, radius, current_transformation,o3d.registration.ICPConvergenceCriteria(relative_fitness=1e-6,relative_rmse=1e-6,max_iteration=iter))current_transformation = result_icp.transformationprint(result_icp)
draw_registration_result_original_color(source, target, result_icp.transformation)
Colored point cloud registration
[50, 0.04, 0]
3-1. Downsample with a voxel size 0.04
3-2. Estimate normal.
3-3. Applying colored point cloud registration
registration::RegistrationResult with fitness=8.763667e-01, inlier_rmse=1.457778e-02, and correspondence_set size of 2084
Access transformation to get result.
[30, 0.02, 1]
3-1. Downsample with a voxel size 0.02
3-2. Estimate normal.
3-3. Applying colored point cloud registration
registration::RegistrationResult with fitness=8.661842e-01, inlier_rmse=8.759721e-03, and correspondence_set size of 7541
Access transformation to get result.
[14, 0.01, 2]
3-1. Downsample with a voxel size 0.01
3-2. Estimate normal.
3-3. Applying colored point cloud registration
registration::RegistrationResult with fitness=8.437191e-01, inlier_rmse=4.851480e-03, and correspondence_set size of 24737
Access transformation to get result.
使用 voxel_down_sample 創(chuàng)造了三層多分辨率的點(diǎn)云.使用頂點(diǎn)法線估計(jì)來(lái)計(jì)算的法線.核心的配準(zhǔn)函數(shù) registration_colored_icp 在每一層從粗糙到精細(xì)都有調(diào)用.lambda_geometric 是 registration_colored_icp 中可選的參數(shù),用于確定(1-δ)E_c + δE_G 中的?δ ∈ [ 0 , 1 ]?
輸出的是兩組緊密對(duì)齊的點(diǎn)云,注意看上面的綠色三角形.
資源
三維點(diǎn)云論文及相關(guān)應(yīng)用分享
【點(diǎn)云論文速讀】基于激光雷達(dá)的里程計(jì)及3D點(diǎn)云地圖中的定位方法
3D目標(biāo)檢測(cè):MV3D-Net
三維點(diǎn)云分割綜述(上)
3D-MiniNet: 從點(diǎn)云中學(xué)習(xí)2D表示以實(shí)現(xiàn)快速有效的3D LIDAR語(yǔ)義分割(2020)
win下使用QT添加VTK插件實(shí)現(xiàn)點(diǎn)云可視化GUI
JSNet:3D點(diǎn)云的聯(lián)合實(shí)例和語(yǔ)義分割
大場(chǎng)景三維點(diǎn)云的語(yǔ)義分割綜述
PCL中outofcore模塊---基于核外八叉樹(shù)的大規(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)分享
【開(kāi)源方案共享】ORB-SLAM3開(kāi)源啦!
【論文速讀】AVP-SLAM:自動(dòng)泊車系統(tǒng)中的語(yǔ)義SLAM
【點(diǎn)云論文速讀】StructSLAM:結(jié)構(gòu)化線特征SLAM
SLAM和AR綜述
常用的3D深度相機(jī)
AR設(shè)備單目視覺(jué)慣導(dǎo)SLAM算法綜述與評(píng)價(jià)
SLAM綜述(4)激光與視覺(jué)融合SLAM
Kimera實(shí)時(shí)重建的語(yǔ)義SLAM系統(tǒng)
SLAM綜述(3)-視覺(jué)與慣導(dǎo),視覺(jué)與深度學(xué)習(xí)SLAM
易擴(kuò)展的SLAM框架-OpenVSLAM
高翔:非結(jié)構(gòu)化道路激光SLAM中的挑戰(zhàn)
SLAM綜述之Lidar SLAM
基于魚(yú)眼相機(jī)的SLAM方法介紹
往期線上分享錄播匯總
第一期B站錄播之三維模型檢索技術(shù)
第二期B站錄播之深度學(xué)習(xí)在3D場(chǎng)景中的應(yīng)用
第三期B站錄播之CMake進(jìn)階學(xué)習(xí)
第四期B站錄播之點(diǎn)云物體及六自由度姿態(tài)估計(jì)
第五期B站錄播之點(diǎn)云深度學(xué)習(xí)語(yǔ)義分割拓展
第六期B站錄播之Pointnetlk解讀
[線上分享錄播]點(diǎn)云配準(zhǔn)概述及其在激光SLAM中的應(yīng)用
[線上分享錄播]cloudcompare插件開(kāi)發(fā)
[線上分享錄播]基于點(diǎn)云數(shù)據(jù)的?Mesh重建與處理
[線上分享錄播]機(jī)器人力反饋遙操作技術(shù)及機(jī)器人視覺(jué)分享
[線上分享錄播]地面點(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)開(kāi)源方案的演示:
如果你對(duì)Open3D感興趣,或者正在使用該開(kāi)源方案,就請(qǐng)加入我們,一起翻譯,一起學(xué)習(xí),貢獻(xiàn)自己的力量,目前階段主要以微信群為主,有意者發(fā)送“Open3D學(xué)習(xí)計(jì)劃”到公眾號(hào)后臺(tái),和更多熱愛(ài)分享的小伙伴一起交流吧!如果翻譯的有什么問(wèn)題或者您有更好的意見(jiàn),請(qǐng)?jiān)u論交流!!!!
以上內(nèi)容如有錯(cuò)誤請(qǐng)留言評(píng)論,歡迎指正交流。如有侵權(quán),請(qǐng)聯(lián)系刪除
掃描二維碼
? ? ? ? ? ? ? ? ? ?關(guān)注我們
讓我們一起分享一起學(xué)習(xí)吧!期待有想法,樂(lè)于分享的小伙伴加入免費(fèi)星球注入愛(ài)分享的新鮮活力。分享的主題包含但不限于三維視覺(jué),點(diǎn)云,高精地圖,自動(dòng)駕駛,以及機(jī)器人等相關(guān)的領(lǐng)域。
分享及合作方式:微信“920177957”(需要按要求備注) 聯(lián)系郵箱:dianyunpcl@163.com,歡迎企業(yè)來(lái)聯(lián)系公眾號(hào)展開(kāi)合作。
點(diǎn)一下“在看”你會(huì)更好看耶
總結(jié)
以上是生活随笔為你收集整理的Open3d学习计划—高级篇 2(彩色点云配准)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windows下编译pcl-master
- 下一篇: SLAM综述(1)-Lidar SLAM