首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用scipy.ndimage找到最大的连通地域?

如何使用scipy.ndimage找到最大的连通地域?
EN

Stack Overflow用户
提问于 2018-12-02 10:34:24
回答 1查看 1.6K关注 0票数 2

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-12-02 16:45:52

您已经有了一个很好的开始,可以使用ndimage.sum查找每个标记区域的大小。

在那里,您可以使用sizes (或从它派生的内容)作为查找表:

代码语言:javascript
复制
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]

这将创建一个查找表mask,对于与较大区域的标签相对应的索引,该表为true,对于其他地方为false。使用标记的图像索引到查找表中产生所需的二进制图像。

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

代码语言:javascript
复制
size_img = sizes[label_im]
binary_img = size_img > 1000

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53576830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档