Как сравнить несколько файлов hdf5
У меня есть несколько файлов h5py (аннотации на уровне пикселей) для одного изображения. Маски изображений хранятся в файлах hdf5 в виде пар ключ-значение, причем ключ является идентификатором некоторого класса. Все маски (файлы hdf5) соответствуют размеру соответствующего изображения и представляют собой метки для пикселей в изображении. Мне нужно сравнить все файлы h5 друг с другом и найти окончательную маску, которая представляет большинство. Но я не знаю, как сравнить несколько файлов h5 в python. Может ли кто-нибудь любезно помочь?
1 ответ
Что вы имеете в виду под словом «сравнивать»?
Если вы просто хотите сравнить файлы, чтобы увидеть, совпадают ли они, вы можете использовать
h5diff
утилита от The HDF5 Group . Он поставляется с установщиком HDF5. Вы можете получить больше информации о h5diff здесь:утилита h5diff . Ссылки на все утилиты HDF5 находятся вверху страницы:HDF5 Tools
Похоже, вам нужно сделать больше этого. Пожалуйста, поясните, что вы имеете в виду под « выяснить последнюю маску, которая представляет большинство ». Хотите узнать средний размер изображения (средний, медианный или режим)? Если это так, то «относительно просто» (если вы знаете Python) открыть каждый файл и получить размер данных изображения (форму каждого набора данных - то, что вы называете значениями). Для справки:
key, value
терминология - это то, как h5py относится к набору данных HDF5
names
и
datasets
.
Вот базовая схема процесса открытия 1 файла HDF5 и цикла по наборам данных (по имени ключа), чтобы получить форму набора данных (размер изображения). Для нескольких файлов вы можете добавить
for
цикл с использованием
iglob
итератор, чтобы получить имена файлов HDF5. Для простоты я сохранил значения формы в 3 списках и вручную вычислил среднее (
sum()/len()
). Если вы хотите рассчитать маску по-другому, я предлагаю использовать массивы NumPy. В него встроены функции среднего и медианного значения . Для режима вам нужно
scipy.stats
модуль (работает на массивах NumPy).
s0_list = []
s1_list = []
s2_list = []
with h5py.File(filename,'r')as h5f:
for name, ds in h5f.items() :
s0_list.append(h5f[name].shape[0])
s1_list.append(h5f[name].shape[1])
s2_list.append(h5f[name].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))