3.4.7. Calculadora de Bandas

_images/band_calc_tab.png

Calculadora de Bandas

La Calculadora de Bandas permite hacer cálculos raster con bandas (i.e. cálculos con los valores de los píxeles) usando funciones de NumPy. Calculadora de Bandas puede trabajar con expresiones con varias líneas de expresiones para realizar multiples cálculos de una sola vez; varias funciones para iteraciones están disponibles para guilabel:Conjuntos de bandas lo que permite realizar cálculos multi-temporales.

Esta herramienta admite “”salida ráster virtual””; si el nombre del archivo de salida termina con “”.vrt””, la salida se crea como ráster virtual compuesto por varios archivos “”.tif”” como el número de subprocesos de CPU definidos en :ref:”system_processing”; para rásteres grandes, esto puede acelerar el proceso.

Las bandas ráster tienen que estar ya cargadas en QGIS. Los rásters de entrada pueden estar en proyecciones diferentes, pero la salida tendrá la proyección del ráster de referencia.

Truco

Información sobre las APIs de esta herramienta de Remotior Sensus en este `enlace<https://remotior-sensus.readthedocs.io/en/latest/remotior_sensus.tools.band_calc.html>`_ .

3.4.7.1. Lista de Bandas

Símbolo de la herramienta y nombre

Descripción

tabla_entrada Lista de bandas

tabla que contiene una lista de rásteres mono banda (ya cargados en QGIS) y Variables de entrada definidas desde el Conjunto de bandas

Filtro texto de entrada

filtra la lista de variables

|recarga|

actualiza la lista de bandas

3.4.7.2. Expresión

Introduzca una expresión matemática para bandas ráster. En particular, las funciones NumPy se pueden utilizar con el prefijo “np.” (por ejemplo, “”np.log10(raster1)””). Para obtener una lista de las funciones de NumPy, consulte “la página de NumPy <https://numpy.org/doc/stable/reference/routines.math.html>`_ .

La expresión puede funcionar con Variable entre ". Haz doble click en cualquier elemento de la Lista de Bandas para añadir el nombre de la misma a la expresión.

Si el color del texto en :guilabel:”Expression” es verde, entonces la sintaxis es correcta; si el color del texto es rojo, la sintaxis es incorrecta y no es posible ejecutar el cálculo.

Es posible introducir varias expresiones separadas por nuevas líneas como el siguiente ejemplo:

"raster1" + "raster2"
"raster3" - "raster4"

El ejemplo anterior calcula dos nuevos rásteres en el directorio de salida con el sufijo “”_1”” (por ejemplo, “”calc_raster_1””) para la primera expresión y “”_2”” (por ejemplo, “”calc_raster_2””) para la segunda expresión. Además, es posible definir el nombre de salida utilizando el símbolo “”@”” seguido del nombre, como el siguiente ejemplo:

"raster1" + "raster2" @calc_1
"raster3" - "raster4" @calc_2

Variables de entrada y Variables de salida pueden ser usadas en la expresión.

Símbolo de la herramienta y nombre

Descripción

casilla de confirmación Valor Sin Datos de entrada opcional

si está marcado, el valor Sin datos de la entrada será reemplazado por el valor definido Sin datos` y será tenido en cuenta en los cálculos

casilla de confirmación Usar el valor como valor Sin Datos número de entrada opcional

si está marcado el valor será usado como Sin datos durante los cálculos

Tipo de datos de los cálculos

selecciona el tipo de datos a usar durante los cálculos como Float32 (default), Int32, Int16, UInt32, UInt16, Byte; por ejemplo, si seleccionas Int32, los valores flotantes de la entrada serán evaluados como enteros

tabla_entrada Funciones

lista con los nombres de las Funciones (haz doble click para copiar una en la expresión) tales como matemáticas, condicionales, lógicas, estadísticas, indices, y personalizadas

abrir archivo

abre un archivo de texto (.txt) que contenga expresiones personalizadas para que sean listadas en Funciones

Se puede cargar un archivo de texto para añadir las expresiones a la lista de Funciones. El archivo debe contener expresiones, cada una escrita en una línea, con el siguiente formato nombre_expresion; expresión (separado por ;) donde nombre_expresion es el nombre que se mostrará en la lista de Funciones. Abrir un archivo de texto vacío quitará las expresión de la lista de Funciones. A continuación se muestra un ejemplo de texto:

NDVI; ( "#NIR#" - "#RED#" ) / ( "#NIR#" + "#RED#" ) @NDVI
EVI; 2.5 * ( "#NIR#" - "#RED#" ) / ( "#NIR#" + 6 * "#RED#" - 7.5 * "#BLUE#" + 1) @EVI
SR; ( "#NIR#" / "#RED#" ) @SR

3.4.7.3. Ráster de salida

El ráster de salida es un archivo .tif, con la misma resolución espacial y proyección que el ráster de entrada; si los ráster de entrada tienen diferente resolución espacial, se usará la mayor resolución (i.e. menor tamaño de pixel) para el ráster de salida.

Truco

si se introducen varias líneas en una expresión o varios nombres de salida son definidos en línea, se mostrará un diálogo de selección de directorio en lugar de uno para archivos

Símbolo de la herramienta y nombre

Descripción

Tipo de dato de salida lista_entrada

selecciona el tipo de dato de salida como Float32 (por defecto), Int32, Int16, UInt32, UInt16, Byte; puede ser diferente del Tipo de datos de los cálculos

Valor sin datos de la salida número de entrada

define el valor de los píxeles Sin datos` en el ráster de salida

