2015-04-19 13 views
6

Mi scuso se questa è una specie di domanda per principianti, ma sono abbastanza nuova per Python e HDF5. Sto usando h5py, numpy e Python 2.7. Ho dati da vari file che devono essere importati in un file HDF5. I dati di ciascun file devono essere memorizzati in un gruppo diverso. Ciascuno di questi gruppi deve contenere 1) i dati grezzi dal file come una matrice m x n e 2) un'immagine raster generata da dati grezzi normalizzati.Aggiungere l'immagine raster al file HDF5 usando h5py

Sono in grado di eseguire la parte 1 e sono in grado di normalizzare i dati, ma non sono in grado di scrivere i dati normalizzati in un'immagine raster perché non so come aggiungere un'immagine raster a un gruppo. Sembra che ci dovrebbe essere un modo semplice e diretto per farlo, ma ho letto la documentazione e non l'ho trovata. Come si farebbe questo in h5py, e se non può essere fatto usando h5py, che cosa dovrei usare per realizzare questo?

Grazie !!

+0

L'immagine raster è una matrice 'numpy'? Anche i dati sono un array? Rileggere la documentazione di 'h5py'. Credo che l'array 'numpy' sia l'unità base di dati che è possibile aggiungere con quel pacchetto. – hpaulj

+1

http://docs.h5py.org/en/latest/high/dataset.html - 'create_dataset' è il meccanismo di base per l'aggiunta di array numpy a un gruppo. – hpaulj

+0

Posso aggiungere una matrice di dati come una matrice m x n, ma come aggiungerla in modo che venga visualizzata come un'immagine; come quelli qui: [link] (http://hdfgroup.org/HDF5/Tutor/h5image.html) usando h5py? – pyguy

risposta

7

Non c'è niente di speciale nelle immagini in HDF5. Il link fornito è per i binding di libreria di alto livello. È altrettanto facile usare lo specifications di immagini in HDF5, che sono solo attributi.

Ecco un molto rapido e sporco esempio:

#!/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() 

Eseguire l'esempio e poi guardare l'immagine in HDFView:

Image within HDF5 file

Nota che avete per aprire i dati dell'immagine con "Apri come" per vederlo come un'immagine, poiché la vista tabella è l'impostazione predefinita.

+0

Esattamente questo. Non ho idea di come mi sia perso prima quando ho cercato tra i documenti. Grazie mille! – pyguy

+0

Come leggere questo file .h5 usando MATLAB? –

+1

@MojoJojo Non utilizzo Matlab, tuttavia esiste una risposta sul [sito Web Matlab Answers] (http://www.mathworks.com/matlabcentral/answers/93316-is-it-possible-to-open-hdf5 -H5-immagini-in-matlab). Spero possa aiutare. –

Problemi correlati