Des cartes d'occupation des sols obtenues rapidement avec les données SPOT4 (Take5) sur le site Sudmipy

=>

Au CESBIO, nous développons des techniques de production de cartes d'occupation des sols, adaptées aux séries temporelles d'images à haute résolution, comme celles que fourniront bientôt Venµs et Sentinel-2. Quand les données SPOT4 (Take5) ont été disponibles sur notre zone d'étude dans le Sud-Ouest, nous nous sommes dépêchés de mettre à l'épreuve nos chaînes de traitement sur ce jeu d'images. Les premiers résultats ont été évoqués lors de la journée des utilisateurs Take5 qui a eu lieu début octobre 2013.

1. Expérimentation

Dans ce billet, nous décrivons le travail réalisé pour générer ces premières classifications d'occupation du sol avec les données SPOT4-(Take 5) de la zone Sudmipy Est et Ouest, et nous comparons les résultats obtenus sur la zone commune à ces deux zones.

 

En amont de ce travail, nous avons organisé, de manière synchrone aux acquisitions, la collecte de données terrain pour la réalisation et la validation des classifications envisagées. Ces collectes ont été effectuées sur trois zones d'études (figure 1) qui ont été visitées à 6 reprises entre les mois de février et de septembre 2013, au total 2000 parcelles culturales ont été suivies. Ceci a permis de suivre le cycle cultural des cultures d’hiver, des cultures d’été avec une spécification concernant l’irrigation ; les surfaces en herbe, les surfaces de bois et les zones bâties. In fine, la nomenclature comporte 16 classes d'occupation du sol.

 

L’objectif était de connaître la pertinence d’une classification effectuée en utilisant des données terrain limitées tant en terme de quantité que de répartition spatiale. Nous souhaitions aussi vérifier que nous pouvions fusionner les deux traces Est et Ouest de SPOT4 (Take5). Pour ce faire nous avons utilisé 5 images de niveau 2A acquises à un jour d'écart, pour chaque zone, et les données de terrain émanant de la zone commune aux deux emprises (en rose sur la figure ci-contre).

 

OUEST EST
2013-02-16
2013-02-21
2013-03-03
2013-04-17
2013-06-06
2013-02-17
2013-02-22
2013-03-04
2013-04-13
2013-06-07
2. Résultats

Les premiers résultats des classifications supervisées par la méthode SVM (utilisant l'ORFEO Toolbox) apparaissent d'ores et déjà comme très encourageants : ils permettent d'obtenir + de 90% de pixels bien classés, tant pour la partie Ouest que pour la partie Est, et la continuité entre les deux zones est excellente. Quelques confusions existent entre sols nus/surfaces minérales et cultures d'été, qui devraient être largement réduites par l'utilisation d'images LANDSAT 8 acquises en été, période pendant lesquelles les cultures d'été vont se développer.

Assemblage des cartes d'occupation du sol obtenues sur la partie ouest et est du site Sudmipy (en excluant les zones nuageuses des deux zones sur les 5 dates choisies). La comparaison avec la vérité terrain (les points noirs sur la carte au Sud Ouest de Toulouse) donne un kappa de 0.89 à l'Ouest et de 0.92 à l'Est. Cet excellent résultat est un peu surévalué car favorisé par le fait que toutes les vérités terrain sont dans la même zone

 

OUEST EST

Ce zoom compare les résultats obtenus sur la zone commune, à gauche à l'ouest, à droite à l'Est. les deux classifications ont été obtenues indépendamment, à partir de la même méthode et de la même vérité terrain, mais avec des images acquises à des dates différentes sous des angles de prise de vue différents. Les principales confusions concernent le mais et les sols nus, ce qui n'est pas étonnant, car à la date de la dernière image disponible, le mais venait juste d'émerger. On note aussi les habituelles confusions entre orge et blé (mais même sur le terrain, il faut être un spécialiste pour faire la différence)


3. Retour d'expérience

Nous avons été très satisfaits de constater l'opérationnalité des outils. En effet, étant donné le volume de données à traiter (environ 10 GO d'images) on aurait pu craindre des temps de calcul très longs ou tout simplement des limitations de capacité de mémoire des logiciels utilisés (après tout, nous ne sommes que des scientifiques dans un laboratoire ...). Vous ne serez pas surpris d'apprendre que les chaînes de traitement sont basées sur l'Orfeo Toolbox. Plus précisément, le cœur de la chaîne utilise des applications fournies avec l'OTB pour l'apprentissage et la classification d'images. Il suffit de construire une image multi-canal, où chaque composante est un attribut de classification (réflectances, NDVI, etc.) et de fournir aussi une donnée vecteur (fichier shapefile, par exemple) avec les données d'apprentissage (et/ou validation). Ensuite, il suffit d'une ligne de commande pour l'apprentissage (voir la ligne de commande à la fin de l'article) et d'une autre pour la classification (idem).

Les temps de calcul restent très intéressants : quelques minutes pour l'apprentissage et quelques dizaines de minutes pour la classification. Un des gros avantages de la classification avec les applications OTB est de profiter de façon automatique du calcul parallèle quand on utilise une machine multi-processeurs (notre machine préférée a 24 cœurs, mais n'importe quel PC standard actuel en a entre 4 et 12!).

Nous allons continuer à exploiter ces données, car nous avons d'autres jeux de données de référence issues de campagnes terrain mieux réparties sur la zone qui devraient nous permettre de contraindre la carte d'occupation des sols, et nous ajouterons les données LANDSAT 8 acquises en été pour éviter les confusions sur les cultures d'été.

 

4. Exemples de lignes de commandes

Nous commençons par construire une image multi-canal avec chaque acquisition Take5 (cet exemple ne prend pas en compte les masques de nuages).

otbcli_ConcatenateImages -il SPOT4_HRVIR_XS_20130217_N1_TUILE_CSudmipyE.TIF
SPOT4_HRVIR_XS_20130222_N1_TUILE_CSudmipyE.TIF
SPOT4_HRVIR_XS_20130304_N1_TUILE_CSudmipyE.TIF
SPOT4_HRVIR_XS_20130413_N1_TUILE_CSudmipyE.TIF
SPOT4_HRVIR_XS_20130607_N1_TUILE_CSudmipyE.TIF -out
otbConcatImg_Spot4_Take5_5dat2013.tif

Nous calculons ensuite les statistiques des images afin de normaliser les canaux :

otbcli_ComputeImagesStatistics -il otbConcatImg_Spot4_Take5_5dat2013.tif -out
EstimateImageStatistics_Take5_5dat2013.xml

Nous lançons l'apprentissage d'un SVM avec un noyau RBG (gaussien) :

otbcli_TrainSVMImagesClassifier -io.il otbConcatImg_Spot4_Take5_5dat2013.tif
-io.vd DT2013_Take5_CNES_1002_Erod_Perm_Dissolve16cl.shp -sample.vfn "Class"
-io.imstat EstimateImageStatistics_Take5_5dat2013.xml -svm.opt 1 -svm.k rbf-io.out svmModel_Take5Est_5dat2013_train6.svm

Et hop, nous lançons la classification :

otbcli_ImageSVMClassifier -in otbConcatImg_Spot4_Take5_5dat2013.tif -mask
EmpriseTake5_CnesAll.tif -imstat EstimateImageStatistics_Take5_5dat2013.xml
-svm svmModel_Take5Est_5dat2013_train_6.svm -out ClasSVMTake5_5dat_16cl_6.tif

A python module for batch downloads of LANDSAT data.

=>

The Python routine, provided via the link at the end of this post, enables batch downloads of LANDSAT data, on USGS earth explorer site.

 

It works for LANDSAT 8 and LANDSAT 7 (and could work for LANDSAT 5), it just requires that the data are available on line. It is the case for all LANDSAT 8 data, but for LANDSAT 5&7, it may be necessary to order the data first on http://earthexplorer.usgs.gov. The routine of course requires that you have an account and password on earth explorer, and you will have to configure your accounts and directories within the routine.

 

This routine may be used in two ways :

  • You select a LANDSAT scene defined by its WRS-2 coordinates (for instance, (198,030) pour Toulouse). The -d option requires that you provide a day of year for which the scene was observed (1 overpass every 16 days)
    • example :
    • python  download_landsat_scene.py -o scene -t LC8 -a 2013 -d 113 -f 365 -s 199030
  • You provide a list of products to download, with a site name for each product.
    • Example :
      python download_landsat_scene.py -o list -l landsat8_list.txt
    • landsat8_list.txt is as follows : of course, you need to get the references on Earth Explorer.
    • Tunisia LC81910352013160LGN00
      Tunisia LC81910362013160LGN00

 

The routine is available here : Download_landsat_scene.py

 

Once you have downloaded the data, you will probably want to convert them to reflectances or temperatures for the thermal bands. One of our colleagues at CESBIO provides a Python module to do the conversion (The post is in French, but Python is a universal language...).

Pour télécharger vos données LANDSAT sans un clic.

=>

Le bout de code Python dont le lien est fourni ci-dessous, permet de télécharger automatiquement des données LANDSAT, sur la version actuelle du site EarthExplorer.

 

Il fonctionne pour LANDSAT 8 et pour LANDSAT5 et 7, et nécessite que les données soient en ligne. C'est le cas pour toutes les données LANDSAT 8, pour les données LANDSAT5 ou LANDSAT7, il peut être au préalable nécessaire de demander la production sur le site http://earthexplorer.usgs.gov. Pour que le programme fonctionne, il faut bien sûr un compte sur Earth explorer, et il vous faudra configurer vos comptes, mots de passe et répertoires dans le corps du programme.

 

Ce programme peut être lancé de deux manières différentes :

  • En choisissant une scène LANDSAT définie par ses coordonnées WRS-2, par exemple, (198,030) pour Toulouse. Pour l'option -d il faut fournir un jour dans l'année pour lequel il y a un passage au dessus de la scène (1 passage tous les 16 jours)
    • exemple :
    • python  download_landsat_scene.py -t LC8 -a 2013 -d 113 -f 365 -s 199030
  • En fournissant en entrée un fichier avec la liste des produits à télécharger (un produit par ligne)
    • exemple :
      python download_landsat_scene.py -o liste -l list2_landsat8.txt
    • Avec un fichier list2_landsat8.txt comme ci-dessous, il faut aller chercher les références des produits sur earthExplorer.
    • Tunisie LC81910352013160LGN00
      Tunisie LC81910362013160LGN00

 

J'ai déplacé le code sur GitHub, qui est beaucoup plus pratique et fait pour ça.

https://github.com/olivierhagolle/LANDSAT-Download

 

Une fois que vos données auront été téléchargées, vous voudrez probablement les convertir en réflectance (TOA), ou en température pour les bandes thermiques. Un collègue du CESBIO fournit un programme en Python pour faire la conversion.

 

SMAC prend en charge de nouveaux satellites

=>

De nouveaux coefficients ont été ajoutés au site du CESBIO . Les nouveaux satellites pris en compte sont :

  • Landsat 8, RapidEye
  • Quickbird, Worldview2, Ikonos
  • Pléiades1A (PHR1A)
  • DMC-DEIMOS1

 

Le Simplifié Modèle d'Atmosphérique Correction (SMAC) est parfaitement adapté à l'implémentation rapide et approchée de corrections atmosphériques. Il s'agit de fonctions analytiques dérivées du modèle 5S. Les 49 coefficients de ce modèle sont ajustés à partir de simulations de transfert radiatif obtenues avec le modèle 6S (l'ancienne version, pas la récente version vectorielle). SMAC n'est pas un modèle très précis (beaucoup moins que MACCS), et il faut lui fournir des données auxiliaires pour l'épaisseur optique des aérosols ou pour les contenus atmosphériques en ozone et vapeur d'eau. Quand ces données sont précisément connues, la précision des simulations est en général meilleure que deux à trois pour cent, sauf parfois pour les grands angles (au dessus de 70°) ou dans de fortes bandes d'absorption et si on ne prend pas en compte les effets d'environnement et les effets de pente.

 

SMAC a été conçu pour être facile à utiliser :

#lecture des 49 cofficients
nom_smac ='COEFS/coef_FORMOSAT2_B1_CONT.dat'
coefs=coeff(nom_smac)
 
#Lire la réflectance TOA de la bande à traiter
#(celà va dépendre du format de l'image)
 
#Lire les valeurs des angles dans les métadonnées (ici, on les fixe)
theta_s=30
phi_s=180
theta_v=0
phi_v=0
# calculer la pression atmosphérique à l'altitude du pixel
pressure=PdeZ(1300)
 
#trouver les valeurs des variables atmsophériques (ici, on les fixe arbitrairement)
AOT550=0.1
UO3=0.3
UH2O=3
 
#calculer la correction atmosphérique
r_surf=smac_inv(r_toa,theta_s,phi_s,theta_v,phi_v,pressure,AOT,UO3,UH2O,coefs)

