MeshLab中进行点云配准
MeshLab是一個開源、可移植和可擴展的三維幾何處理系統,主要用于交互處理和非結構化編輯三維三角形網格。它支持多種文件格式:
- import:PLY, STL, OFF, OBJ, 3DS, COLLADA, PTX, V3D, PTS, APTS, XYZ, GTS, TRI, ASC, X3D, X3DV, VRML, ALN
- export:PLY, STL, OFF, OBJ, 3DS, COLLADA, VRML, DXF, GTS, U3D, IDTF, X3D
下面來試一下MeshLab中的點云配準功能,為了進行驗證,需要先創建兩塊位置姿態不匹配的點云。這里使用開源的三維建模軟件Blender,首先在Blender中按X鍵刪除默認的立方體后,按Shift+A創建一個猴頭suzanne(Suzanne?is?Blender's alternative to more common test models such as the Utah Teapot and the Stanford Bunny),然后添加一個修改器,Subdivision Surface將Render設置為1之后點擊Apply。
接下來將其輸出為PLY格式的文件(?PLY文件格式是Stanford大學開發的一套三維mesh模型數據格式,它允許以ASCII碼格式或二進制形式存儲文件,在圖形學的研究領域中PLY是種常用且重要的文件格式)
然后將該猴頭在Blender中平移和旋轉到另一個位置,這里沿著XYZ軸分別平移了2個單位(Blender中使用鍵盤命令:GX2、GY2、GZ2),然后繞Z軸旋轉了-45°(RZ-45),最后也將其輸出為PLY文件。
?
這一變換對應的變換矩陣T為:
在MeshLab中導入這兩個文件,渲染模式選為點后可以看到兩塊點云,如下圖所示。
接著點擊工具欄上的Align按鈕進行配準,這時會彈出一個Align Tool的對話框。首先要選擇參考點云,這里將沒有平移旋轉的原始點云作為參考,然后點擊Glue Here Mesh,選擇好之后點云名字前面會出現一個星號。
然后選擇另一塊點云,點擊Point Based Glueing,這時彈出一個窗口,在兩塊點云上手動選擇匹配點,至少選4對點之后點OK確認。雙擊鼠標左鍵進行選擇,按住Ctrl雙擊左鍵消除選擇。
之后會發現,兩塊點云基本上重合在了一起,并且第二塊點云名字前也出現了一個星號。初始配準之后,我們將進行ICP配準,注意Param ICP Default中的默認參數,根據需要進行修改。如果我們的兩塊點云大小相同,那么就要勾選Rigid matching選型。如果我們不勾選,那最終的變換矩陣中將會有一個縮放因子。
- 采樣點數目(Sample Number):this is the number of samples it pulls from each mesh to compare to the other meshes. You do not want to make this number too big. A small sample typically works quiet well. 1,000 to 5,000 is usually plenty.
- Minimal starting distance:this ignores any samples that are outside of this range. Typically for a manually aligned object you want this to be large enough to encompass your 'point picking' error. A value of 5 or 10 (in millimeters) is usually a good start. Once the initial alignements are complete, drop it down to 1mm to 'fine tune'
- Target distance(相當于均方誤差mse):an average alignment error value that the software?will try to obtain from the process?
- 最大迭代次數(Max iteration number):the maximum number of iterations that the?software will perform?
點擊Process之后軟件開始自動計算,將工程保存為ALN文件(Align Project),之后用文本編輯器打開,可以看到Align文件中每一個點云都有一個代表其位置和姿態的旋轉矩陣。
1.ply # 1.000000 -0.000000 -0.000000 -0.000000 0.000000 1.000000 0.000000 -0.000000 0.000000 -0.000000 1.000000 -0.000000 0.000000 0.000000 0.000000 1.000000 2.ply # 0.706755 -0.707458 0.000400 0.000489 0.707458 0.706755 0.000011 -2.828475 -0.000291 0.000275 1.000000 -1.999996 0.000000 0.000000 0.000000 1.000000將猴頭從位置2變換到位置1的矩陣為T-1:
對比可以看出MeshLab中的Align配準工具正確計算出了變換矩陣T-1。需要注意的是,不要想當然的以為逆矩陣中的移動分量為(-2,-2,-2)T,參考《機器人學導論》中第2章——Spatial descriptions and transformations
已知B→A的齊次變換矩陣T,則A→B的齊次變換矩陣T-1如下:
?
?
?
參考:
http://blog.csdn.net/szchtx/article/details/7587999
http://download.csdn.net/detail/chx_man/6314891
轉載于:https://www.cnblogs.com/21207-iHome/p/6034792.html
總結
以上是生活随笔為你收集整理的MeshLab中进行点云配准的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [20161107]关于数据文件位图区.
- 下一篇: 设计模式学习笔记(二十二:备忘录模式)