• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página
logo web Geoinnova

Geoinnova

Consultoría y Formación en SIG y Medio Ambiente

  • Geoinnova
    • Asociación
    • Equipo
    • Visor de proyectos Geoinnova
    • Geolibrería
    • Alianzas Estratégicas
  • Consultoría
    • Consultoría y Desarrollo en Sistemas de Información Geográfica
    • Consultora Ambiental
    • Turismo sostenible
    • Planificación urbana y ordenación del territorio
    • Planes Urbanos de Actuación Municipal – PUAM
    • Geomarketing
  • Servicios
    • Planero Web
    • QElectricGIS
    • Plugins
  • Formación
    • Todos los cursos
    • Webinars
    • Máster y Diplomas
    • Cursos de ArcGIS
    • Cursos de QGIS
    • Cursos de Teledetección
    • Cursos de Medioambiente
  • Medio Ambiente
    • Consultora Ambiental
    • Estudios ambientales para proyectos de energías renovables
    • Estudios de Impacto e Integración Paisajística
    • Evaluación Ambiental Estratégica de planes y programas
    • Estudio de Impacto Ambiental para proyectos
    • Cálculo huella de carbono
    • Educación Ambiental
    • Cursos de Medioambiente
  • Coworking
  • Blog
    • SIG
    • Medio Ambiente
    • Teledetección
    • Programación y Desarrollo SIG
    • Corporativo
  • Contacto
    • Soporte de Clientes – Tickets
Programación y Desarrollo SIG

Cómo crear firmas espectrales de Sentinel-2 con R

18/03/2021 Deja un comentario

Como bien hemos visto en anteriores artículos,  R es un software con una enorme capacidad  para el tratamiento de información espacial y es por eso que en los últimos años ha conseguido llegar a un elevado número de usuarios  en este ámbito. Sin embargo, esta popularidad creciente va de la mano de la liberalización de la información espacial, favorecida por la puesta en marcha de misiones de gran calibre como, por ejemplo, Sentinel 2.

La misión de la Agencia Espacial Europea (ESA) ha permitido acceder de forma libre a imágenes multiespectrales de alta resolución espacial para toda la Tierra. Además, al estar compuesto por dos satélites hermanos (Sentinel-2A y Sentinel-2B), permite obtener imágenes con una alta resolución temporal, con imágenes disponibles cada 5 días de media.

Debido a esta mayor accesibilidad a los datos y a la mayor calidad de los mismos, han aparecido nuevas posibilidades y necesidades de explotación. Uno de estos ejemplos son las firmas espectrales.

¿Qué son las firmas espectrales?

Las firmas espectrales o también llamadas signaturas espectrales son una caracterización de la reflectividad de una superficie u objeto para unas longitudes de onda determinadas. Esta característica, única para cada tipo de superficie, permite diferenciar e identificar distintos elementos de la superficie terrestre, hasta el punto de poder clasificarlos por proximidad espectral.

firmas espectrales
Firmas espectrales de distintas coberturas terrestres (adaptado de Short, 1997)

El comportamiento, depende de las características espectrales de cada superficie y, en ciertas superficies, de la variabilidad temporal de esta. Estas diferencias son especialmente perceptibles en superficies vegetales, en las que existe esa alta variabilidad debido a las moderadas diferencias de reflectividad según el estado fotosintético de la planta.

Dependiendo de los valores de reflectividad obtenidos a través del sensor, podemos ser incluso capaces de diferenciar el estado vegetativo de la planta y discriminar entre vegetación sana o enferma.

Signatura espectral
Signatura espectral de la vegetación sana (Chuvieco, 2008)

Acceder a la información de Sentinel 2

Como ya hemos visto en anteriores artículos, podemos acceder a información ráster a través de R con la librería raster, ya instalada en el núcleo de R. Para ello vamos a cargar la librería y vamos a listar todos los archivos de nuestra carpeta con la función list.files(). Vamos a utilizar el parámetro full.names para devolver la ruta completa a cada uno de los archivos.

#Cargar librería raster
library(raster)
path_folder = "E:/RUTA_CARPETA/S2B_MSIL1C_20190514_bandas/"
jp2_files <- list.files(path_folder, full.names = T)

A continuación, vamos a filtrar los archivos ráster seleccionados de nuestra carpeta por nombre o patrón de texto.

pattern <- c("B02", "B03", "B04", "B05", "B06", "B07","B08", "B11", "B12")
stack_files <- unique(grep(paste(pattern,collapse="|"), jp2_files, value=TRUE))

Seleccionados todos los archivos en los que aparecen los nombres indicados, vamos a crear un objeto RasterStack con el conjunto de rásters seleccionados.

sen2 <- stack(stack_files)

Seleccionar coordenadas utilizando la función click() del paquete raster

En este punto, vamos a crear un data.frame vacío, en el que vamos a introducir distintas coordenadas haciendo clic sobre el mapa, con la ayuda de la función click() del paquete raster. Cada uno de estos clics (hemos definido 10 en este caso), identificará las coordenadas en el mapa y serán introducidas en nuestra tabla de datos.

