3

考虑一个二值化图像,我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))
 .   (...., ....)

它描述了由于连通分量而产生的 xy 边界坐标。

以索引为 0 的元组为例:

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

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

所以我们会知道这个 cc 的面积是21 * 12 = 252

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

我已经知道要对所有这些进行迭代。我想以更有效的方式做到这一点;有人知道怎么做吗?

4

1 回答 1

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] 是我认为最重要的掩码技巧。

于 2014-05-31T15:05:48.127 回答