💡 OBJETIVOS:

💡 MATERIALES PARA LA ACTIVIDAD:

Los materiales para el desarrollo de esta actividad son los siguientes.

Imágenes satélite. Es la misma imagen multibanda utilizada en la actividad previa.

script_laboratorio_6_tasseled_cap

INTRODUCCIÓN: LA TRANSFORMACIÓN “TASSELED CAP”.

Este procedimiento fue pensado inicialmente como un procedimiento de simplificación de la información contenida en las bandas de las imágenes de satélite con el propósito de maximiniza la información contenida en esas imágenes (Kauth y Thomas, 1976) para resaltar fenómenos importantes en el desarrollo de cultivos. En definitiva, es un procedimiento que transforma las 6 bandas habitualmente utilizadas a partir de la plataforma Landsat (transformación en la que se obtienen otros datos independientes entre sí), obteniendo los siguientes neocanales de información:

Esta simplificación de los componentes espectrales originales permite tratarlas como variables físicas, y es útil para detectar y comparar variaciones en la vegetación, el suelo y las superficies artificiales (por ejemplo, urbanas) en diferentes períodos de tiempo.

Se conoce como la transformación Tasseled Cap debido a la forma de la siguiente distribución gráfica; la región triangular muestra la vegetación en varias etapas de crecimiento. Por lo tanto, esta transformación es muy útil para el monitoreo y cartografía de la vegetación.

Relación entre la banda del rojo y el infrarrojo próximo
Relación entre la banda del rojo y el infrarrojo próximo

Una de las mayores limitaciones de la transformación Tasseled-cap es que solo se puede aplicar a sensores para los que ya se han desarrollado coeficientes de transformación. Actualmente, esto incluye Landsat, MODIS, ASTER, Ikonos, SPOT y, además, Sentinel 2.

Satélite Bandas
Landsat4TM 1,2,3,4,5,7
Landsat5TM 1,2,3,4,5,7
Landsat7ETM 1,2,3,4,5,7
Landsat8OLI 2,3,4,5,6,7
MODIS 1,2,3,4,5,6,7
QuickBird 2,3,4,5
Spot5 2,3,4,5
RapidEye 1,2,3,4,5

DESARROLLO DE LA ACTIVIDAD

Activación de los paquetes

Los paquetes necesarios para realizar este ejercicio son los siguientes

library(terra)                             # Importación y transformación de imágenes ráster
## Warning: package 'terra' was built under R version 4.3.3
## terra 1.8.21
library(ggplot2)                           # Visualización de datos ráster con RStoolbox
## Warning: package 'ggplot2' was built under R version 4.3.3
library(RStoolbox)                        # Transformación y visualización de datos ráster.
## Warning: package 'RStoolbox' was built under R version 4.3.3
## This is version 1.0.0 of RStoolbox

Importación de los ficheros

También se trabajará con el objeto imagen que ha sido preparado en la introducción a este apartado. Si no se dispusiera de él deberá importarse otra vez.

setwd("D:/G174_2025/LABORATORIO_6_Transformaciones_matematicas/datos")                         # Carpeta de trabajo
imagen <- rast("D:/G174_2025/LABORATORIO_6_Transformaciones_matematicas/datos/imagen.tif")     # Importación del fichero.
imagen
## class       : SpatRaster 
## dimensions  : 1245, 1497, 7  (nrow, ncol, nlyr)
## resolution  : 30, 30  (x, y)
## extent      : 594090, 639000, 4190190, 4227540  (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 10N (EPSG:32610) 
## source      : imagen.tif 
## names       : coast~rosol,      blue,      green,        red,          NIR,        SWIR1, ... 
## min values  :  0.09641791, 0.0748399, 0.04259216, 0.02084067, 0.0008457669, -0.007872183, ... 
## max values  :  0.73462820, 0.7177562, 0.69246972, 0.78617686, 1.0124315023,  1.043204546, ...

Para facilitar el trabajo con las 7 bandas, se recomienda el cambio de los nombres de las bandas individuales en la imagen multibanda importada por los correspondientes a sus respectivas longitudes de onda (Landsat 8 OLI ).

names(imagen) <- c("coastal aerosol", "blue", "green", "red", "NIR", "SWIR1", "SWIR2")

En R la transformación Tasselled Cap se puede realizar mediante función RStoolbox::tasseledCap(). La sintaxsis debe incluir:

  • Las bandas a utilizar en la transformación.

  • El nombre del sensor mediante el argumento sat.

Las unidades del ráster de entrada son reflectancia.

Cálculo de los índices “brillo”, “verdor” y “humedad”

En el siguiente ejemplo de código, efectuaremos una transformación Tasseled cap a una imagen raster.

imagen_tc <- tasseledCap(imagen[[2:7]], 
                          sat ="Landsat8OLI" )
imagen_tc
## class       : SpatRaster 
## dimensions  : 1245, 1497, 3  (nrow, ncol, nlyr)
## resolution  : 30, 30  (x, y)
## extent      : 594090, 639000, 4190190, 4227540  (xmin, xmax, ymin, ymax)
## coord. ref. : WGS 84 / UTM zone 10N (EPSG:32610) 
## source(s)   : memory
## names       : brightness,  greenness,    wetness 
## min values  : 0.04875321, -0.2373504, -0.8097868 
## max values  : 1.98364606,  0.4419796,  0.2490443

Cuando se aplica una transformación “tasseled cap”, los rangos de valores (normalizados) no son ni fijos ni universales, pero los rangos típicos para Landsat (usando reflectancia de superficie) suelen ser los siguientes:

Componente Rango aproximado
Brightness (Brillo) entre 0 y 3-4
Greenness (Verdor) entre -2 y 2
Wetness (Humedad) entre -2 y 2

La función ha calculado los tres componentes en forma de capas raster. A su vez, estas imágenes pueden ser dibujadas para observar las variaciones de los valores de brillo, verdor y humedad correspondientes al suelo, la vegetación y la humedad.

Brillo

ggR(imagen_tc$brightness, geom_raster = TRUE) + 
  ggtitle("Brightness Tasseled cap") +                  # Título de la imagen 
  labs(x="Longitud(m)", y="Latitud (m)") +              # Etiquetas del eje
  theme(plot.title = element_text(hjust =0.5,           # Título centrado
                                  size =20),            # Tamaño del título
        axis.title = element_text(size =10),            # Tamaño de las etiquetas de los ejes
        legend.key.size =unit(1,"cm"),                  # Tamaño de la leyenda
        legend.title = element_text(size = 20),         # Tamaño del titulo de la leyenda
        legend.text = element_text (size = 15)) +       # Tamaño de la letra del texto de la leyenda
# Dibuja un gradiente de colores 
scale_fill_gradientn(name = "Valores", colours = c("white", "green", "brown"), 
                     limits = c(0, 1),                  # Límites de los valores
                     oob = scales::squish) +            # Los valores fuera del rango se "aplasten" en los extremos +
  theme_bw()

El parámetro brillo refleja la cantidad total de energía reflejada por la superficie terrestre en todas las bandas visibles e infrarrojas cercanas. Es básicamente una medida del albedo del suelo. A través de este parámetro se puede deducir:

  • El tipo de cobertura del suelo:

  • valores altos corresponden a superficies claras y reflectantes como suelos desnudos (arenosos, secos), áreas urbanas (cemento, techos) o zonas mineras.

  • Valores bajos corresponden a superficies oscuras como áreas densamente vegetadas, supeficies con agua o bajo sombras.

  • El estado del suelo o la vegetación, ya que un aumento del Brightness puede indicar deforestación, degradación de los suelos o sequías (la vegetación pierde humedad y reflejan más).

  • Se puede efectuar un seguimiento de cambios temporales, monitorizando cambios en el uso del suelo por expansión urbana o pérdida de vegetación.

Si, por ejemplo se realiza un seguimiento de una parcela agrícola durante varios meses, un aumento de Brightness podría interpretarse como un la exposición del suelo desnudo tras la recogida de la cosecha, o una disminución de la cobertura vegetal por estrés hídrico.

Verdor

ggR(imagen_tc$greenness, geom_raster = TRUE) + 
  ggtitle("Greenness Tasseled cap") +                  # Título de la imagen 
  labs(x="Longitud(m)", y="Latitud (m)") +              # Etiquetas del eje
  theme(plot.title = element_text(hjust =0.5,           # Título centrado
                                  size =20),            # Tamaño del título
        axis.title = element_text(size =10),            # Tamaño de las etiquetas de los ejes
        legend.key.size =unit(1,"cm"),                  # Tamaño de la leyenda
        legend.title = element_text(size = 20),         # Tamaño del título de la leyenda
        legend.text = element_text (size = 15)) +       # Tamaño del texto de la leyenda
# Dibuja un gradiente de colores 
scale_fill_gradientn(name = "valores", colours = c("white", "darkgreen"), 
                     limits = c(0, 1),                  # Límites de los valores
                     oob = scales::squish) +            # Los valores fuera del rango se "aplasten" en los extremos)  
  theme_bw()

El componente verdor está relacionado con la cantidad, densidad y vigor de la vegetación verde, pues proporciona más peso a las bandas sensibles a la actividad fotosintética (como el rojo e infrarrojo cercano). Cuanto mayor es el valor de Greenness, más vegetación activa hay. De la observación de este parámetro se puede deducir:

  • La existencia y densidad de la vegetación: valores altos de Greenness indican zonas con cobertura vegetal densa y/o vegetación saludable y activa (con una alta alta fotosíntesis); valores bajos indican suelo desnudo, áreas urbanas, cuerpos de agua o vegetación seca o escasa.

  • El estado de salud de la vegetación, pues ayuda a distinguir entre vegetación sana y estresada, complementando a índices como el NDVI, pero con más contexto espectral.

  • El seguimiento de cambios estacionales o temporales, como ciclos de cultivo (crecimiento, cosecha), efectos de sequías, fenología vegetal o la regeneración de áreas deforestadas o quemadas

  • La clasificación del uso del suelo, identificando tipos de cobertura como bosques, áreas agrícolas o pastizales.

En el caso anterior, dos imágenes con Greenes pertenecietes a dos fechas distintas

  • En abril: valores altos de Greenness indican cobertura vegetal activa, probablemente cultivo en crecimiento.

  • En julio: disminuyen los valores, por que ya se haya cosechado o que haya estrés hídrico.

El uso de este parámetro tiene algunas utilidades adicionales, por ejemplo reduciendo el “ruido” de otras superficies no vegetadas.

En comparación con otros índices de vegetación:

  • NDVI puede dar valores cercanos a 0.8–0.9, pero se satura y no diferencia bien entre vegetación moderada y muy densa.

  • EVI mantiene mejor separación en zonas de vegetación densa, con más precisión en zonas húmedas y sombreadas.

  • Greenness puede reflejar más detalle de cambios estructurales en la vegetación (más allá de su “verdor”), ya que incorpora bandas SWIR, que son sensibles a humedad y estructura de la planta.

En conclusión

  • NDVI: Bueno, simple y ampliamente usado, pero limitado en vegetación densa.

  • EVI: Mejor en zonas con alta biomasa o condiciones atmosféricas complejas.

  • Greenness: Muy útil si ya aplicaste Tasseled Cap y quieres una visión rica del paisaje vegetado, integrando más información espectral.

Humedad

ggR(imagen_tc$wetness, geom_raster = TRUE) + 
  ggtitle("Wetness") +                                                          # Título de la imagen 
  labs(x="Longitud(m)", y="Latitud (m)") +                                      # Etiquetas del eje
  theme(plot.title = element_text(hjust =0.5,                                   # Título centrado
                                  size =20),                                    # Tamaño del título
        axis.title = element_text(size =10),                                    # Tamaño de las etiquetas de los ejes
        legend.key.size =unit(1,"cm"),                                          # Tamaño de la leyenda
        legend.title = element_text(size = 20),                                 # Tamaño del título de la leyenda
        legend.text = element_text (size = 15)) +                               # Tamaño del texto de la leyenda
# Dibuja un gradiente de colores 
scale_fill_gradientn(name = "valores", colours = c("skyblue", "darkblue"), 
                     limits = c(0, 1),                                          # Límites de los valores
                     oob = scales::squish) +                                    # Los valores fuera del rango se "aplasten" en los extremos
  theme_bw()

El componente humedad está relacionado con la humedad en la vegetación y en el suelo. Se calcula como una combinación lineal de bandas multiespectrales, donde se le da especial peso a las bandas del infrarrojo cercano (NIR) y del infrarrojo de onda corta (SWIR), que son sensibles al contenido de agua. Indica cuánta agua hay presente en la superficie terrestre, ya sea en forma de:

  • Humedad del suelo

  • Contenido de agua en la vegetación

  • Presencia de cuerpos de agua poco profundos o humedad superficial

Valores de humedad:

  • Altos (positivo): alta humedad del suelo, vegetación húmeda, zonas encharcadas o cuerpos de agua

  • Bajos (negativo): suelo seco, vegetación seca o escasa, zonas urbanas o áridas

Aplicaciones del parámetro humedad

  • Monitoreo de sequías

  • Detecta zonas con pérdida de humedad en cultivos, pastizales o ecosistemas naturales.

  • Evaluación de incendios: una imagen pre identifica zonas secas y susceptibles; una imagen pos zonas quemadas muestran valores muy bajos de humedad.

  • Análisis agrícola: ayuda a evaluar el estado hídrico de los cultivos y planificar riego.

  • Estudios hidrológicos: localiza zonas inundadas, humedales, suelos saturados.

  • Cartografía de humedales: ayuda distinguir zonas naturalmente húmedas de otras coberturas.

  • Evaluación post-lluvia: útil para ver cómo responde el suelo tras eventos de lluvia o deshielos.

Comparación con otros índices de humedad

  • NDWI (Normalized Difference Water Index): NDWI se centra en cuerpos de agua, mientras que Wetness capta humedad general (agua en plantas, suelo, etc.)

  • MSI (Moisture Stress Index): MSI requiere solo dos bandas, pero Wetness aprovecha más información espectral

  • MNDWI (Modified NDWI): bueno para agua superficial, pero Wetness es más completo en vegetación y suelos

Si analizas una región agrícola:

  • Una zona con valores altos de Greenness pero bajos de Wetness podría indicar vegetación verde pero estresada por falta de agua.

  • Un área con alto Wetness y bajo Greenness podría ser un suelo húmedo sin vegetación, como un campo recién regado o inundado.

A continuación se grabarán las tres capas en un fichero multibanda

INTERPRETACIÓN DE LOS NEOCANALAES O ÍNDICES: COMPARACIÓN CON LOS USOS DE SUELO

Para interpretar es significado de los valores obtenidos en los índices, se puede recurrir a compararlos con una clasificación de usos de suelo disponible. El procedimiento es relativamente simple, ya que consiste en crear un ráster que combine las capas de los índices con la capa de usos de suelo, convertir este nuevo ráster en un data frame y, a partir de este último, aplicar diferentes procedimientos de análisis estadístico, tanto cuantitativos como numéricos.

Preparación del fichero con usos de suelo

Primero, se cargaría el fichero ráster con los usos de suelo.

usos_orig <- rast("D:/G174_2025/LABORATORIO_6_Transformaciones_matematicas/datos/usos_para_tc.tif")

A continuación, se podría comprobar su contenido, y representarlo gráficamente.

usos_orig
## class       : SpatRaster 
## dimensions  : 1230, 1877, 1  (nrow, ncol, nlyr)
## resolution  : 0.0002694946, 0.0002694946  (x, y)
## extent      : -121.9258, -121.42, 37.85402, 38.1855  (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326) 
## source      : usos_para_tc.tif 
## name        : landcover_1 
## min value   :          11 
## max value   :          95
plot(usos_orig, 
     type="classes", 
     main="Mapa de usos de suelo")

Las categorías de usos de suelo que contiene el fichero ráster son las siguientes

unique(values(usos_orig))                                               # Clases de uso/cobertura presentes
##       landcover_1
##  [1,]          95
##  [2,]          82
##  [3,]          71
##  [4,]          11
##  [5,]          21
##  [6,]          90
##  [7,]          81
##  [8,]          23
##  [9,]          22
## [10,]          24
## [11,]          31
## [12,]          41
## [13,]          52
## [14,]          42
## [15,]          43

Antes de proceder a la asignación de categorías a esos valores numéricos (que son en realidad usos de suelo codificados -pe. 11 = Agua, 21 = Área urbana baja densidad, 41 = Bosque de hoja caduca…), conviene comprobar que el Sistema de Coordenadas de Referencia de este objeto ráster, así como su resolución y extensión, son idénticas al del objeto ráster con los valores de los 3 neocanales calculados anteriormente, pues provienen de diferentes fuentes de información. Esto debe realizarse ahora, y no posteriormente, cuando hayamos asignado a esos valores numéricos sus etiquetas en forma de caracteres. Para comprobar si comparten las mismas características se utiliza la función terra::compareGeom():

compareGeom(usos_orig, imagen_tc)

Para conocer en qué difieren se recurre a la función terra:crs()

crs(usos_orig, describe = TRUE)
##     name authority code  area             extent
## 1 WGS 84      EPSG 4326 World -180, 180, -90, 90
crs(imagen_tc, describe = TRUE)
##                    name authority  code
## 1 WGS 84 / UTM zone 10N      EPSG 32610
##                                                                                                                                                                                                          area
## 1 Between 126°W and 120°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - British Columbia (BC); Northwest Territories (NWT); Nunavut; Yukon. United States (USA) - Alaska (AK)
##              extent
## 1 -126, -120, 0, 84

Como ambos objetos no son idénticos, se procede a un remuestreo con la función `terra::project().

usos_reproyectado <- project(usos_orig, 
                     imagen_tc, 
                     method="near")                              # Método de remuestreo para categorías

Ahora se podría preguntar al programa si la extensión espacial de ambos ficheros ráster es la misma.

ext(usos_reproyectado) == ext(imagen_tc)
## [1] TRUE

Estando ante el fichero de usos definitivo que, como se ha señalado contiene valores numéricos (que son en realidad usos de suelo codificados -pe. 11 = Agua, 21 = Área urbana baja densidad, 41 = Bosque de hoja caduca…), éstos deben ser convertidos en categorías. Por otro lado, existe una gran diversidad de usos de suelo, que convendría simplificar. Por ello, en primer lugar se recodificarán algunas categorías, agrupándolas en otras clases más simples

matriz_reclas <- matrix(c(11, 1,   # Agua
                          21, 2,   # Artificial
                          22, 2,
                          23, 2,
                          24, 2,
                          31, 3,   # Suelo desnudo
                          41, 4,   # Bosque
                          42, 4,
                          43, 4,
                          52, 5,   # Matorral
                          71, 6,   # Pastizal
                          81, 7,   # Cultivos
                          82, 7,
                          90, 8,   # Humedales
                          95, 8), 
                        ncol=2, byrow=TRUE)

usos_reclasificado <- classify(usos_reproyectado, matriz_reclas)

# Ver resultado
plot(usos_reclasificado, col=rainbow(7), 
     main="Usos de suelo reclasificados")

A continuación, se identificarán los valores numéricos reclasificados con sus respectivas etiquetas

usos_categorias <- c("Agua", "Artificial", "Suelo desnudo", "Bosque", "Matorral", "Pastizal", "Cultivos", "Humedales")
categorias_df <- data.frame(value = c(1,2,3,4,5,6,7,8), 
                            uso = usos_categorias)
levels(usos_reclasificado) <- categorias_df

Finalmente, se volverá a representar el ráster, pero ahora ya reclasificado.

colores <- c("#5475A8", "#B50000", "#D2CDC0", "#38814E", "#AF963C", "#D1D182", "#FBF65D", "#C8E6F8")        # Colores en forma de código hexidecimal
plot(usos_reclasificado, col = colores)

Este fichero reclasificado será renombrado como usos_definitivo para su posterior utilización. También debería ser grabado en el disco duro

usos_definitivo <- usos_reclasificado
writeRaster(usos_definitivo, "D:/G174_2025/LABORATORIO_6_Transformaciones_matematicas/datos/usos_definitivo.tif", overwrite = TRUE)

Por último, se eliminarán todos los objetos creados anteriormente, que no tienen uso a continuación.

rm(categorias_df, colores, matriz_reclas, usos_categorias, usos_orig, usos_reclas, usos_reclasificado, usos_reproyectado) 
## Warning in rm(categorias_df, colores, matriz_reclas, usos_categorias,
## usos_orig, : objeto 'usos_reclas' no encontrado

Análisis básico de los usos de suelo

Una vez se dispone de un fichero reclasificado con las mismas dimensiones, sistema de referencia etc, se puede elaborar la frecuencia de píxeles por clase y convertir en una tabla con la superficie ocupada por cada uso

frecuencia <- freq(usos_definitivo)

area_ha <- as.data.frame(frecuencia)
area_ha$area_ha <- area_ha$count * res(usos_definitivo)[1] * res(usos_definitivo)[2] / 10000

area_ha
##   layer         value  count  area_ha
## 1     1          Agua 192706 17343.54
## 2     1    Artificial 227770 20499.30
## 3     1 Suelo desnudo   4049   364.41
## 4     1        Bosque  66500  5985.00
## 5     1      Matorral  17314  1558.26
## 6     1      Pastizal 328766 29588.94
## 7     1      Cultivos 869352 78241.68
## 8     1     Humedales 108453  9760.77

Conversión en un único ráster

Para la obtención de algunos valores estadísticos y gráficos apropiados, se procede a crear un único objeto ráster combinando el ráster con los neocanalaes y el ráster con los usos de suelo:

raster_combinado <- c(imagen_tc, usos_definitivo)

Además, conviene asignar nombres fácilmente recordables a las capas de este nuevo ráster…

names(raster_combinado) <- c("brillo", "verdor", "humedad","usos_suelo")

…que será convertido en un dataframe eliminando posibles NA

df <- as.data.frame(raster_combinado, 
                    xy=FALSE, 
                    na.rm=TRUE)
df$usos_suelo <- factor(df$usos_suelo)

Extracción de estadísticos y representación gráfica

Por ejemplo, el cálculo del valor promedio de cada neocanal según usos de suelo:

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.2
## Warning: package 'tidyr' was built under R version 4.3.2
## Warning: package 'readr' was built under R version 4.3.2
## Warning: package 'purrr' was built under R version 4.3.2
## Warning: package 'dplyr' was built under R version 4.3.2
## Warning: package 'stringr' was built under R version 4.3.2
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.4     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ tidyr::extract() masks terra::extract()
## ✖ dplyr::filter()  masks stats::filter()
## ✖ dplyr::lag()     masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
resultados_verdor <- df %>%  
  group_by(usos_suelo) %>% 
  summarise(promedio_verdor = mean(verdor), 
            desv_típica_verdor = sd(verdor))

También es posible elaborar un gráfico boxplot con este parámetro según usos de suelo

boxplot(verdor ~ usos_suelo, 
        data = df,
        ylimi = c(-0.4, 0.4),
        names = c("Ag", "Art", "Slo", "Bosq", "Matr", "Past", "Clv", "Hum"),    # Categorías
        outline = FALSE)                                                        # No dibuja outliers

📝 ACTIVIDAD DE EVALUACIÓN 1 TASSELLED CUP:

Esta actividad utiliza dos ficheros ráster, una escena multibanda conteniendo valores de reflectancia superficial obtenidas de Landsat 8 y correspondiente a parte de la ciudad de Los Ángeles, en EEUU (LC08_040036_20170415.tif), y un fichero con usos de suelo procedente de la base de datos National Land Cover Database [https://www.usgs.gov/centers/eros/science/national-land-cover-database], correspondiente a la misma zona.

Las bandas del fichero LC08_040036_20170415.tif son las siguientes:

Banda Denominación
Banda 1 Coastal aerosol -Blue Edge-
Banda 2 Blue
Banda 3 Green
Banda 4 Red
Banda 5 NIR
Banda 6 SWIR 1
Banda 7 SWIR 2

► Convierte los ficheros individuales en objetos SpatRaster y comprueba los nombres de las bandas.

Para asegurar unos resultados satisfactorios, aplica la fórmula SR = (DN * 0.0000275) - 0.2 para convertir los números digitales (DN) que proporciona la imagen en bruto en valores de reflectancia.

► Realiza una transformación Tasseled Cap de la imagen Landsat 8 OLI posterior al incendio con RStoolbox().

► Cambia los nombres de los neocanales de tal manera que ahora se llamen brillo, verdor y humedad.

► Representa gráficamente los valores de humedad mediante un histograma

► Representa en un mapa los valores de Humedad ajustando los límites de acuerdo con el histograma anterior.

► Representa gráficamente los valores de brillo mediante un histograma

► Representa en un mapa los valores de brillo ajustando los límites de acuerdo con el histograma anterior.

► Crea un mapa que muestre los resultados de la transformación Tasseled Cap como una image RGB (r = brillo, g = verdor, b = humedad).

► Importa el fichero con los usos de suelo nlcd.tif y responde a las siguientes preguntas:

  • Elabora un gráfico boxplot con los valores de “humedad” según usos de suelo

  • ¿Cuál es el uso del suelo con un valor medio de “brillo” más elevado? ¿Y cuál posee una mayor dispersión de este mismo parámetro?

  • ¿Cuáles son los valores medios y la dispersión de los 3 neocanales en el caso de los usos de suelo artificiales?