Máscara Sin Datos lista_entrada

gestiona los valores Sin Datos a nivel pixel, si es True, entonces el resultado es Sin datos si alguna entrada es Sin Datos.; si es False, entonces el resultado es Sin Datos si todas las entradas son Sin Datos; si es None, entonces los valores Sin Datos no son aplicados a la salida

casilla de confirmación Definir escala número de entrada opcional

si está marcado, define un escalado en el ráster de salida (y los valores de salida será divididos por la escala).

casilla de confirmación Definir compensación número de entrada opcional

si está marcado, define una compensación (offset) en el ráster de salida (y la compensación es restada a los valores de salida).

Extensión lista_entrada UL X UL Y LR X LR Y

define la extensión del ráster de salida entre:
  • “Unión”: la extensión de los rásteres de entrada unidos

  • “Extensión del mapa”: extensión del mapa que se está siendo mostrado actualmente

  • “Intersección”: la extensión de la intersección de los rásteres de entrada (i.e. extensión mínina)

  • “Personalizada”: coordenadas definidas en X SI Y SI X ID Y ID

  • Nombre de la capa: extensión de la capa seleccionada

Alinear lista_entrada

alinear el ráster de salida a Nombre de capa or “Por defecto” para alinear automáticamente a los rásteres de entrada.

Tamaño de píxel texto de entrada

define el tamaño de píxel

EJECUTAR ejecutar

ejecutar esta función; está desactivado si la sintaxis de la expresión no es correcta

3.4.7.4. Variables de entrada

La siguientes variables relacionadas al Conjunto de Bandas están disponibles (nótese que siempre se requiere el carácter ")

  • bandset#b BAND_NUMBER: bandas en el Band set activo pueden ser referenciadas directamente; el siguiente ejemplo se refiere la banda uno del Conjunto de bandas activo:

    "bandset#b1"
    
  • bandset BANDSET_NUMBER b BAND_NUMBER: bandas en el Conjunto de bandas pueden ser referenciadas directamente; el siguiente ejemplo hace referencia a la banda 1 del Conjunto de bandas 1:

    "bandset1b1"
    
  • bandset{ BANDSET_NUMBER_LIST }b BAND_NUMBER: lista con todas las bandas X de todos los Conjuntos de bandas coincidentes con una lista entre corchetes (e.g. {1,2,3}) o rango de Conjunto de bandas separados por dos puntos (e.g. {1:3}) o una lista de rangos de Conjuntos de bandas (e.g. {1:3, 5:8}), que es equivalente a [bandset1bX, bandset2bX, ..., bandsetNbX]; esta variable puede ser usada en expresiones que acepten listas de bandas tales como la suma:

    sum("bandset{1,3}b1")
    
  • bandset#b*: lista de todas las bandas de un Conjunto de bandas activo, que es equivalente a [conjuntobandas#b1, conjuntobandas#b2, ..., conjuntobandas#bX]; y se pueden usar en expresiones que aceptan listas de bandas tales como el valor máximo:

    max("bandset#b*")
    
  • bandset BANDSET_NUMBER b*: lista de todas las bandas de un Conjunto de bandas N, que es equivalente a [bandsetNb1, bandsetNb2, ..., bandsetNbX]; y puede ser usando en expresiones que acepten listas de bandas tales como el valor mínimo:

    min("bandset1b*")
    
  • bandset*b BAND_NUMBER: list of all the bands X of all the Band sets, which is equivalent to [bandset1bX, bandset2bX, ..., bandsetNbX]; to be used in expressions that accept band lists such as the mean value:

    mean("bandset*b1")
    
  • bandset{ DATE }b BAND_NUMBER: lista de todas las bandas de un Conjunto de bandas coincidente con una lista de fechas (format yyyy-mm-dd) entre corchetes (e.g. {2019-01-01,2019-07-31}) o un rango de fechas separados por dos puntos (e.g. {2019-01-01:2019-07-31}) o una lista de rangos de fechas (e.g. {2019-01-01:2019-01-31, 2019-04-01:2019-07-31}), que es equivalente a [conjuntobandas2bX, conjuntobandas5bX, ..., conjuntobandasNbX]; las fechas de un Conjunto de bandas están definidas en Definición del Conjunto de bandas; esta variable puede ser usada en expresiones que aceptan listas de bandas tales como el valor medio:

    median("bandset{2019-01-01,2019-07-31}b1")
    
  • «#BLUE#»: la banda con el centro de longitud de onda cercano a 0.475 \(\mu m\);

  • «#VERDE#»: la banda con el centro de longitud de onda cercano a 0.56 \(\mu m\);

  • «#RED#»: la banda con el centro de longitud de onda cercano a 0.65 \(\mu m\);

  • «#IRC#»: la banda con el centro de longitud de onda cercano a 0.85 \(\mu m\);

    ( "#NIR#" - "#RED#" ) / ( "#NIR#" + "#RED#" )
    

3.4.7.5. Variables de salida

Los nombres de las variables de salida pueden definirse en la línea de la expresión con el símbolo @ seguido del nombre, como en el siguiente ejemplo:

"raster1" * 2 @first_calculation

Si el nombre del resultado está definido en la expresión, habrá que seleccionar el directorio de salida después de hacer click en el botón EJECUTAR.

Advertencia

Se recomienda no usar los caracteres # y @ en el nombre del ráster de salida.

es posible definir la ruta de salida en el nombre del resultado usando la siguiente estructura @path@name en una expresión, tal como:

"raster1" * 2 @/home/user@first_calculation

El directorio será creado si no existe.

es posible crear un resultado temporal (que se guardará en el directorio temporal) con @temp@ seguido por el nombre de salida, tal como:

"raster1" * 2 @temp@first_calculation

El nombre del resultado del cálculo puede ser usado como una variable de entrada para los siguientes cálculos; por ejemplo:

"raster1" * 2 @first_calculation
"first_calculation" + 5 @temp@second_calculation
"second_calculation" - "raster1" @/home/user@third_calculation

es posible añadir el resultado de un cálculo a un conjunto de bandas usando el símbolo % seguido del número del Conjunto de bandas tal como:

"raster1" @first_calculation%1

es posible añadir el resultado de un cálculo a un conjunto de bandas activo usando el símbolo % seguido del símbolo``#`` tal como:

"raster1" @first_calculation%#

También, hay disponibles variables para el nombre de la salida

  • #BANDSET#: el nombre de la primera banda en el:ref:band_set_tab;

  • #DATE#: la fecha y hora actuales(e.g. 20161110_113846527764);

Usando el símbolo @ seguido por la variable #BANDSET# permite guardar el resultado ráster dentro del directorio que contenga la primera banda del conjunto de bandas activas, tal como:

"raster1" @#BANDSET#@first_calculation

Si el nombre de la salida es definido con la extensión .vrt, la salida será un raster virtual que hará referencia a los diferentes archivos .tif calculados usando procesamiento paralelo.

"raster1" @first_calculation.vrt

Los archivos virtuales son útiles para reducir el tiempo de procesamiento en paralelo evitando tener que escribir el ráster de salida completo.

Advertencia

Un archivo``.vrt`` es un archivo de texto que contiene las referencias a a archivos .tif` ya existentes. Si movemos el archivo .vrt a un directorio diferente dejará de funcionar, porque no encontrará los .tif` originales.

3.4.7.6. Funciones

3.4.7.6.1. Condicionales

  • where: expresión condicional con la siguiente sintaxis, where( condición , valor si se cumple, valor si no se cumple) por ejemplo:

    where("raster1" == 1, 2, "raster1")
    

Se requieren paréntesis para usar varias condiciones, por ejemplo para seleccionar valores de píxel entre 1 y 3:

where( ("raster1" > 1) & ("raster1" < 3), 2, "raster1")

Se pueden definir condiciones anidadas de la siguiente manera:

where( ("raster1" > 1) & ("raster1" < 3), 2, "raster1")

3.4.7.6.2. Operadores lógicos

  • AND: AND;

  • OR: OR;

  • XOR: XOR;

  • NOT: NOT;

3.4.7.6.3. Estadísticas

Requiere una lista de bandas entre corchetes or Variables de entrada como argumentos.

  • max: máximo, por ejemplo:

    max(["raster1", "raster2", "raster3"])
    
  • min: mínimo, por ejemplo:

    min(["bandset#b*"])
    
  • media: media; por ejemplo:

    mean("bandset*b1")
    
  • mediana: mediana; por ejemplo:

    median("bandset{2019-01-01,2019-07-31}b1")
    
  • percentil: cálculo de percentiles; la expresión tiene que tener la siguiente estructura percentile([band_list], percentile_value); por ejemplo, la siguiente expresión calcula el percentil 10 de un conjunto de bandas activo:

    percentile("bandset#b*", 10)
    
  • std: desviación estándar; por ejemplo:

    std("bandset{1,3}b1")
    
  • suma: suma; por ejemplo:

    sum("bandset{1:5}b1")
    

3.4.7.6.4. Operaciones

  • sin: seno; por ejemplo:

    sin("raster1")
    
  • cos: coseno;

  • tan: tangente;

  • asin: seno inverso;

  • acos: coseno inverso;

  • atan: tangente inversa;

  • exp: exponencial natural;

  • ln: logaritmo natural;

  • log: logaritmo base 10;

3.4.7.6.5. Índices

  • NDVI: si se selecciona, la fórmula del NDVI es introducida en la Expression:

    ( "#NIR#" - "#RED#" ) / ( "#NIR#" + "#RED#" ) @ NDVI
    
  • EVI: si se selecciona, la fórmula del EVI es introducida en la Expression:

    2.5 * ( "#NIR#" - "#RED#" ) / ( "#NIR#" + 6 * "#RED#" - 7.5 * "#BLUE#" + 1) @ EVI
    
  • NBR: si se selecciona, la fórmula del NBR es introducida en la Expresión:

    ( "#NIR#" - "#SWIR2#" ) / ( "#NIR#" + "#SWIR2#" ) @NBR
    

3.4.7.6.6. Variables

  • nodata: Valor Sin datos del ráster (e.g. nodata("raster1")); puede ser usado como un valor en la expresión:

    where("raster1" == nodata("raster1"), 0, "raster1")
    
  • forbandsets: permite iterar sobre Conjunto de bandas definidios entre corchetes; un rango de Conjuntos de bandas separados por dos puntos (e.g. forbandsets[1:3]) o una lista separada por comas (e.g. forbandsets[1,2,3]; forbandsets debe ser introucida en la primera linea de una expresión (no es compatible con forbandsinbandset), por ejemplo:

    forbandsets[1:3]
    "bandset#b1" @#BANDSET#
    

Durante la iteración, las Variables de entrada relacionadas con el Conjunto de bandas activo son reemplazadas por el iterador, y por tanto la expresión:

forbandsets[1:3]
"bandset#b1" @#BANDSET#

es equivalente a:

"bandset1b1" @calc1
"bandset2b1" @calc2
"bandset3b1" @calc3

es posible introducir una cadena de texto (o una lista de cadenas de texto separa por comas ,) después del corchete ] para filtrar un Conjunto de bandas con el nombre de la primera banda del Conjunto de bandas; por ejemplo, la siguiente expresión iterará sobre los 3 primeros Conjuntos de bandas seleccionando solo aquellos cuyo nombre de la primera banda incluya RT:

forbandsets[1,2,3]RT

También, forbandsets: permite iterar sobre las fechas de los Conjuntos de bandas (formato yyyy-mm-dd, defined in Definición del Conjunto de bandas) between square brackets, such as the following examples:

Iterando sobre un rango de fechas:

forbandsets[2020-01-01:2020-07-31]
"bandset#b1" @#BANDSET#

Iterando sobre una lista de fechas:

forbandsets[2020-02-01,2020-03-11,2020-04-21]
"bandset#b1" @#BANDSET#

Iterando sobre una lista de rangos de fechas:

forbandsets[2010-01-01:2010-06-31, 2010-08-01:2010-08-31, 2010-10-01:2010-12-31]
"bandset#b1" @#BANDSET#

Durante la iteración, las Variables de entrada  relacionadas con el Conjunto de bandas activo son reemplazadas por el iterador.

Es posible introducir una cadena de texto (o una lista de cadenas de texto separa por comas ,) después del corchete ] para filtrar un Conjunto de bandas con el nombre de la primera banda del Conjunto de bandas; por ejemplo, la siguiente expresión iterará sobre los Conjunto de bandas en el rango seleccionando solo aquellos cuyo nombre de la primera banda incluya RT:

forbandsets[2020-01-01:2020-07-31]RT
  • forbandsinbandset: permite iterar sobre bandas en un Conjunto de bandas o un rango de Conjunto de bandas entre corchetes; forbandsinbandset debe ser usando en la primera línea de una expresión (no es compatible con forbandsets); la variable #BANDA# tiene que ser utilizada para referir a la banda que va a ser iterada como en los siguientes ejemplos:

Iterando sobre las bandas en el primer Conjunto de bandas (nótese el carácter " en la expresión):

forbandsinbandset[1]
where("#BAND#" > 1, 1, 2) @#BAND#)

Iterando sobre todas las bandas en los Conjuntos de bandas del 1 al 3:

forbandsinbandset[1:3]
where("#BAND#" > 1, 1, 2) @#BAND#)
  • #BANDA#:

  • #BANDSET#: el nombre de la primera banda en el:ref:band_set_tab;

  • #DATE#: la fecha y hora actuales(e.g. 20161110_113846527764);

  • @: carácter @;