python - 如何比较多个hdf5文件
问题描述
我有一个图像的多个 h5py 文件(像素级注释)。图像掩码作为键值对存储在 hdf5 文件中,键是某个类的 id。掩码(hdf5 文件)都与其对应图像的尺寸相匹配,并代表图像中像素的标签。我需要将所有 h5 文件相互比较,并找出代表大多数的最终掩码。但我不知道如何在 python 中比较多个 h5 文件。有人可以帮忙吗?
解决方案
“比较”是什么意思?
如果您只想比较文件以查看它们是否相同,您可以使用HDF5 Grouph5diff
的实用程序。它带有 HDF5 安装程序。您可以在此处获取有关 h5diff 的更多信息:h5diff 实用程序。所有 HDF5 实用程序的链接位于页面顶部:HDF5 工具
听起来你需要做更多的事情。请澄清您所说的“找出代表大多数人的最终面具”的意思。您想找到平均图像大小(平均值、中值或众数)吗?如果是这样,打开每个文件并获取图像数据的维度(每个数据集的形状——你称之为值)是“相对简单的”(如果你知道 Python)。作为参考,key, value
术语是 h5py 如何引用 HDF5 数据集names
和datasets
.
这是打开 1 个 HDF5 文件并遍历数据集(按键名)以获取数据集形状(图像大小)的过程的基本概述。对于多个文件,您可以for
使用迭代器添加一个循环iglob
来获取 HDF5 文件名。为简单起见,我将形状值保存到 3 个列表中并手动计算平均值 ( sum()/len()
)。如果你想以不同的方式计算掩码,我建议使用 NumPy 数组。它具有内置的均值和中值函数。对于mode,您需要scipy.stats
模块(它适用于 NumPy 数组)。
方法1:迭代 .keys()
s0_list = []
s1_list = []
s2_list = []
with h5py.File(filename,'r')as h5f:
for name in h5f.keys() :
shape = h5f[name].shape
s0_list.append(shape[0])
s1_list.append(shape[1])
s2_list.append(shape[2])
print ('Ave len axis=0:',sum(s0_list)/len(s0_list))
print ('Ave len axis=1:',sum(s1_list)/len(s1_list))
print ('Ave len axis=2:',sum(s2_list)/len(s2_list))
方法 2:迭代 .items()
s0_list = []
s1_list = []
s2_list = []
with h5py.File(filename,'r')as h5f:
for name, ds in h5f.items() :
shape = ds.shape
s0_list.append(shape[0])
s1_list.append(shape[1])
s2_list.append(shape[2])
print ('Ave len axis=0:',sum(s0_list)/len(s0_list))
print ('Ave len axis=1:',sum(s1_list)/len(s1_list))
print ('Ave len axis=2:',sum(s2_list)/len(s2_list))
推荐阅读
- unity3d - 更改线渲染器 alpha unity
- google-apps-script - 如何访问和提取未绑定到代码的 App Script 中的数据
- python - 使用按钮打开一个新窗口
- python - 截取除 1 个窗口之外的所有内容
- python - ImportError:没有名为 nltk macos 的模块
- ajax - Elementor 小部件中的 Ajax 处理
- csv - 使用 awk 获取正确的列并定义要使用的分隔符和分隔符?
- cognos - Cognos Analytics - 合并两个维度时不加载报表
- node.js - 节点 process.argv 正在剥离插入符号 (^)
- java - 蒙特卡罗模拟 - 如果两个整数互质的概率?