lunes, 6 de marzo de 2017

Usando processing gdalogr:rastercalculator para determinar NDVI con PyQGIS

El empleo de cocientes o índices para identificar masas vegetales tiene su base en que una masa vegetal en óptimas condiciones posee una firma espectral que se caracteriza, en especial, por un claro contraste entre la banda del rojo (0.6 a 0.7 µm) y el infrarrojo cercano (0.7 a 1.1 µm). Esto se debe a que la mayor parte de la radiación solar recibida por la planta en el visible es absorbida por los pigmentos de las hojas y éstos apenas afectan a la radiación recibida en el infrarrojo cercano. En el caso del NDVI (Indice de Vegetación de Diferencias Normalizadas; por sus siglas en inglés), éste se determina dividiendo la diferencia de la banda infrarroja (NIR) menos la roja (RED) entre la suma de ambas (NIR+RED); expresadas en términos de reflectividad.



Con las referidas bandas, el método gdalogr:rastercalculator de processing puede emplearse para tal fin. Los parámetros a ser usados en el comando son los siguientes:


El código desarrollado corresponde a:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import processing

NIR = processing.getObjectFromName('NIR')
RED = processing.getObjectFromName('RED')

NDVI_syntax = '(A-B)/(A+B)'

outputs_GDALOGRRASTERCALCULATOR_1=processing.runalg('gdalogr:rastercalculator', 
                                                    NIR,         #INPUT_A <ParameterRaster>
                                                    '1',         #BAND_A <ParameterString>
                                                    RED,         #INPUT_B <ParameterRaster>
                                                    '1',         #BAND_B <ParameterString>
                                                    None,        #INPUT_C <ParameterRaster>
                                                    '1',         #BAND_C <ParameterString>
                                                    None,        #INPUT_D <ParameterRaster>
                                                    '1',         #BAND_D <ParameterString>
                                                    None,        #INPUT_E <ParameterRaster>
                                                    '1',         #BAND_E <ParameterString>
                                                    None,        #INPUT_F <ParameterRaster>
                                                    '1',         #BAND_F <ParameterString>
                                                    NDVI_syntax, #FORMULA <ParameterString>
                                                    '',          #NO_DATA <ParameterString>
                                                    5,           #RTYPE <ParameterSelection>
                                                    '0',         #EXTRA <ParameterString>
                                                    None)        #OUTPUT <OutputRaster>

NDVI = QgsRasterLayer(outputs_GDALOGRRASTERCALCULATOR_1['OUTPUT'],
                      'NDVI')

QgsMapLayerRegistry.instance().addMapLayer(NDVI)

Después de ejecutarse en la Python Console de QGIS, la banda NDVI se carga automáticamente para visualizarse como:


Los valores de NDVI (entre -1 and 1) se clasificaron según los intervaloe sugeridos en:

https://en.wikipedia.org/wiki/Normalized_Difference_Vegetation_Index

Se usó pseudocolor con tres clases. El área azul corresponde a una represa y fue adecuadamente prevista con base a los valores de NDVI obtenidos.

No hay comentarios: