Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Wed 01 April 2009 14:33

Géo seb
Participant occasionnel
Lieu: 97436 Saint Leu
Date d'inscription: 16 Jul 2008
Messages: 14

Layer Stack en IDL sous ENVI sur 44 images de 7 bandes

Bonjour,
En stage de fin d'étude SIGMA actuellement à la maison de la télédétection de Montpellier, je rencontre un petit problème pour compiler 44 images temporelles MODIS de 7 bandes en 7 fichiers (1 par bandes) de 44 images (l'année 2005 en 44 images de la même zone prise tous les 8 jours). J'oubliais, c'est en IDL sous ENVI.
j'ai effectué un batch sous IDL pour compiler 44 images temporelles d'une bande en 1 fichier de 44 images temporelles mais je ne sais pas comment passer à la fonction énoncée plus haut. Je vous mets mon batch:

pro envi_stack_layers

; First restore all the base save files.
ENVI, /RESTORE_BASE_SAVE_FILES

ENVI_BATCH_INIT, LOG_FILE = 'batch_log.txt'

; Recherche de tous les fichiers avec l'indice de nuages
; Indiquer le répertoire où chercher
; count : le nombre de fichiers trouvés
files = FINDFILE ('D:\Stage\MODIS\seb\images_masquees\MOD09A1.*_masked.hdf', count=count)

; Définition des paramètres de la fonction stack layer
fid = lonarr(count)
pos = lonarr(count)
dims = lonarr(5,count)
out_bname = strarr(count)

; Boucle sur les fichiers trouvés
  FOR i=0,count-1 DO BEGIN
    ;Open the input file
      envi_open_data_file, files(i), r_fid=layer_fid
      if (layer_fid eq -1) then begin
        envi_batch_exit
        return
      endif

    ; Get some useful information about the input data.
    ENVI_FILE_QUERY, layer_fid, NS = ns, NL = nl, NB = nb, sname=sname

    ; Renseignement des paramètres de la fonction stack layer
    fid[i] = layer_fid
    pos[i] = 0
    dims[0,i] = [-1,0,ns-1,0,nl-1]
    out_bname[i] = STRMID(sname,STRPOS(sname,'2005'),7)

Endfor

; Set the keyword parameters
  out_name = 'D:\Stage\MODIS\seb\2005\MNDWI\MODIS_MNDWI_2005.img'
  out_dt = 5 ; type de sortie = double precision floating-point
  out_proj = envi_get_projection(fid=layer_fid, pixel_size=out_ps)

  ;Layer stack
envi_doit, 'envi_layer_stacking_doit', $
    fid=fid, pos=pos, dims=dims, $
    out_dt=out_dt, out_name=out_name, $
    out_bname = out_bname, $
    interp=0, out_ps=out_ps, $
    out_proj=out_proj, r_fid=r_fid

ENVI_BATCH_EXIT

END

Ça serait vraiment super sympa si quelqu'un pouvait m'aider à sortir "ce tronc" de mon pied!!!!!
Séb


Sébastien TOLLIS, Ingénieur d'étude, SAFEGE, Saint Denis, La Réunion
Tel. 02 62 47 64 60,  Gsm. 06 93 80 71 89, Fax. 02 62 47 64 59
Email : sebastien.tollis@texte-a-enlever.safege.fr,  Site Web :  www.safege.fr

Hors ligne

 

#2 Wed 01 April 2009 16:24

Erwann_ENVI
Juste Inscrit !
Date d'inscription: 15 Oct 2008
Messages: 9

Re: Layer Stack en IDL sous ENVI sur 44 images de 7 bandes

Bonjour Sébastien

J'ai simplement rajouté une boucle sur les 7 bandes de vos fichiers d'entrés.
Dites moi si cela convient.

Cordialement,

Erwann_ENVI


pro envi_stack_layers

; First restore all the base save files.
ENVI, /RESTORE_BASE_SAVE_FILES

ENVI_BATCH_INIT, LOG_FILE = 'batch_log.txt'

; Recherche de tous les fichiers avec l'indice de nuages
; Indiquer le répertoire où chercher
; count : le nombre de fichiers trouvés
files = FINDFILE ('D:\Stage\MODIS\seb\images_masquees\MOD09A1.*_masked.hdf', count=count)

; Définition des paramètres de la fonction stack layer
fid = lonarr(count)
pos = lonarr(count)
dims = lonarr(5,count)
out_bname = strarr(count)

; Boucle sur les fichiers trouvés
FOR i=0,count-1 DO BEGIN
    ;Open the input file
      envi_open_data_file, files(i), r_fid=layer_fid
      if (layer_fid eq -1) then begin
        envi_batch_exit
        return
      endif

    ; Get some useful information about the input data.
    ENVI_FILE_QUERY, layer_fid, NS = ns, NL = nl, NB = nb, sname=sname

    ; Renseignement des paramètres de la fonction stack layer
    fid[i] = layer_fid
    dims[0,i] = [-1,0,ns-1,0,nl-1]
    out_bname[i] = STRMID(sname,STRPOS(sname,'2005'),7)
Endfor

For b=0,nb-1 DO BEGIN
; Set the keyword parameters
     pos[*] = b
     out_name = strcompress('D:\Stage\MODIS\seb\2005\MNDWI\MODIS_MNDWI_2005_'+STRING(b)+'.img',/REMOVE_ALL)
     out_dt = 5 ; type de sortie = double precision floating-point
     out_proj = envi_get_projection(fid=layer_fid, pixel_size=out_ps)

;Layer stack
     envi_doit, 'envi_layer_stacking_doit', $
     fid=fid, pos=pos, dims=dims, $
     out_dt=out_dt, out_name=out_name, $
     out_bname = out_bname, $
     interp=0, out_ps=out_ps, $
     out_proj=out_proj, r_fid=r_fid
ENDFOR

ENVI_BATCH_EXIT

END

Hors ligne

 

#3 Wed 01 April 2009 19:00

Géo seb
Participant occasionnel
Lieu: 97436 Saint Leu
Date d'inscription: 16 Jul 2008
Messages: 14

Re: Layer Stack en IDL sous ENVI sur 44 images de 7 bandes

Tout d'abord merci pour ton aide Erwann,
malheureusement, non cela ne fonctionne pas: il ne me créait qu'un seul fichier de 44 images.
J'avais essayé cette version qui semble fonctionner mais je n'arrive pas à incrémenter 7 noms de fichiers de sortie différents donc il ne me créait qu'un seul fichier.

pro envi_stack_layers

; First restore all the base save files.
ENVI, /RESTORE_BASE_SAVE_FILES

ENVI_BATCH_INIT, LOG_FILE = 'batch_log.txt'

; Recherche de tous les fichiers avec l'indice de nuages
; Indiquer le répertoire où chercher
; count : le nombre de fichiers trouvés
files = FINDFILE ('D:\Stage\MODIS\seb\images_masquees\MOD09A1.*_masked.hdf', count=count)

; Définition des paramètres de la fonction stack layer
fid = lonarr(count)
pos = lonarr(count)
dims = lonarr(5,count)
out_bname = strarr(count)

; Boucle sur les fichiers trouvés
FOR j= 0,6 DO BEGIN
  FOR i=0,count-1 DO BEGIN
    ;Open the input file
      envi_open_data_file, files(i), r_fid=layer_fid
      if (layer_fid eq -1) then begin
        envi_batch_exit
        return
      endif

    ; Get some useful information about the input data.
    ENVI_FILE_QUERY, layer_fid, NS = ns, NL = nl, NB = nb, sname=sname

    ; Renseignement des paramètres de la fonction stack layer
    fid[i] = layer_fid
    pos[i] = j
    dims[0,i] = [-1,0,ns-1,0,nl-1]
    out_bname[i] = STRMID(sname,STRPOS(sname,j,'2005'),7)
   Endfor
    PRINT, J
    out_name = 'D:\Stage\MODIS\seb\compil\'+STRMID(sname,j,STRPOS(sname,'_masked.hdf'))+'_2005.img'

