3.4.7. 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 que contiene una lista de rásteres mono banda (ya cargados en QGIS) y Variables de entrada definidas desde el Conjunto de bandas |
|
filtra la lista de variables |
|
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 |
---|---|
si está marcado, el valor |
|
si está marcado el valor será usado como |
|
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 |
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 |
|
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 |
---|---|
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 |
|
define el valor de los píxeles Sin datos` en el ráster de salida |
|
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 |
|
si está marcado, define un escalado en el ráster de salida (y los valores de salida será divididos por la escala). |
|
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). |
|
|
|
alinear el ráster de salida a Nombre de capa or “Por defecto” para alinear automáticamente a los rásteres de entrada. |
|
define el tamaño de píxel |
|
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 conforbandsinbandset
), 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 conforbandsets
); 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 @;