IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Comparaison de matrices et enregistrement en format hdf5


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 25
    Points : 11
    Points
    11
    Par défaut Comparaison de matrices et enregistrement en format hdf5
    Bonjour,

    Je travaille avec des matrices correspondant a des information extraites d'images satellites (i.e. chaque valeur correspond a une valeur satellite au point de coordonnée [lat, lon]). J'ai plusieurs matrices (de même taille) pour le même jour (i.e. plusieurs images satellites enregistrée la même journée à des horaires différents) et je souhaiterai :
    (1) créer 1 seule matrice par jour en concevant la valeur maximale des différentes matrices enregistrées le même jour,
    (2) enregistrer la matrice finale en format hdf.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    folder=('E:\matrices\')
     
     
    compteur = 0
     
     
    %reading of satellite matrices (hdf)
    ousuisje=pwd;
    cd(folder);
    file=dir('*.hdf');
     
    directory=cellstr(char(file.name)) ;
    ndir=length(directory);
     
    for i=1:ndir
        if i==1 % first image processed
            L2map=char(directory(i));
            compteur=compteur+1;
            chlor_a = hdfread(L2map, '/chlor_a', 'Index', {[1  1],[1  1],[1827  1221]});  chlor_a = double(chlor_a); chlor_a = 1*chlor_a+0;
     
     
        else % second and other images processed
     
            L2map1=char(directory(i-1));
            L2map1 = L2map1(2:8)
            L2map=char(directory(i));
            julien = L2map(2:8)
            TF = strcmp(L2map1,julien)
     
            if TF == 1 % if dates are similar
                compteur=compteur+0;
                L2map_ini=char(directory(i));
                chlor_a_new = hdfread(L2map, '/chlor_a', 'Index', {[1  1],[1  1],[1827  1221]});chlor_a_new = double(chlor_a_new); chlor_a_new = 1*chlor_a_new+0;
                chlor_a_final=max(chlor_a,chlor_a_new) ; chlor_a_final = double(chlor_a_final);
     
            else % if dates are different
                compteur=compteur+1;
                % creation hdf5 file of the date d
                chlor_a_final=chlor_a_final;
     
                h5create(L2map1,'.h5', '/dataset1', size(chlor_a_final));
     
                h5write(L2map1,'.h5', '/dataset1', chlor_a_final);
     
     
                % read new data day d+1
                L2map=char(directory(i));
                chlor_a = hdfread(L2map, '/chlor_a', 'Index', {[1  1],[1  1],[1827  1221]}); chlor_a =  double(chlor_a); chlor_a = 1*chlor_a+0;
     
            end
        end
    end
    Je souhaitais lancer un premier test pour voir si le programme fonctionne mais j'obtiens l'erreur suivante:
    Error using h5create (line 62)
    Argument 'Size' failed validation
    @(x)isa(x,'double')&&isrow(x)&&~any(x<0).
    Une idée d’où le problème peut venir?

    Merci beaucoup

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    • Plutôt que de faire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      ousuisje=pwd;
      cd(folder);
      file=dir('*.hdf');
      préférer file=dir( fullfile(folder, '*.hdf') ); qui ne requiert aucun changement de répertoire.
    • directory=cellstr(char(file.name)) ; peut s'écrire : directory = {file.name};.
    • L2map=char(directory(i)); peut s'écrire : L2map = directory{i}; Voir les tableaux de cellules.

    Pour ce qui est de l'erreur, la fonction h5create prend ses paramètres comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h5create(filename,datasetname,size,Name,Value)
    avec en 3ème paramètre : la taille, ce qui n'est pas le cas ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h5create(L2map1,'.h5', '/dataset1', size(chlor_a_final));
    Il faut effectuer une concaténation pour le seul premier paramètre [L2map1 '.h5'].
    (il en est de même pour l'utilisation de la fonction h5write).

    Remarque : vu le début, il se peut qu'il manque l'ajout du chemin du dossier folder (soit fullfile(folder,[L2map1 '.h5'])) ?

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour la reponse rapide et pour les info supplementaires. Le programme a l'air de tourner maintenant.

    Je n'ai jamais sauvegarder mes donnees en format hdf, meme si je travaille regulierement avec (i.e. importe) des donnees HDF-EOS (format classique de distribution d'images satellite).

    En utilisant les fonctions h5create et h5write, j'obtient des fichiers en format xxx.h5. Ce format ne semble pas pourvoir etre lu par la " hdftool" (pratique pour verifier des donnees).
    (1) Existe t'il un equivalent de la function hdftool mais capable de lire des .h5 ?
    (2) existe t'il un avantage a travailler dans ce format plutot que hdf classique?

    Merci !

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/07/2007, 19h27
  2. comparaison 2 matrices
    Par bernard6 dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/03/2007, 17h08
  3. Réponses: 2
    Dernier message: 04/09/2006, 20h53
  4. [D6][Excel] Comment enregistrer en format csv ?
    Par ShinGaruda dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 04/05/2005, 19h59
  5. Comparaison de 2 dates dans des formats différents
    Par frdek dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/02/2005, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo