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

标签 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 的连通分量。

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

最佳答案

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

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/

相关文章:

python - urllib2 HTTP 错误 429

python 2.6 : encode() takes no keyword arguments

python - 结果不会写入 txt 文件

python - 从 Python 数组中删除完全隔离的单元格?

python - Scipy ndimage median_filter 来源

python - Nose 测试 - 文件上传

python - 根据符号递增数字

python - 显微镜图像分割 : bacteria segmentation with python

python - 逐像素读取图像(ndimage/ndarray)

python - 想检测拼图的边角部分,但找不到每 block 的4个角