{"id":384,"date":"2017-02-16T09:19:02","date_gmt":"2017-02-16T08:19:02","guid":{"rendered":"http:\/\/elcep.legtux.org\/?p=384"},"modified":"2017-02-20T16:20:22","modified_gmt":"2017-02-20T15:20:22","slug":"traiter-des-images-modis-avec-r-pour-calculer-un-ndvi","status":"publish","type":"post","link":"https:\/\/elcep.legtux.org\/?p=384","title":{"rendered":"Traiter des images MODIS avec R pour calculer un NDVI"},"content":{"rendered":"<p>La Nasa propose depuis 1999 des images MODIS (Moderate-Resolution Imaging Spectroradiometer) \u00e0 diff\u00e9rentes r\u00e9solutions spatiales et temporelles. Elles sont produites par deux satellites en orbite, Terra (1999) et Aqua\u00a0 (2002), qui embarquent des capteurs pour le programme Earth Observing system.<\/p>\n<p>Les instruments permettent d&rsquo;enregistrer 36 bandes spectrales avec une fr\u00e9quence de passage de 1 \u00e0 2 jours. La r\u00e9solution des images diff\u00e8re selon les bandes enregistr\u00e9es et varie entre 0.25 et 1 km. Nous parlions il y a quelques jours du site <a href=\"https:\/\/reverb.echo.nasa.gov\/reverb\/\">reverb|echo<\/a> de la Nasa, il se trouve qu&rsquo;un certain nombre d&rsquo;images sont disponibles sur le site.<\/p>\n<h2>Quelles donn\u00e9es ?<\/h2>\n<p>Mais pour \u00e7a il faut savoir ce qu&rsquo;on cherche, et la nomenclature des produits n&rsquo;est pas vraiment <a href=\"https:\/\/modis.gsfc.nasa.gov\/data\/dataprod\/\">transparente<\/a> [1].\u00a0 \u00c0 titre d&rsquo;exemple :<\/p>\n<ul>\n<li>MOD9Q1 &#8211; Surface Reflectance 8-Day L3 Global 250m<\/li>\n<li>MOD13Q1 &#8211; Vegetation Indices 16-Day L3 Global 250m<\/li>\n<li>MOD11A2 &#8211; Land Surface Temperature\/Emissivity 8-Day L3 Global 1km<\/li>\n<\/ul>\n<p>Une fois qu&rsquo;on en sait un peu plus sur le type de produit que l&rsquo;on veut utiliser, il va falloir le t\u00e9l\u00e9charger et le traiter. Dans <a href=\"http:\/\/elcep.legtux.org\/?p=374\">un post pr\u00e9c\u00e9dent<\/a>, j&rsquo;expliquais comment configurer sa machine pour utiliser wget. Si vous optez pour cette solution, il vous faudra utiliser le MRT pour reprojeter et assembler vos images. L&rsquo;interface est assez intuitive et on peut faire du traitement de masse.<\/p>\n<p>Mais je suis tomb\u00e9 aussi ce matin sur les logs de release d&rsquo;un package R que je me suis empress\u00e9 de tester : <a href=\"https:\/\/github.com\/lbusett\/MODIStsp#running-the-tool\">MODIStsp<\/a>. Si vous avez d\u00e9j\u00e0 regard\u00e9 MRT, MODISStsp n&rsquo;est qu&rsquo;un moyen de rester dans R pour t\u00e9l\u00e9charger les images. On pourra aussi regarder du c\u00f4t\u00e9 du package MODIS qui lui n\u2019int\u00e8gre pas d&rsquo;interface graphique.<\/p>\n<p>Bon mais on parlait de NDVI dans le titre !<\/p>\n<h2>Traiter les images NDVI : MOD13Q1<\/h2>\n<p>En cherchant comment traiter les images MODIS, je suis tomb\u00e9 sur des ressources int\u00e9ressantes. Notamment une page qui vous prend par la main pour traiter les donn\u00e9es MODIS (MOD13Q1) <a href=\"http:\/\/www.un-spider.org\/advisory-support\/recommended-practices\/recommended-practice-drought-monitoring\/step-by-step\/R\">dans R<\/a>[2]. Je vous propose donc de faire un petit point pas \u00e0 pas !<\/p>\n<p>J&rsquo;ai t\u00e9l\u00e9charg\u00e9 et projet\u00e9 les donn\u00e9es gr\u00e2ce au package MODISStsp. J&rsquo;ai donc un dossier qui contient les fichiers hrf, mais aussi un autre qui contient les fichiers tiff produits par le package.<\/p>\n<p>Or quand on ouvre les donn\u00e9es (dans Qgis), les gammes de valeurs<a href=\"https:\/\/grass.osgeo.org\/grass70\/manuals\/i.vi.html\"> ne correspondent pas<\/a> \u00e0 celles attendues pour du NDVI! On devrait avoir des valeurs entre -1 et 1 !<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_390\" aria-describedby=\"caption-attachment-390\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-390 size-full\" src=\"http:\/\/elcep.legtux.org\/wp-content\/uploads\/2017\/02\/grapheMODIS2016_17.png\" width=\"600\" height=\"600\" srcset=\"https:\/\/elcep.legtux.org\/wp-content\/uploads\/2017\/02\/grapheMODIS2016_17.png 600w, https:\/\/elcep.legtux.org\/wp-content\/uploads\/2017\/02\/grapheMODIS2016_17-150x150.png 150w, https:\/\/elcep.legtux.org\/wp-content\/uploads\/2017\/02\/grapheMODIS2016_17-300x300.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><figcaption id=\"caption-attachment-390\" class=\"wp-caption-text\">Freq. pour la tuille 16 &#8211; 17\/01\/2016<\/figcaption><\/figure>\n<p>Il va falloir retravailler le raster pour obtenir les bonnes valeurs . Heureusement \u00ab\u00a0the office of outer space affaire\u00a0\u00bb nous donne <a href=\"http:\/\/www.un-spider.org\/sites\/default\/files\/Skript%20VCI%20final.R\">la marche \u00e0 suivre dans R<\/a>[3]. Je vous propose donc ici un script comment\u00e9 et customis\u00e9 pour l\u2019occasion.<\/p>\n<pre>library(raster) \u00a0\r\nlibrary(sp)\r\nlibrary(doParallel)\r\nlibrary(rgdal)\r\nlibrary(magrittr)\r\n\r\nrm(list = ls()) ##clear env.\r\n\r\n#create stack from tif NDVI files\r\npath.v = \"~\/Documents\/futurSahel\/MOD13Q1_TS\/VI_16Days_250m_v6\/NDVI\/\"\r\nl.files = list.files(path.v, pattern = \".tif\")\r\n\r\n\r\nmy.stack = stack(paste0(path.v,l.files)) ##create raster stack of files in a directory\r\n# load borders\r\nborder = shapefile(\"~\/Documents\/futurSahel\/Senegal_gadm.org\/SEN_adm0.shp\") #ToDo: insert link to the shapefile with the country borders\r\n\r\n\r\n## We use doParallel and magrittr packages to pipe different actions (crop and mask)\r\nregisterDoParallel(6) #we will use 6 parrallel thread\r\nresult = foreach(i = 1:dim(my.stack)[3],.packages='raster',.inorder=T) %dopar% {\r\n\u00a0 my.stack[[i]] %>% \r\n\u00a0\u00a0\u00a0 crop(border) %>%\r\n\u00a0\u00a0\u00a0 mask(border)\r\n}\r\nendCluster()\r\nndvi.stack = stack(result)\r\n\r\nndvi.stack = ndvi.stack*0.0001 #rescaling of MODIS data\r\nndvi.stack[ndvi.stack ==-0.3]=NA #Fill value(-0,3) in NA\r\nndvi.stack[ndvi.stack&lt;(-0.2)]=NA # as valid range is -0.2 -1 , all values smaller than -0,2 are masked out\r\nnames(ndvi.stack) = seq.POSIXt(from = ISOdate(2016,1,17), by = \"16 day\", length.out = 23) # atribut name as date for each layer\r\n\r\nmy_palette = colorRampPalette(c(\"red\", \"yellow\", \"lightgreen\")) #Create a color palette for our values\r\n## Plot X maps in the same layout\r\nspplot(ndvi.stack, layout=c(4, 6),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 col.regions = my_palette(16))<\/pre>\n<p>Ce qui nous donne pour les 23 pas de temps \u00e9tudi\u00e9s l&rsquo;image suivante. On voit bien reverdir la partie sup\u00e9rieure de la carte entre juillet et octobre en 2016.<\/p>\n<figure id=\"attachment_392\" aria-describedby=\"caption-attachment-392\" style=\"width: 604px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-392 size-large\" src=\"http:\/\/elcep.legtux.org\/wp-content\/uploads\/2017\/02\/Rplot01-853x1024.png\" width=\"604\" height=\"725\" srcset=\"https:\/\/elcep.legtux.org\/wp-content\/uploads\/2017\/02\/Rplot01-853x1024.png 853w, https:\/\/elcep.legtux.org\/wp-content\/uploads\/2017\/02\/Rplot01-250x300.png 250w, https:\/\/elcep.legtux.org\/wp-content\/uploads\/2017\/02\/Rplot01-768x922.png 768w, https:\/\/elcep.legtux.org\/wp-content\/uploads\/2017\/02\/Rplot01.png 1000w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><figcaption id=\"caption-attachment-392\" class=\"wp-caption-text\">Indice NDVI \u00e0 partir des donn\u00e9es MODIS MOD13Q1 sur le S\u00e9n\u00e9gal pour 2016<\/figcaption><\/figure>\n<p>Pour avoir un ordre d&rsquo;id\u00e9e, traiter 23 images et produire le graphe, en parall\u00e9lisant une partie, me prend 11 min .<\/p>\n<h2>Des ressources :<\/h2>\n<p>[1]Type d&rsquo;images disponible : <a href=\"https:\/\/modis.gsfc.nasa.gov\/data\/dataprod\/\">https:\/\/modis.gsfc.nasa.gov\/data\/dataprod\/<\/a><\/p>\n<p>[2]<a href=\"http:\/\/www.un-spider.org\/advisory-support\/recommended-practices\/recommended-practice-drought-monitoring\/step-by-step\/R\">http:\/\/www.un-spider.org\/advisory-support\/recommended-practices\/recommended-practice-drought-monitoring\/step-by-step\/R<\/a><\/p>\n<p>[3]<a href=\"http:\/\/www.un-spider.org\/sites\/default\/files\/Skript%20VCI%20final.R\">http:\/\/www.un-spider.org\/sites\/default\/files\/Skript%20VCI%20final.R<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La Nasa propose depuis 1999 des images MODIS (Moderate-Resolution Imaging Spectroradiometer) \u00e0 diff\u00e9rentes r\u00e9solutions spatiales et temporelles. Elles sont produites par deux satellites en orbite, Terra (1999) et Aqua\u00a0 (2002), qui embarquent des capteurs pour le programme Earth Observing system. Les instruments permettent d&rsquo;enregistrer 36 bandes spectrales avec une fr\u00e9quence de passage de 1 \u00e0 &hellip; <a href=\"https:\/\/elcep.legtux.org\/?p=384\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Traiter des images MODIS avec R pour calculer un NDVI<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[66,5,67],"class_list":["post-384","post","type-post","status-publish","format-standard","hentry","category-geomatique","tag-ndvi","tag-r","tag-senegal"],"_links":{"self":[{"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/posts\/384","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=384"}],"version-history":[{"count":14,"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/posts\/384\/revisions"}],"predecessor-version":[{"id":401,"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/posts\/384\/revisions\/401"}],"wp:attachment":[{"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=384"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=384"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/elcep.legtux.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=384"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}