#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@, Site Web : safege.frwww.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@, Site Web : safege.frwww.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@, Site Web : safege.frwww.safege.fr
Hors ligne