Script para determinar sucesivamente NDVI, SAVI, LAI y εNB en cónsola de GRASS-QGIS (Linux Debian)

Las temperaturas superficiales (Ts) se determinan, según el manual del SEBAL, mediante la siguiente expresión (ecuación de Plank modificada):

donde Rc es la radiancia térmica corregida obtenida a partir de la radiancia térmica de la superficie y K1 y K2 son constantes (expresadas en unidades de W/m2/sr/μm) para la banda térmica (b6) de Landsat. Las unidades de Rc deben ser las mismas que las de K1. Sin embargo, he tenido algunos problemas con la metadata de la banda térmica que he estado usando y no me reproduce valores aceptables de Radiancia a partir de los ND y, en consecuencia, de temperatura. Por esta razón, voy a repetir todo el procedimiento contemplado en:

Determinación del Indice de Area Foliar (IAF) a partir de imágenes de satélite con GRASS en QGIS

Determinación de la emisividad superficial (ε) usando valores de LAI y NDVI con GRASS en QGIS

con otro dataset. Como el procedimiento es relativamente largo y complejo para obtener sucesivamente los valores de NDVI, SAVI, LAI y εNB, voy a automatizarlo mediante un script de bash en Linux Debian. Para ello creo un nuevo dataset e importo (módulo r.in.gdal) las bandas con el mismo nombre empleado en los artículos anteriores. Abro la cónsola de GRASS y con un editor de texto plano (usé gedit) creo el siguiente script:

#!/bin/bash
clear
echo "Calculando NDVI ..."
r.mapcalc "NDVI=(banda4-banda3)/(banda4+banda3+0.)"
echo "Hecho!"
echo "Calculando SAVI con L=0.1 ..."
r.mapcalc "SAVI_0.1=((banda4-banda3)/(banda4+banda3+0.1))*(1+0.1)"
echo "Hecho!"
echo "Calculando LAI..."
r.mapcalc "LAI=if(SAVI_0.1<0.1,0.00001,(if(0.1<SAVI_0.1 && SAVI_0.1<0.687,-log((0.69-SAVI_0.1)/0.59)/0.91,if(SAVI_0.1>0.687,6,0))))"
echo "Hecho!"
echo "Calculando eNBf ..."
r.mapcalc "eNB=if(LAI<3 && NDVI>0.,0.97+0.0033*LAI,if(LAI>=3 && NDVI>0.,0.98))"
r.mapcalc "eNBf=if(eNB==0,0.99,eNB)"
echo "Hecho!" 

Después de grabar con un nombre sugestivo, se le dan permisos de ejecución con chmod +x nombre_script y se ejecuta con ./nombre_script. Los resultados de ejecución del script, obtenidos en poco más de 2 minutos (tiempo obtenido mediante el empleo del comando time ejecutando el script), se observan en la siguiente imagen:

Los ráster de NDVI, SAVI, LAI y εNB producidos mediante este script, empleando a modo de prueba las mismas bandas usadas en los artículos precedentes, son idénticos a aquellos obtenidos de manera individual.

Esta entrada fue publicada en GRASS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

5 respuestas a Script para determinar sucesivamente NDVI, SAVI, LAI y εNB en cónsola de GRASS-QGIS (Linux Debian)

  1. Pingback: Script de python para determinar sucesivamente NDVI, SAVI, LAI y εNB lanzado en cónsola de bash (Linux Debian) |

  2. Gian Carlos dijo:

    Disculpe, el scrip seria diferente para windows

  3. Gian Carlos dijo:

    Ok. Gracias. Solo faltaria Ts que es lo que quiero llegar a realizar.
    Muy interesante su Blog..

    Saludos desde Lima Perú……

    • El problema con Ts es que la determinación de la Rc (radianza corregida) es compleja. No obstante, se puede sustituir por L asumiendo el riesgo de que las Ts pueden ser subestimadas hasta en 5 grados en las zonas más calientes de la imagen.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s