考虑一个二值化图像,我在其上使用 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 的连通分量。
我已经知道要对所有这些进行迭代。 我想以更有效的方式做到这一点;有人知道怎么做吗?
最佳答案
使用此代码将解决我的问题:
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] 是我认为最重要的蒙版技巧。
关于python - 如何删除python中的一些连接组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23967084/