3

約 200 万個の三角形を含む高解像度の三角形メッシュがあります。一般的な形状を可能な限り維持しながら、三角形と頂点の数をそれぞれ約 10000 まで減らしたいと考えています。

これは、reducepatch を使用して Matlab で実行できることを知っています。別の代替手段は qslim パッケージです。また、python インターフェースを持つ VTK にはデシメーション機能がありますので、技術的には python でも可能です。Meshlab はおそらく python でも利用できます (?)。

Pythonでこの種のメッシュデシメーションを行うにはどうすればよいですか? 例をいただければ幸いです。

4

3 に答える 3

5

MrPedru22がよく示唆しているように、C++ の同等の vtk の例 ( http://www.vtk.org/Wiki/VTK/Examples/Cxx/Meshes/Decimation )から翻訳された最小限の Python プロトタイプを次に示します。

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()
于 2016-07-05T09:52:48.457 に答える