Endfor

; Set the keyword parameters
  out_dt = 5 ; type de sortie = double precision floating-point
  out_proj = envi_get_projection(fid=layer_fid, pixel_size=out_ps)

  ;Layer stack
envi_doit, 'envi_layer_stacking_doit', $
    fid=fid, pos=pos, dims=dims, $
    out_dt=out_dt, out_name=out_name, $
    out_bname = out_bname, $
    interp=0, out_ps=out_ps, $
    out_proj=out_proj, r_fid=r_fid

ENVI_BATCH_EXIT

END


Sébastien TOLLIS, Ingénieur d'étude, SAFEGE, Saint Denis, La Réunion
Tel. 02 62 47 64 60,  Gsm. 06 93 80 71 89, Fax. 02 62 47 64 59
Email : sebastien.tollis@texte-a-enlever.safege.fr,  Site Web :  www.safege.fr

Hors ligne

 

#4 Thu 02 April 2009 14:18

Géo seb
Participant occasionnel
Lieu: 97436 Saint Leu
Date d'inscription: 16 Jul 2008
Messages: 14

Re: Layer Stack en IDL sous ENVI sur 44 images de 7 bandes

Et la solution est....

pro envi_stack_layers

; First restore all the base save files.
ENVI, /RESTORE_BASE_SAVE_FILES

ENVI_BATCH_INIT, LOG_FILE = 'batch_log.txt'

; Recherche de tous les fichiers avec l'indice de nuages
; Indiquer le répertoire où chercher
; count : le nombre de fichiers trouvés
files = FINDFILE ('D:\Stage\MODIS\seb\images_masquees\MOD09A1.*_masked.hdf', count=count)

; Définition des paramètres de la fonction stack layer
fid = lonarr(count)
pos = lonarr(count)
dims = lonarr(5,count)
out_bname = strarr(count)

; Boucle sur les fichiers trouvés
FOR j= 0,6 DO BEGIN
  FOR i=0,count-1 DO BEGIN
    ;Open the input file
      envi_open_data_file, files(i), r_fid=layer_fid
      if (layer_fid eq -1) then begin
        envi_batch_exit
        return
      endif

    ; Get some useful information about the input data.
    ENVI_FILE_QUERY, layer_fid, NS = ns, NL = nl, NB = nb, sname=sname

    ; Renseignement des paramètres de la fonction stack layer
    fid[i] = layer_fid
    pos[i] = j
    dims[0,i] = [-1,0,ns-1,0,nl-1]
    out_bname[i] = STRMID(sname,STRPOS(sname,'2005'),7)
   Endfor
    PRINT, J
    out_name = 'D:\Stage\MODIS\seb\compil\'+STRMID(sname,15,STRPOS(sname,' _masked.hdf'))+'_b'+string(j+1)+'_2005.img'



; Set the keyword parameters
  out_dt = 5 ; type de sortie = double precision floating-point
  out_proj = envi_get_projection(fid=layer_fid, pixel_size=out_ps)

  ;Layer stack
envi_doit, 'envi_layer_stacking_doit', $
    fid=fid, pos=pos, dims=dims, $
    out_dt=out_dt, out_name=out_name, $
    out_bname = out_bname, $
    interp=0, out_ps=out_ps, $
    out_proj=out_proj, r_fid=r_fid

Endfor  ; fin de la boucle sur les bandes

ENVI_BATCH_EXIT

END

Voilà, merci à Erwann d'avoir essayé


Sébastien TOLLIS, Ingénieur d'étude, SAFEGE, Saint Denis, La Réunion
Tel. 02 62 47 64 60,  Gsm. 06 93 80 71 89, Fax. 02 62 47 64 59
Email : sebastien.tollis@texte-a-enlever.safege.fr,  Site Web :  www.safege.fr

Hors ligne

 

Pied de page des forums

Powered by FluxBB