获取分割图像的最大连接部分

Vip*_*ana 4 python image-processing medical

我有一个CT扫描的分割图像(只有1和0值)。我使用skimage.measure中的函数“ label”来获取连接组件的ndarray。现在,我只需要从“标签”输出(ndarray)中获得最大的连接组件。你知道我该怎么办吗?

我的代码如下所示:

from skimage.measure import label    

def getLargestCC(segmentation):
    labels = label(segmentation)
    // now I need to get only the largest connected component and return it
return largestCC
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Gil*_*lly 6

我不确定你想要什么作为输出,一个掩码?

import numpy as np
from skimage.measure import label   

def getLargestCC(segmentation):
    labels = label(segmentation)
    largestCC = labels == np.argmax(np.bincount(labels.flat))
    return largestCC
Run Code Online (Sandbox Code Playgroud)

Numpy 的 bincount 将计算每个标签出现的次数,而 argmax 会告诉您其中哪个是最大的。


小智 6

Gilly的答案很有趣,但如果背景(label = 0)大于CC研究的结果,那是错误的。Alaleh Rz解决方案处理背景,但速度很慢。调整Gilly提出的解决方案并消除背景问题:

import numpy as np
from skimage.measure import label   

def getLargestCC(segmentation):
    labels = label(segmentation)
    assert( labels.max() != 0 ) # assume at least 1 CC
    largestCC = labels == np.argmax(np.bincount(labels.flat)[1:])+1
    return largestCC
Run Code Online (Sandbox Code Playgroud)


小智 6

OP 的输入分割数据是二进制的,其中背景为 0。因此,我们可以使用 Vincent Agnus 的 np.bincount 方法,但通过使用 np.bincount 的权重参数来简化背景拒绝逻辑。设置 weights=segmentation.flat 将背景总和归零。

import numpy as np
from skimage.measure import label   

def getLargestCC(segmentation):
    labels = label(segmentation)
    largestCC = labels == np.argmax(np.bincount(labels.flat, weights=segmentation.flat))
    return largestCC
Run Code Online (Sandbox Code Playgroud)