Dans la dernière ligne ci-dessus :

  • theta_s, phi_s sont resp. l'angle solaire zenithal et azimuthal
  • theta_v, phi_v sont resp. l'angle de visée zenithal et azimutha
  • AOT est l'épaisseur optique à 550 nm qui peut provenir d'une station Aeronet, ou fixée au jugé, ou égale à 0.1 (si on se contente d'une correction très approchée).
  • UO3 est le contenu en ozone, en cm.atm (0.3 est souvent suffisamment précis)
  • UH2O est le contenu en vapeur d'eau, en kg/m². J'utilise souvent une valeur égale à 3, quand je ne cherche pas une grande précision, dans des bandes ou l'absorption est faible
References

[1] Rahman, H., & Dedieu, G. (1994). SMAC: a simplified method for the atmospheric correction of satellite measurements in the solar spectrum. REMOTE SENSING, 15(1), 123-143.
"[2]"Tanré, D., Deroo, C., Duhaut, P., Herman, M., Morcrette, J. J., Perbos, J., & Deschamps, P. Y. (1990). Technical note Description of a computer code to simulate the satellite signal in the solar spectrum: the 5S code. International Journal of Remote Sensing, 11(4), 659-668.

"[3]"Vermote, E. F., Tanré, D., Deuze, J. L., Herman, M., & Morcette, J. J. (1997). Second simulation of the satellite signal in the solar spectrum, 6S: An overview. Geoscience and Remote Sensing, IEEE Transactions on, 35(3), 675-686.>
"[4]"Kotchenova, S. Y., Vermote, E. F., Matarrese, R., & Klemm Jr, F. J. (2006). Validation of a vector version of the 6S radiative transfer code for atmospheric correction of satellite data. Part I: Path radiance. Applied Optics, 45(26), 6762-6774.
"[5]"Kotchenova, S. Y., & Vermote, E. F. (2007). Validation of a vector version of the 6S radiative transfer code for atmospheric correction of satellite data. Part II. Homogeneous Lambertian and anisotropic surfaces. Applied Optics, 46(20), 4455-4464.

 

New satellites added to SMAC atmospheric correction

=>

New coefficients have been added to the CESBIO repository for SMAC coefficients. The new sensors taken into account are :

  • Landsat 8, RapidEye
  • Quickbird, Worldview2, Ikonos
  • Pléiades1A (PHR1A)
  • DMC-DEIMOS1

 

The Simplified Model for Atmospheric Correction (SMAC) is the perfect model to perform easy, quick and not too dirty atmospheric corrections. It is based on very simple analytic formulas, based on the 5S model. The 49 coefficients of this model are fitted using a large number of radiative transfer simulations with the 6S model (the old historic version, not the recent vector version). This software is not very accurate (much less than MACCS), and it requires in-situ measurements for the aerosol optical thickness, and weather analyses for ozone and water vapour. If these data are available,  in most cases, its accuracy is within 2 and 3 percent, if we do not account for adjacency effects and slope effects, and it may be worse for large viewing and solar angles (above 70°) or within strong absorption bands.

 

SMAC is very easy to use:

#read the 49 coefficients in smac_soefs table
nom_smac ='COEFS/coef_FORMOSAT2_B1_CONT.dat'
coefs=coeff(nom_smac)
 
#read the TOA reflectance image in r_toa variable
#depends on the file format
 
#read the angle values in the image metadata
theta_s=30
phi_s=180
theta_v=0
phi_v=0
# compute pressure at pixel altitude
pressure=PdeZ(1300)
 
#find the values of AOT, UO3, UH2O
AOT550=0.1
UO3=0.3
UH2O=3
 
#compute the atmospheric correction
r_surf=smac_inv(r_toa,theta_s,phi_s,theta_v,phi_v,pressure,AOT,UO3,UH2O,coefs)

where :

  • theta_s, phi_s are the solar zenith and azimuth angles
  • theta_v, phi_v are the viewing zenith and azimuth angles
  • AOT is the aerosol optical thickness at 550 nm which may be obtained from an Aeronet stations, or guessed, or equal to 0.1 for a really dirty atmospheric correction.
  • UO3 is the ozone content in cm.atm (0.3 is OK)
  • UH2O is the water vapour integrated content in kg/m². When I do quick and dirty atmospheric correction, I often use a value equal to 3, but I do not process spectral bands with strong water vapour absorption bands.
References

[1] Rahman, H., & Dedieu, G. (1994). SMAC: a simplified method for the atmospheric correction of satellite measurements in the solar spectrum. REMOTE SENSING, 15(1), 123-143.
"[2]"Tanré, D., Deroo, C., Duhaut, P., Herman, M., Morcrette, J. J., Perbos, J., & Deschamps, P. Y. (1990). Technical note Description of a computer code to simulate the satellite signal in the solar spectrum: the 5S code. International Journal of Remote Sensing, 11(4), 659-668.

"[3]"Vermote, E. F., Tanré, D., Deuze, J. L., Herman, M., & Morcette, J. J. (1997). Second simulation of the satellite signal in the solar spectrum, 6S: An overview. Geoscience and Remote Sensing, IEEE Transactions on, 35(3), 675-686.>
"[4]"Kotchenova, S. Y., Vermote, E. F., Matarrese, R., & Klemm Jr, F. J. (2006). Validation of a vector version of the 6S radiative transfer code for atmospheric correction of satellite data. Part I: Path radiance. Applied Optics, 45(26), 6762-6774.
"[5]"Kotchenova, S. Y., & Vermote, E. F. (2007). Validation of a vector version of the 6S radiative transfer code for atmospheric correction of satellite data. Part II. Homogeneous Lambertian and anisotropic surfaces. Applied Optics, 46(20), 4455-4464.