首页 > 解决方案 > 按粒子区域过滤标记图像

问题描述

我有一个检测到的粒子的标记图像和一个带有每个标记粒子的相应区域的数据框。我想要做的是过滤掉图像上面积小于指定值的每个粒子。

我用下面的例子得到了它,但我知道必须有一个更聪明,尤其是更快的方法。例如,通过将图像与数组进行比较来跳过循环。

谢谢你的帮助!

例子:

labels = df["label"][df.area > 5000].to_numpy()
mask = np.zeros(labeled_image.shape)
for label in labels:
    mask[labeled_image == label] = 1

数据框:

      label  centroid-0  centroid-1  area
0         1          15        3681   191
1         2          13        1345   390
2         3          43        3746   885
3         4          32        3616   817
4         5          20        4250   137
    ...         ...         ...   ...
3827   3828        4149        1620   130
3828   3829        4151         852    62
3829   3830        4155         330   236
3830   3831        4157         530   377
3831   3832        4159        3975    81

标签: pythonpandasimagenumpy

解决方案


您可以使用isin来检查多个标签的相等性。int生成的布尔数组可以在转换为所需类型(例如)后直接用作掩码:

labels = df.loc[df.area.gt(5000), 'label']
mask = np.isin(labeled_image, labels).astype(int)

推荐阅读