gpt4 book ai didi

image-processing - 如何使用 scipy.ndimage 找到最大的连通区域?

转载 作者:行者123 更新时间:2023-12-02 14:54:37 26 4
gpt4 key购买 nike

我有一个二值图像。二值图像有一些孤立的区域,如噪声。我知道预期区域比这些孤立区域大得多。因此,我使用连接的组件通过找到最大的连接区域来删除隔离区域。我必须使用 scipy 包。我发现它有一些功能可以做到这一点。然而,我还差得远结果。如何使用函数获得可以忽略隔离区域的二值图像?谢谢

from scipy import ndimage
label_im, nb_labels = ndimage.label(binary_img)

# Find the largest connected component
sizes = ndimage.sum(binary_img, label_im, range(nb_labels + 1))
mask_size = sizes < 1000
remove_pixel = mask_size[label_im]
label_im[remove_pixel] = 0
labels = np.unique(label_im)
binary_img= np.searchsorted(labels, label_im)
#Select the biggest connected component
binary_img[binary_img < binary_img.max()]=0
binary_img[binary_img >= binary_img.max()]=1

最佳答案

您有一个好的开始,使用 ndimage.sum 找到每个标记区域的大小。

从那里,您可以使用 sizes(或从中派生的东西)作为查找表:

from scipy import ndimage
label_im, nb_labels = ndimage.label(binary_img)
sizes = ndimage.sum(binary_img, label_im, range(nb_labels + 1))
mask = sizes > 1000
binary_img = mask[label_im]

这会创建一个查找表掩码,对于与较大区域的标签相对应的索引,它是true,而在其他地方是false。使用标记图像对查找表进行索引会产生所需的二值图像。

请注意,sizes[label_im] 是一幅图像,其中每个区域都用其大小绘制。也就是说,区域#1 中的每个像素都获得区域#1 大小的值。您可以阈值此图像以删除小区域:

size_img = sizes[label_im]
binary_img = size_img > 1000

(这两行相当于前面代码片段的最后两行。)

关于image-processing - 如何使用 scipy.ndimage 找到最大的连通区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53576830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com