#1 Sat 16 November 2019 10:27
- miracle
- Juste Inscrit !
- Date d'inscription: 8 Nov 2019
- Messages: 4
problème code python pour calculer NDVI
Bonjour,
je suis en train de developper un script Python permettant de calculer le NDVI en utilisant deux images raster (image bande rouge et image bande PIR). le code ne présente pas d'erreurs de compilation, mais, le problème est que le fichier résultat (celui de NDVI ) ne se généré pas.
voici le code:
rastername4="bandd4"
rastername5="bandd5"
chrep=QgsProject.instance().homePath()+"/src/"
rband4=QgsRasterLayer(chrep+"TunB4.tif",rastername4)
rband5=QgsRasterLayer(chrep+"TunB5.tif",rastername5)
ir=QgsRasterCalculatorEntry()
r=QgsRasterCalculatorEntry()
r.raster=rband4
ir.raster=rband5
ir.bandNumber=1
r.bandNumber=1
r.ref=rastername4+"@1"
ir.ref=rastername5+"@1"
references=(ir.ref,r.ref,ir.ref,r.ref)
exp="(%s-%s)/(%s+%s)"%references
output=chrep+"ndvi.tif"
e=rband4.extent()
w=rband4.width()
h=rband4.height()
entrees=[ir,r]
ndvi=QgsRasterCalculator(exp,output,"Gttif",e,w,h,entrees)
ndvi.processCalculation()
lyr = QgsRasterLayer(output, "NDVI")
QgsProject.instance().addMapLayer(lyr)
merci
Hors ligne
#2 Sat 16 November 2019 11:28
- Pascal Boulerie
- Participant assidu
- Lieu: France
- Date d'inscription: 12 Sep 2005
- Messages: 2947
- Site web
Re: problème code python pour calculer NDVI
Une interrogation naïve de ma part :
ne pouvez-vous point utiliser un outil déjà existant (pour ne pas réinventer une roue),
tout en vous consacrer à programmer en Python pour des fonctions pour lesquelles vous ne trouveriez pas d’outil tout fait.
Si j’ai le temps, je regarderai votre code...
Avez-vous la formule NVDI à mettre en œuvre,
et pouvez-vous décrire l’algorithme que vous voulez utiliser sur une image entière ?
« L'État est désormais quasi déliquescent. » (José Cohen-Aknine, ingénieur X-Ponts, IGPEF, dans Déliquescence et renaissance de l'État.)
Hors ligne
#3 Sat 16 November 2019 11:46
- miracle
- Juste Inscrit !
- Date d'inscription: 8 Nov 2019
- Messages: 4
Re: problème code python pour calculer NDVI
Merci pour votre réponse.
En fait, NDVI=(bandePIR-bandeRouge)/(bandePIR+bandeRouge)
en fait, l'algorithme calcule pour chaque pixel la valeur NDVI qui doit être comprise entre -1 et 1 en se basant sur cette formule et génère une image raster.Mon problème c'est comment je peux générer cet image?
Hors ligne
#4 Sat 16 November 2019 22:30
- TLSR
- Participant occasionnel
- Date d'inscription: 1 Feb 2019
- Messages: 17
Re: problème code python pour calculer NDVI
Bonjour, vous pouvez faire la même chose avec ce genre de code (librairies rasterio et numpy) sans avoir à utiliser l'api python QGIS.
Code:
import rasterio as rio import numpy as np with rio.open("img_rouge") as src: img_rouge = src.read() with rio.open("img_pir") as src: img_pir = src.read() profile = src.profile ndvi = (img_pir-img_rouge)/(img_pir+img_rouge) with rio.open('example.tif', 'w', **profile) as dst: dst.write(ndvi.astype(rasterio.uint8), 1)
Normalement ce genre de code fonctionne.
Dernière modification par TLSR (Sat 16 November 2019 22:31)
Hors ligne
#5 Sun 15 March 2020 23:07
- Arbouch Amine
- Participant occasionnel
- Date d'inscription: 3 Jun 2019
- Messages: 11
Re: problème code python pour calculer NDVI
SVP vous utilisez quelle plateforme et outils pour ce travail
Hors ligne