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)
非常感谢!
我不确定你想要什么作为输出,一个掩码?
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)