Ладно, поэтому, как вы сами понимали, сжиматься и расти не будет подходом к решению этой проблемы. Что вам нужно сделать, это маркировка региона , и кажется, что 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