在3维阵列中删除低于阈值的连接组件

时间:2018-04-25 06:32:21

标签: python post-processing numpy-ndarray

我正在研究python中的3-D numpy数组,并希望对脑肿瘤分割图像的CNN输出进行后处理。我们得到一个3-D(208x208x155)numpy数组,每个像素的值为0/1/2/4。我想删除阈值小于1000的连接组件,以获得更好的结果。

我尝试了糜烂扩张,但没有取得好成绩。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

好吧,正如你意识到的那样,缩小和成长将不是解决这个问题的方法。您需要做的是region labellingScipy似乎有一种方法可以让您为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