python - 按粒子区域过滤标记图像
问题描述
我有一个检测到的粒子的标记图像和一个带有每个标记粒子的相应区域的数据框。我想要做的是过滤掉图像上面积小于指定值的每个粒子。
我用下面的例子得到了它,但我知道必须有一个更聪明,尤其是更快的方法。例如,通过将图像与数组进行比较来跳过循环。
谢谢你的帮助!
例子:
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
解决方案
您可以使用isin
来检查多个标签的相等性。int
生成的布尔数组可以在转换为所需类型(例如)后直接用作掩码:
labels = df.loc[df.area.gt(5000), 'label']
mask = np.isin(labeled_image, labels).astype(int)
推荐阅读
- python - 如何在 Python 3 中遍历组(GroupBy)?
- ejs - Visual Studio 2019 中是否支持 EJS 文件?
- mysql - 查询教授和薪水大于特定部门的最小值
- reactjs - 在 React 中映射时标记与谷歌地图不相关
- angular - 如何使用单点登录通过 Windows 登录登录 Angular 应用
- laravel-5 - Laravel,如何从动态输入中更新数据?
- symfony - VichUploaderBundle - 使用控制器在 ekkoLightbox 中提供文件
- react-native - 在 Mac 上设置 getstream.io 反应本机演示的问题
- android - Android PackageInstaller 未安装 APK
- c++ - 3Sum 超过时间限制 LeetCode