我有一個用激光掃描儀獲得的物體的點雲以及該物體的CAD表面模型。將3D點雲與CAD模型匹配
如何將點雲與表面相匹配以獲得雲和模型之間的平移和旋轉?
我想我可以對錶面進行採樣並嘗試使用Iterative Closest Point(ICP)算法將得到的採樣點雲與掃描儀點雲相匹配。
這實際上工作嗎?
這個任務有更好的算法嗎?
我有一個用激光掃描儀獲得的物體的點雲以及該物體的CAD表面模型。將3D點雲與CAD模型匹配
如何將點雲與表面相匹配以獲得雲和模型之間的平移和旋轉?
我想我可以對錶面進行採樣並嘗試使用Iterative Closest Point(ICP)算法將得到的採樣點雲與掃描儀點雲相匹配。
這實際上工作嗎?
這個任務有更好的算法嗎?
是的,ICP可以應用於這個問題,正如您對採樣表面所建議的。如果您的激光掃描中有所有可用的面孔,最好的方法是,否則您可能需要從模型中刪除不可見的面(取決於其中有多少面)。
通過除去一些隱藏面來自動準備模型的一種方法是計算可用於丟棄隱藏面(例如,不接近凹面的面的面)的凹面殼體。取決於模型的參與程度,這可能或可能不是必需的。
如果給出一個好的初始猜測,ICP很好用,因爲它忽略了與當前猜測不相關的點。如果ICP沒有提供良好的對齊方式,您可以嘗試多次隨機重新啓動以嘗試解決此問題,並選擇最佳對齊方式。
更復雜的解決方案是做本地特徵匹配。您可以採樣並計算像SHOT或FPFH這樣的不變描述符。你會發現最好的匹配,拒絕不一致的匹配,用它們來創建一個良好的初始對齊,然後用ICP進行優化。但是,您可能不需要這一步,具體取決於隨機重啓ICP的穩健性和快速性。
有一個針對point cloud algorithms的開源庫,它針對其他點雲實施registration。可能你可以嘗試一些他們的方法,看看是否有任何適合。作爲初學者,如果他們沒有特定的任何東西來適應多邊形網格,可以將網格頂點視爲另一個點雲,並使其適合您的點雲。這是他們絕對支持的。
在新的OpenCV中,我實現了一個表面匹配模塊來匹配3D模型和3D場景。不需要初始姿勢,檢測過程是全自動的。該模型還涉及ICP。
爲了得到一個想法,請在這裏檢查出的視頻(雖然它不是由OpenCV的實施產生):
https://www.youtube.com/watch?v=uFnqLFznuZU
您提到您需要對CAD模型進行採樣。這是正確的,我們已經給適合於點對特徵匹配的採樣算法,如一個在OpenCV中實施:
甲點採樣算法不規則幾何,託加Birdal斯洛博丹伊利奇的3D匹配
http://campar.in.tum.de/pub/tbirdal2017iros/tbirdal2017iros.pdf
視頻看起來很有趣,但這個答案缺乏必要的信息,以重現你的結果。你能總結一下你使用的方法,並顯示相關的OpenCv調用?完整的代碼是否可用? – HugoRune
Full code is available at https://github.com/tolgabirdal/opencv_contrib/tree/master/modules/surface_matching –