前文提到的多種icp方式均需要初始的變換函數作為配準過程的初始值,并在該初始值上進行迭代優化得到結果;那么global icp為前面這些精配準的icp提供了初始變換函數。因此global ICP配準后可視化的點云結果可能沒有完全配準,需要再進行一次精配準操作。
global icp需要對點云提取幾何關鍵點與描述子特征信息,并通過其匹配方式找到兩份點云數據中對應的點。類似于圖像的關鍵點匹配。這里使用FPFH特征作為示例,FPFH特征使用33維度的描述子向量來描述一個關鍵點局部的幾何信息;然后使用匹配的方式對兩組點云中的關鍵點與描述子進行距離匹配與RANSAC來得到對應的點對。
如果你有自己的特征點與匹配方式,也可以自行實現后傳遞原始點云與目標點云的給registration_ransac_based_on_correspondence或registration_fgr_based_on_correspondence,其中corres 的類型(open3d.utility.Vector2iVector);示例使用內置的特征匹配進行演示,但給出了基于correspondence的代碼。
在每一次RANSAC迭代中,通過設定ransac_n與open3d.pipelines.registration.CorrespondenceChecker來過濾外點;只有真正通過所有檢測的點會被認為是最終的inlier并計算變換矩陣后再整個點云上進行驗證;其中RANSACConvergenceCriteria設定了RANSAC的迭代次數與置信度,調整該參數可以獲得更好的結果但也會增加運算時間。
# NNNNNathan
1、global icp
整體代碼如下:
import open3d a