Удалить подключенные компоненты ниже порогового значения в трехмерном массиве - PullRequest
0 голосов
/ 25 апреля 2018

Я работаю над трехмерным массивом в Python и хочу выполнить постобработку на выходе CNN изображений сегментации опухоли головного мозга.Мы получаем трехмерный массив (208x208x155) со значениями 0/1/2/4 для каждого пикселя.Я хочу удалить подключенные компоненты с порогом менее 1000 для улучшения результатов.

Я пробовал эрозионное расширение, но не получил хороших результатов.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 25 апреля 2018

Ладно, поэтому, как вы сами понимали, сжиматься и расти не будет подходом к решению этой проблемы. Что вам нужно сделать, это маркировка региона , и кажется, что Scipy имеет метод, который позволит вам сделать это для nd изображений.

Я предполагаю, что под порогом меньше 1000 вы подразумеваете сумму значений пикселей в подключенных компонентах.

Вот схема того, как я бы это сделал.

from scipy.ndimage import label

segmentation_mask = [...]  # This should be your 3D mask.

# Let us create a binary mask.
# It is 0 everywhere `segmentation_mask` is 0 and 1 everywhere else.
binary_mask = segmentation_mask.copy()
binary_mask[binary_mask != 0] = 1

# Now, we perform region labelling. This way, every connected component
# will have their own colour value.
labelled_mask, num_labels = label(binary_mask)

# Let us now remove all the too small regions.
refined_mask = segmentation_mask.copy()
minimum_cc_sum = 1000
for label in range(num_labels):
    if np.sum(refined_mask[labelled_mask == label]) < minimum_cc_sum:
        refined_mask[labelled_mask == label] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...