python - 删除 3 维数组中低于阈值的连接组件

标签 python post-processing numpy-ndarray

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

我尝试了侵 eclipse 扩张,但没有得到好的结果。谁能帮我吗?

最佳答案

好吧,正如您自己所意识到的那样,缩小和增长并不是解决这个问题的方法。您需要做的是region labelling ,似乎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

关于python - 删除 3 维数组中低于阈值的连接组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50015458/

相关文章:

Python多线程: manager dict not serializable

python - 在 tweepy 中捕获所有追随者

python - 如何在Python和C/C++中使用共享内存

javascript - 获取天气预报数据以加载到 amcharts 数据加载器中

python - 在numpy中重复具有不同重复值的索引

python - 基于内部值的 Numpy 数组操作

python - Redis管道-原子获取另一个键值的值

regex - 如何在jmeter中的正则extracor表达式中获得最后一场比赛?

java - 在 libgdx 中使用 box2dlights 进行后处理效果

python - 如何将 ndarray 值附加到特定列的数据帧行中?