3.1.1 : Description du format de données
Le format de données est très simple : Un tableau à trois dimensions :
- Nombre d'images
- Largeur des images en pixels
- Hauteur des images en pixels
Format de données interne
Les "images" seront décrites par des nombres
floatant simple précision ce qui sera suffisant pour notre exemple.
Ce format de données interne ne sera pas sauvegardé dans des fichiers mais nous permettra de manipuler nos images simplement.
La description de tels images se fait simplement avec la bibliothèque
TensorAlloc.
Ces matrices à deux dimensions peuvent être décrites comme suit :
1
|
PTensor<float> matV(AllocMode::ALIGNED, nbRow, nbCol);
|
Où :
- AllocMode::ALIGNED : demande l'allocation d'un tableau aligné
- nbRow : donne le nombre de ligne du tenseur, donc la hauteur de l'image
- nbCol : donne le nombre de colonnes du tenseur, donc la largeur de l'image
Afin d'empiller toutes ces images ensemble, nous allons utiliser le format
HDF5 (Hierartical Data Format) qui permet
de sauvergarder très simplement n'importe quel type de données.
Il convient néanmoins de rappeler que plus un format de données est plat, plus il sera rapide à lire et à écrire et plus il autorisera des calculs efficaces.
Cette tâche sera d'autant simplifiée par l'utilisation d'un générateur de code qui permet de faire cela très simplement :
- PhoenixHDF5 : générateur de code qui permet de créer à la volée des classes qui gèrent des données en HDF5.
Note : le format HDF5 est vraiment très puissant et simple à utilser. L'utilisation d'un générateur de code ne permet pas de contourner une éventuelle difficulté mais juste de gagner du temps. Vous pouvez très bien créer cette classe vous-même si vous le souhaitez.
La description en
.ph5 est vraiment minimale (appellons ce fichier
MatrixHdf5.ph5) :
1
2
3
4
5
|
///@brief Matrix of the concentation of the U specie
MatrixHdf5[matrix]{
///Matrix of the concentration of the U specie
Tensor(float, nbRow, nbCol) tabMat[image];
}
|
Ce fichier peut être téléchargé
ici.
Ensuite, il faut lancer la commande suivante dans le dossier (
Examples/GrayScottDataFormat) :
phoenix_hdf5 -i MatrixHdf5.ph5
Qui nous donnera les deux fichiers :
- MatrixHdf5.h
- MatrixHdf5.cpp
Ils décrivent la classe
MatrixHdf5 qui nous permettra de lire et d'écrire nos données en
HDF5.