2015-04-19 26 views
6

Bu bir yeni kullanıcı sorusuysa özür dilerim, ancak Python ve HDF5 için oldukça yeni. H5py, numpy ve Python 2.7 kullanıyorum. Tek bir HDF5 dosyasına aktarılması gereken çeşitli dosyalardan veri var. Her dosyadaki veriler farklı bir grupta depolanacaktır. Bu grupların her birinin 1) mx n matrisi olarak dosyadaki ham verileri ve 2) normalleştirilmiş ham verilerden oluşturulan bir görüntü rasterini içermesi gerekir.h5py kullanarak HDF5 dosyasına tarama görüntüsü ekle

Bölüm 1'i gerçekleştirebiliyorum ve verileri normalleştirebiliyorum ancak bu normalleştirilmiş verileri raster bir görüntüye yazamıyorum çünkü raster bir görüntüyü bir gruba nasıl ekleyeceğimi bilmiyorum. Bunu yapmanın kolay, basit bir yolu olmalı gibi görünüyor, ama belgeleri okudum ve bir tane bulamadım. Bunu h5py'de nasıl yaparsınız ve eğer h5py'yi kullanarak yapılamazsa, bunu başarmak için ne kullanmalıyım?

Teşekkürler!

+0

Raster görüntüsünde bir "numpy" dizisi var mı? Veri bir dizi de mi? 'H5py' belgelerini tekrar okuyun. Numpy 'dizisinin, bu paketle ekleyebileceğiniz temel veri birimi olduğuna inanıyorum. – hpaulj

+1

http://docs.h5py.org/en/latest/high/dataset.html - "create_dataset", bir gruba numpy dizileri eklemek için temel mekanizmadır. – hpaulj

+0

Bir veri dizisini m x n matrisi olarak ekleyebilirim, ancak görüntü olarak görüntülenecek şekilde nasıl ekleyebilirim? Burada olanlar gibi [link] (http://hdfgroup.org/HDF5/Tutor/h5image.html) h5py kullanarak? – pyguy

cevap

7

HDF5'te görüntülerle ilgili özel bir şey yok. Sağladığınız link, üst düzey kitaplık bağlamaları içindir. Sadece öznitelikleri olan HDF5'teki specifications görüntüyü kolayca kullanabilirsiniz.

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

çalıştırın örneği ve ardından HDFView resmin bakmak: Sahip

Image within HDF5 file

Not İşte

bir çok hızlı ve kirli örnek Tablo görüntüsü varsayılan olarak görüntü olarak görebilmek için görüntü verilerini "Farklı Aç" ile açmak.

+0

Tam olarak bu. Dokümanlara bakarken bunu daha önce nasıl özledim bilmiyorum. Çok teşekkür ederim! – pyguy

+0

MATLAB kullanarak bu .h5 dosyasını nasıl okunur? –

+1

@MojoJojo Matlab'ı kullanmıyorum, ancak [Matlab Answers web sitesinde] bir cevap var (http://www.mathworks.com/matlabcentral/answers/93316-is-it-possible-to-open-hdf5 -h5-images-in-matlab). Umarım yardımcı olur. –

İlgili konular