2016-07-05 20 views
1

私は、約200万の三角形を持つ高解像度の三角形メッシュを持っています。三角形と頂点の数をそれぞれ約10000個に減らしたいが、できるだけ一般的な形を保ちたい。Pythonのメッシュ間引き

これは、reducepatchを使ってMatlabで行うことができます。もう一つの選択肢はqslimパッケージです。また、VTKにはデシメーション機能があり、これはPythonインターフェースを備えているので、技術的にはPythonでも可能です。 MeshlabはおそらくPythonでも利用可能です(?)。

どのように私はこの種のメッシュ間引きをPythonで行うことができますか?例は非常に高く評価されるでしょう。

+2

おそらくこの例ですか?それはPythonではありませんが、それを翻訳するのは簡単ですhttp://www.vtk.org/Wiki/VTK/Examples/Cxx/Meshes/Decimation – MrPedru22

+0

うん、私はそれを見たが、私のために翻訳するのは容易ではない私は初心者です。どんな助けでも大歓迎です。 – AnandJ

答えて

2

これは、C++に相当するvtkの例(http://www.vtk.org/Wiki/VTK/Examples/Cxx/Meshes/Decimation)から翻訳された最小のpythonプロトタイプです。これは、MrPedru22とよく言われています。

from vtk import (vtkSphereSource, vtkPolyData, vtkDecimatePro) 


def decimation(): 
    sphereS = vtkSphereSource() 
    sphereS.Update() 

    inputPoly = vtkPolyData() 
    inputPoly.ShallowCopy(sphereS.GetOutput()) 

    print("Before decimation\n" 
      "-----------------\n" 
      "There are " + str(inputPoly.GetNumberOfPoints()) + "points.\n" 
      "There are " + str(inputPoly.GetNumberOfPolys()) + "polygons.\n") 

    decimate = vtkDecimatePro() 
    decimate.SetInputData(inputPoly) 
    decimate.SetTargetReduction(.10) 
    decimate.Update() 

    decimatedPoly = vtkPolyData() 
    decimatedPoly.ShallowCopy(decimate.GetOutput()) 

    print("After decimation \n" 
      "-----------------\n" 
      "There are " + str(decimatedPoly.GetNumberOfPoints()) + "points.\n" 
      "There are " + str(decimatedPoly.GetNumberOfPolys()) + "polygons.\n") 


if __name__ == "__main__": 
    decimation() 
関連する問題