得到分割图像的最大连通分量

2024-09-19 23:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个CT扫描的分割图像(只有1和0值)。我使用的函数“label”来自撇油量获取所连接组件的日期。现在我只需要从“label”输出(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

非常感谢!在


Tags: 函数代码from图像importreturndef组件
3条回答

OP的输入分段数据是二进制的,其中背景为0。所以,我们可以用文森特·阿格努斯np.bin计数通过使用bincount.np的权重参数。 设定权重=分段.平面把背景和归零。在

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

我不确定你想要什么作为输出,一个面具?在

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

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

Gilly的回答很有趣,但是如果背景(标签=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

相关问题 更多 >