2015-04-19 26 views
6

Przepraszam, jeśli jest to rodzaj pytania początkujących, ale jestem całkiem nowy w Pythonie i HDF5. Używam h5py, numpy i Python 2.7. Mam dane z różnych plików, które należy zaimportować do jednego pliku HDF5. Dane z każdego pliku mają być przechowywane w innej grupie. Każda z tych grup musi zawierać 1) surowe dane z pliku jako macierz m x n oraz 2) raster obrazu wygenerowany ze znormalizowanych nieprzetworzonych danych.Dodaj obraz rastrowy do pliku HDF5 za pomocą h5py

Jestem w stanie wykonać część 1, i jestem w stanie znormalizować dane, ale nie jestem w stanie zapisać tych znormalizowanych danych do obrazu rastrowego, ponieważ nie wiem, jak dodać obraz rastrowy do grupy. Wygląda na to, że powinien istnieć łatwy i bezpośredni sposób, aby to zrobić, ale przeczytałem dokumentację i jej nie znalazłem. Jak zrobiłby to w h5py, a jeśli nie można tego zrobić za pomocą h5py, co powinienem zrobić, aby to osiągnąć?

Dzięki!

+0

Czy obraz rastrowy to tablica 'numpy'? Czy dane są również tablicą? Przeczytaj ponownie dokumentację 'h5py'. Wierzę, że tablica 'numpy' jest podstawową jednostką danych, którą można dodać z tym pakietem. – hpaulj

+1

http://docs.h5py.org/en/latest/high/dataset.html - 'create_dataset' jest podstawowym mechanizmem dodawania numpy tablic do grupy. – hpaulj

+0

Mogę dodać tablicę danych jako matrycę m x n, ale jak dodać ją tak, aby wyświetlała się jako obraz; takie jak te tutaj: [link] (http://hdfgroup.org/HDF5/Tutor/h5image.html) używając h5py? – pyguy

Odpowiedz

7

Nie ma nic szczególnego w obrazach w HDF5. Podany adres link dotyczy powiązań biblioteki wysokiego poziomu. Możesz równie łatwo korzystać z specifications obrazów w HDF5, które są tylko atrybutami.

Oto bardzo szybkie i brudne przykład:

#!/usr/bin/env python 

import numpy as np 
import h5py 

# Define a color palette 
pal = np.array([[0,  0, 168], 
       [0,  0, 252], 
       [0, 168, 252], 
       [84, 252, 252], 
       [168, 252, 168], 
       [0, 252, 168], 
       [252, 252, 84], 
       [252, 168, 0], 
       [252, 0, 0]], 
       dtype=np.uint8 
       ) 

# Generate some data/image 
x = np.linspace(0,pal.shape[0]-1) 
data,Y = np.meshgrid(x,x) 

# Create the HDF5 file 
f = h5py.File('test.h5', 'w') 

# Create the image and palette dataspaces 
dset = f.create_dataset('img', data=data) 
pset = f.create_dataset('palette', data=pal) 

# Set the image attributes 
dset.attrs['CLASS'] = 'IMAGE' 
dset.attrs['IMAGE_VERSION'] = '1.2' 
dset.attrs['IMAGE_SUBCLASS'] = 'IMAGE_INDEXED' 
dset.attrs['IMAGE_MINMAXRANGE'] = np.array([0,255], dtype=np.uint8) 
dset.attrs['PALETTE'] = pset.ref 

# Set the palette attributes 
pset.attrs['CLASS'] = 'PALETTE' 
pset.attrs['PAL_VERSION'] = '1.2' 
pset.attrs['PAL_COLORMODEL'] = 'RGB' 
pset.attrs['PAL_TYPE'] = 'STANDARD8' 

# Close the file 
f.close() 

uruchomić przykład, a następnie spojrzeć na obraz w HDFView:

Image within HDF5 file

Zauważ, że musisz aby otworzyć dane obrazu za pomocą opcji "Otwórz jako", aby zobaczyć go jako obraz, ponieważ widok tabeli jest domyślny.

+0

Dokładnie to. Nie mam pojęcia, jak tęskniłem wcześniej, przeglądając dokumenty. Dziękuję Ci bardzo! – pyguy

+0

Jak czytać ten plik .h5 za pomocą MATLAB? –

+1

@MojoJojo Nie używam Matlab, jednak istnieje odpowiedź na stronie [Matlab Answers] (http://www.mathworks.com/matlabcentral/answers/93316-is-it-possible-to-open-hdf5 -h5-images-in-matlab). Nadzieja, która pomaga. –

Powiązane problemy