Я пытаюсь выполнить сегментацию водораздела для куба 30x30x30 (бинвокс, преобразованный в npy
). Он может иметь две функции, такие как прямоугольный проход и круговой проход. Я хочу разделить куб на два разных куба с каждой функцией.
Массив numpy, который я наконец получил, является двоичным, 1
там, где твердое тело, и 0
там, где он полый.
Я попытался использовать тот же подход, который мы используем для изображений (маркировка подключенных компонентов с последующей сегментацией водораздела) с использованием библиотеки scikit-image
. Сбой для основного файла с двумя функциями. Я также попробовал Connected Components 3D с последующим scikit-image
водоразделом, но ничего плодотворного не происходит.
Пожалуйста, смотрите код ниже.
inf = np.load(path/to/npy)
D = ndimage.distance_transform_edt(inf)
localMax = peak_local_max(D, labels=inf, indices=False, min_distance=1)
# ccl
markers = ndimage.label(localMax)
# perform a connected component analysis on the local peaks, using 8-connectivity, then appy the Watershed algorithm
labels = watershed(-D, markers, mask=inf)
# loop over the unique labels returned by the Watershed algorithm
for label in np.unique(labels):
if label == 0:
continue
mask = np.ones(inf.shape, dtype=np.int32)
mask[labels == label] = 0
np.save(path/to/save)
Поскольку я работаю над этим в одиночку, мне может понадобиться изменить свой мыслительный процесс. Так что, если кто-нибудь может подсказать мне, где я ошибаюсь, это будет очень полезно.