df_clic <- data.frame(matrix(ncol = 2, nrow = 0))
colnames(df_clic) <- c("x","y")
plotRGB(brick(jp2_files[14]), r=1, g=2, b=3)
for (c in 1:10){
  df_clic <- rbind(df_clic,as.data.frame(click()))
}

Ahora vamos a convertir la tabla con coordenadas (x,y) a formato SpatialPointsDataFrame,con el que podremos representar nuestros puntos de forma gráfica.

spdf <- SpatialPointsDataFrame(coords = df_clic[,c(1,2)], data = df_clic, proj4string = crs(sen2))
plotRGB(brick(jp2_files[14]), r=1, g=2, b=3)
text(spdf,1:10,cex=1.5)
Representación de coordenadas (x,y)
Representación de coordenadas (x,y) sobre imagen

Extracción de valores ráster por coordenadas

Tras obtener los puntos, vamos a realizar la extracción de los valores ráster para cada una de las localizaciones seleccionadas. Para ello vamos a utilizar la función extract() del paquete raster y vamos a convertir el resultado a un nuevo data.frame, al que le vamos a añadir las longitudes de onda para cada una de las bandas. Además, vamos a modificar los nombres de cabecera de las columnas y filas con colnames() y rownames().

ext_sen <- as.data.frame(t(extract(sen2, spdf)))
print(ext_sen)
ext_sen <- cbind(ext_sen,c(492,560,665,705,740,783,842,1610,2190))
rownames(ext_sen) <- c("blue","green","red","RE1","RE2","RE3","NIR","SWIR1","SWIR2") 
colnames(ext_sen) <- c("1","2","3","4","5","6","7","8","9","10","bands")

Modificar data.frame a formato largo con melt (librería reshape)

Vamos a convertir nuestra tabla de datos a formato largo utilizando al función melt() de la librería reshape. Este formato se utiliza para que cada fila contenga un dato y a través del resto de columnas se contextualiza el mismo. En este caso, queremos obtener un valor de reflectividad para cada coordenada y banda. También vamos a escalar nuestros valores al intervalo 0-100.

library(reshape)
ext_melt <- melt(ext_sen,id=c("bands"))
ext_melt$value <- ext_melt$value/10000*100

Representar firmas espectrales con ggplot2

Ya tenemos todos nuestros datos listos para ser representados en un nuevo gráfico con ggplot2. Antes, vamos a crear una paleta de 10 colores aleatorios con la función distinctColorPalette() de la librería randomcoloR.

library(randomcoloR)
palette <- distinctColorPalette(10)
library(ggplot2)
ggplot(data = ext_melt, aes(x=bands, y=value, color=variable)) + 
  geom_line(size=1.3,  alpha=0.6) + geom_point(shape=19, size=2) + scale_color_manual(values = palette) +  scale_x_sqrt(breaks=c(492,560,665,705,740,783,842,1610,2190)) + ylim(0, 100) + annotate("text", x = c(492,560,665,705,740,783,842,1610,2190), y=0, label = c("blue","green","red","RE1","RE2","RE3","NIR","SWIR1","SWIR2"), size=2.5) + theme_bw(base_size = 10) + labs(title="Firmas espectrales Sentinel-2", x="Longitud de onda (μm)", y="Reflectividad (%)")
Gráfico de firmas espectrales con ggplot2
Gráfico de firmas espectrales con ggplot2

¿Para qué podremos utilizar firmas espectrales en teledetección?

  • Las firmas espectrales nos permiten identificar coberturas u objetos de la superficie terrestre con características espectrales similares.
  • Pueden ser utilizadas para calibrar imágenes satélites sin corrección radiométrica.
  • Permiten distinguir estados fenológicos de los cultivos o vegetación en general.

Aquí el código completo:

library(raster)
path_folder = "E:/ARTICULOS/R/4.FIRMAS_ESPECTRALES/S2B_MSIL1C_20190514_bandas/"
jp2_files <- list.files(path_folder, full.names = T)
pattern <- c("B02", "B03", "B04", "B05", "B06", "B07","B08", "B11", "B12")
stack_files <- unique(grep(paste(pattern,collapse="|"), jp2_files, value=TRUE))
sen2 <- stack(stack_files)
df_clic <- data.frame(matrix(ncol = 2, nrow = 0))
colnames(df_clic) <- c("x","y")
plotRGB(brick(jp2_files[14]), r=1, g=2, b=3)
for (c in 1:10){
  df_clic <- rbind(df_clic,as.data.frame(click()))
}
spdf <- SpatialPointsDataFrame(coords = df_clic[,c(1,2)], data = df_clic, proj4string = crs(sen2))
text(spdf,1:10,cex=1.5)
ext_sen <- as.data.frame(t(extract(sen2, spdf)))
print(ext_sen)
ext_sen <- cbind(ext_sen,c(492,560,665,705,740,783,842,1610,2190))
rownames(ext_sen) <- c("blue","green","red","RE1","RE2","RE3","NIR","SWIR1","SWIR2") 
colnames(ext_sen) <- c("1","2","3","4","5","6","7","8","9","10","bands") 
library(reshape)
ext_melt <- melt(ext_sen,id=c("bands"))
ext_melt$value <- ext_melt$value/10000*100
library(randomcoloR)
palette <- distinctColorPalette(10)
library(ggplot2)
ggplot(data = ext_melt, aes(x=bands, y=value, color=variable)) + 
  geom_line(size=1.3,  alpha=0.6) +
  geom_point(shape=19, size=2) +
  scale_color_manual(values = palette) +
  scale_x_sqrt(breaks=c(492,560,665,705,740,783,842,1610,2190)) +
  ylim(0, 100) +
  annotate("text", x = c(492,560,665,705,740,783,842,1610,2190), y=0, 
           label = c("blue","green","red","RE1","RE2","RE3","NIR","SWIR1","SWIR2"), size=2.5) +
  theme_bw(base_size = 10) + 
  labs(title="Firmas espectrales Sentinel-2", x="Longitud de onda (μm)", y="Reflectividad (%)")

Apúntate a nuestra newsletter semanal

"*" señala los campos obligatorios

Consentimiento*
Este campo es un campo de validación y debe quedar sin cambios.

Información legal

Cumplimos el RGPD (Reglamenteo General de Protección de Datos) y esta en la primera información que debes saber. Responsable: Asociación Geoinnova. Finalidad: Apuntarte en nuestra base de datos para poder enviarte nuestra newsletter y cualquier otra información de interes. Legitimidad: Nos das tu consentimiento para comunicarnos contigo. Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir tus datos. Para una información más ampliada entra a nuestra política de privacidad.

Artículos relacionados

Terre3 - Caminado a un lugar entre el GIS y el BIM
Terre3 – Caminando a un lugar entre el GIS y el BIM
28/03/2023
OSGeo4W Shell en Windows Terminal
Integrar la consola de OSGeo4W Shell en Windows Terminal para simplificar tu flujo de trabajo
20/03/2023
Gitpod: El Entorno de Desarrollo en la Nube para Proyectos en GitHub
Gitpod: El Entorno de Desarrollo en la Nube para Proyectos en GitHub
23/02/2023

RemOT Technologies

RemOT Technologies es una empresa colaboradora de Geoinnova, especialista en desarrollo de aplicaciones GIS para la web, cartografía y análisis espaciales automatizados. Desarrolla visores web cartográficos, aplicaciones basadas en geolocalización y plugins y personalizaciones de QGIS para resolver problemas de distintos ámbitos, como por ejemplo la gestión de parcelas o la gestión de redes. RemOT ya ha trabajado en varios proyectos de desarrollo de la mano de Geoinnova y, además, también ha participado, entre otros proyectos como en el desarrollo del Atlas Nacional de España. Ha sido reconocida como una de las 100 mejores empresas geoespaciales del mundo en el año 2019 por Geoawesomeness, una de las 50 Startup españolas de futuro por la revista Emprendedores y posee el sello Pyme Innovadora del Ministerio de Ciencia Innovación y Universidades. En la parte dedicada a formación, Lucía Martínez, Marcos Gimeno y Miquel Febrer, imparten diversos cursos en la plataforma de Geoinnova.

Interacciones con los lectores

¿Quieres comentarnos algo? Adelante! Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Footer

Menú Legal

  • Aviso Legal
  • Política de privacidad
  • Política de cookies
  • Términos y condiciones

Otras páginas de interes

  • Promociones y descuentos en formación
  • Formación bonificada FUNDAE

Contacto

Calle Luis Morondo Urra nº 8 Bajo A
31006 Pamplona (Navarra)
info@geoinnova.org
+34 948 117 137

Horario de atención

Lunes a Viernes - 09:00 a 14:00 y de 16:00 a 19:00.
Fines de semana y Festivos - Exclusivamente por mail.
Horario de Verano (01 de julio al 30 de agosto): De lunes a viernes de 8 a 15h.

Síguenos en Redes Sociales

Apúntate a nuestra newsletter

"*" señala los campos obligatorios

Consentimiento*
Este campo es un campo de validación y debe quedar sin cambios.

Entidad adherida a Confianza Online Certificado de inscripción en el Registro de huella de carbono, compensación y proyectos de absorción Logo Plazox

© 2023 · Desarrollada por Geoinnova en colaboración con OikosMSP

Gestionar el Consentimiento de las Cookies
Utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. Lo hacemos para mejorar la experiencia de navegación y para mostrar anuncios personalizados. El consentimiento a estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos anónimos. Sin una requerimiento, el cumplimiento voluntario por parte de su proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarlo.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en un sitio web o en varios sitios web con fines de marketing similares.
Administrar opciones Gestionar los servicios Gestionar proveedores Leer más sobre estos propósitos
Preferencias
{title} {title} {title}