获取分割图像的最大连通分量

时间:2017-11-28 21:06:26

标签: python image-processing medical

我有一个CT扫描的分割图像(只有1和0值)。我使用skimage.measure中的函数“label”来获取连接组件的ndarray。现在我需要从“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

非常感谢!

5 个答案:

答案 0 :(得分:4)

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

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会告诉你哪个是最大的。

答案 1 :(得分:2)

吉利的答案很有趣,但如果背景(标号= 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

答案 2 :(得分:1)

以下功能提供了最大的连接分段,但没有背景。输入和输出的形状相同,可以是2D或3D图像。

import numpy as np
from skimage.measure import label

def getLargestCC(segmentation):
    labels = label(segmentation)
    unique, counts = np.unique(labels, return_counts=True)
    list_seg=list(zip(unique, counts))[1:] # the 0 label is by default background so take the rest
    largest=max(list_seg, key=lambda x:x[1])[0]
    labels_max=(labels == largest).astype(int)
    return labels_max

答案 3 :(得分:1)

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

<button type="button" id="upload-button" onclick="getOption()" class="btn btn-success"
    aria-expanded="false">Upload</button>

function getOption() {
    var year = document.getElementById("year");
    var year_option = year.options[year.selectedIndex].value;

    var grade = document.getElementById("grade");
    var grade_option = grade.options[grade.selectedIndex].value;

    var subject = document.getElementById("subject");
    var subject_option = subject.options[subject.selectedIndex].value;

    uploadFileIGCSE(year_option, grade_option, subject_option)
}

答案 4 :(得分:0)

我试图弄清楚如何停止skimage.measure.label将背景算作单独的区域。直到我遇到P Tate's个优雅的解决方案之前,我几乎才开始挖掘skimage.measure.regionprops文档。这是一个快速的图形,它显示了如何使用建议的weights的{​​{1}}参数来节省一些代码行。

numpy.bincount

enter image description here