2016-04-08 3 views
1

У меня есть сборка вокселов, которая представляет камень в 3D. Это бинаризованный numpy 3D-массив, в котором 1 присваивается вокселам, которые составляют мой камень и 0 в другом месте. Я хочу:Python: Сетка сборки вокселей для вычисления площади поверхности

  1. создать свое зацепление поверхности
  2. вычислить площадь поверхности на ней.

Но как?

ответ

2

Я решить мою проблему, если это может быть полезным. Алгоритм Marching Cubes хорош, но он не работает на бинаризованных массивах. Итак: 1) гауссовский фильтр применяется к 3D-массиву (scipy.filters) 2) алгоритма Маршевых Кубиков к сетке (это инструмент scikit-изображение) 3) суммировать площади треугольников (инструмент scikit-изображение)

1

Я могу видеть несколько вариантов в зависимости от вашего приложения: трехмерный выпуклый корпус или маршевые кубы.

3D выпуклая оболочка

Во-первых, вам нужно будет получить массив всех вокселей 3D-координаты, где ваш массив равно 1

Позже вы можете использовать scipy.spatial.ConvexHull. Scipy методы в основном являются оберткой для библиотеки qhull. При использовании qhull одним из вариантов вывода (FA) является вычисление общей площади и объема.

Вы можете найти более подробную информацию здесь: http://scipy.github.io/devdocs/generated/scipy.spatial.ConvexHull.html http://www.qhull.org/html/qconvex.htm

Маршевые Кубики

Если вам нужно сохранить вогнутости, то предыдущий вариант не будет достаточно. Маршевые кубы станут хорошей альтернативой. В scikit-изображении уже реализована реализация python.

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

Вы снова должны получить все точки, как и в предыдущем случае. Вы вычислить глаголы/лица с:

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

И вы можете рассчитать площадь с:

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

+0

Спасибо, это выглядит хорошо. Я могу легко получить массив координат, где у меня есть 1. Я полагаю, что это ---> 'координат = numpy.where (array == 1)'. Сейчас я займусь изучением scipy.convexHull, и я скоро вернусь :-) –

+0

Дайте мне знать, как это происходит, и если вы не против, не забудьте принять ответ, если вы сочтете это полезным. – purpletentacle

+0

Это хороший алгоритм и хорошо работает. Проблема возникает, когда у моего камня есть вогнутость. Он просто находит самый короткий путь, таким образом вырезая вогнутость! –