如何在python中删除一些连接的组件?

时间:2014-05-31 06:21:52

标签: python ndimage

考虑二值化图像,我在其上使用scipy.ndimage.label(),然后在结果上应用find_objects()

现在我有一个由N个元组组成的元组列表,每个元组都是两个片段,如:

index  value
 0   (slice(0, 21, None) slice(0, 12, None)) 
 1   (slice(0, 42, None) slice(7, 31, None))
 .   (...., ....)

描述了由于连接组件引起的x-y边界坐标。

以索引0元组为例:

slice(0, 21, None)表示行号为0~21和

slice(0, 12, None)表示列号为0~12。

所以我们知道这个cc的区域是21 * 12 = 252

现在我想删除面积小于300的连接组件。

我已经知道这样做会迭代所有这些。 我想以更有效的方式做到这一点;有谁知道怎么做?

1 个答案:

答案 0 :(得分:3)

使用此代码将解决我的问题:

def CC(Map):
    label_img, cc_num = ndimage.label(Map)
    CC = ndimage.find_objects(label_img)
    cc_areas = ndimage.sum(Map, label_img, range(cc_num+1))
    area_mask = (cc_areas < 1500)
    label_img[area_mask[label_img]] = 0
return label_img, CC

area_mask [label_img]是我的opnion中最重要的掩码技巧。