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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM