/ / Python: Mesh zestaw wokseli do obliczenia powierzchni - python, algorytm, numpy, mesh, woksel

Python: Mesh zestaw wokseli do obliczenia powierzchni - python, algorytm, numpy, mesh, woksel

Mam zespół wokseli, który reprezentuje kamień w 3D. Jest to binaryzowana tablica 3D, w której 1 jest przypisana do wokseli, które tworzą mój kamień i 0 gdzie indziej. Chcę:

  1. utwórz jego siatkową powierzchnię
  2. obliczyć powierzchnię na nim.

Ale jak?

Odpowiedzi:

2 dla odpowiedzi № 1

Rozwiązałem mój problem, jeśli może być użyteczny. Algorytm Marching Cubes jest dobry, ale nie działa dobrze na tablicach binarizowanych. 1) Filtr gaussowski zastosowany do tablicy 3D (scipy.filters) 2) Algorytmy marszowe kostek do ich zazębienia (narzędzie scikit-image) 3) Podsumuj obszary trójkątów (narzędzie obrazu scikit)


1 dla odpowiedzi nr 2

Widzę kilka opcji w zależności od zastosowania: 3D wypukły kadłub lub maszerujące kostki.

3D wypukły kadłub

Najpierw musisz uzyskać tablicę wszystkich współrzędnych 3D woksela, gdzie twoja tablica jest równa 1

Później możesz użyć scipy.spatial.ConvexHull. Scipy metody są zasadniczo opakowaniem dla qhull biblioteka. Podczas używania qhull, jedna z opcji wyjściowych (FA) to obliczenie całkowitej powierzchni i objętości.

Tutaj znajdziesz więcej informacji: http://scipy.github.io/devdocs/generated/scipy.spatial.ConvexHull.html http://www.qhull.org/html/qconvex.htm

Marszowe kostki

Jeśli chcesz zachować wklęsłości, to poprzednia opcja nie wystarczy. Marszowe kostki będą dobrą alternatywą. Istnieje już implementacja Pythona w obrazie scikit.

http://scikit-image.org/docs/dev/auto_examples/plot_marching_cubes.html

Ponownie musisz zdobyć wszystkie punkty, tak jak w poprzednim przypadku. Obliczasz czasowniki / twarze za pomocą:

http://scikit-image.org/docs/dev/api/skimage.measure.html#marching-cubes

A możesz obliczyć obszar za pomocą:

http://scikit-image.org/docs/dev/api/skimage.measure.html#mesh-surface-area