我有一个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
非常感谢!
答案 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