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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#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: 2876
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

 

Pied de page des forums

Powered by FluxBB