Está en la página 1de 65

PROCESAMIENTO DE IMÁGENES ÓPTICAS CON SNAP

Carmen Recondo

1. Descarga de imágenes e instalación del software SNAP


1.1. Descarga de imágenes Sentinel-2 (y/o Landsat)

a) Usando Copernicus Data Space Ecosystem

Copernicus Data Space Ecosystem es el nuevo servidor oficial de la ESA para la


visualización y descarga gratuita de los productos de todos los satélites Sentinel. Para
descargar productos de Sentinel-2 se accede a la web https://dataspace.copernicus.eu/
(Figura 1.1) y en la pestaña de arriba Explore Data se elige Copernicus Browser
(https://dataspace.copernicus.eu/browser/, Figura 1.2).

Figura 1.1: Web de inicio de Copernicus Data Space Ecosystem.

Figure 1.2: Copernicus Browser para la visualización y descarga de productos Sentinel.

1
Para la búsqueda y descarga de productos en el servidor es necesario estar registrado
como usuario. Se introducen las credenciales en LOGIN si ya se dispone de una cuenta
de usuario, o bien se crea una cuenta registrándose en REGISTER si es la primera vez que
se utiliza el servidor.

En la pestaña de la izquierda VISUALIZE se identifica la zona de estudio haciendo zoom


(en nuestro caso a la provincia de Pontevedra) o mediante la opción Create an area of
interest (segundo icono a la derecha), donde puedo dibujar un rectángulo o un polígono
sobre la imagen. A continuación, en la parte de la izquierda de la pantalla se introducen
los criterios de búsqueda, como el rango de fechas en Time Range (por ejemplo, en
nuestro caso, entre el 15 y el 25 de octubre de 2017, para buscar la imagen posterior a
los incendios ocurridos en Galicia entre el 14 y 15 de octubre de 2017 y que estuvieron
activos varios días; si no hubiese ninguna imagen libre de nubes o humo en ese periodo
se van incrementando las fechas, pero mejor hacedlo poco a poco), la máxima cobertura
nubosa permitida (20-30% es lo usual), el satélite en DATA COLLECTIONS (Sentinel-2) y
el nivel superior de procesamiento, el L2A (imagen corregida de atmósfera y topografía),
si existe (si no, elegimos el L1C y tendremos que corregir nosotros la imagen mediante
el software SNAP). Las opciones visualización en LAYERS son varias, en el ejemplo se ha
elegido True color (color real o natural). En la Figura 1.2 se muestra la zona elegida y los
criterios seleccionados.

Debajo de la elección de la cobertura nubosa damos a Find products within selected time
range (Figure 1.2), lo que nos lleva a la pestaña SEARCH, para buscar las imágenes que
cumplen los criterios seleccionados (Figura 1.3). Como podemos ver, la imagen más
cercana a la fecha de los incendios y además única imagen válida es la del 22 de octubre
S2A_MSIL2A_20171022T112121_N0213_R037_T29TNG_20210105T102451.SAFE.

Figura 1.3: Imágenes que cumplen los criterios seleccionados (19), de las cuales sólo una
está libre de nubes y, por lo tanto, es válida (la del 22 de octubre de 2017).

2
Con los cuatro iconos que aparecen debajo de las imágenes podemos ver la información
de la imagen y una visualización más grande (Figura 1.4 para la imagen del 22 de
octubre), señalarla en el mapa, añadir la imagen a la lista a descargar y descargar la
imagen, respectivamente.

Figura 1.4: Información del producto S2A_MSIL2A del 22 de octubre de 2017.

Los mismos pasos deben seguirse para encontrar la imagen anterior a los incendios, así
como las pre-incendio y post-incendio de las otras provincias gallegas.

b) Usando EO Browser de Planet

La compañía Planet ha creado el buscador EO Browser, donde se pueden visualizar y


descargar imágenes no solo de los satélites Sentinel, sino también de los Landsat y del
sensor MODIS, entre otros. En https://www.sentinel-hub.com/explore/eobrowser/
entramos directamente en el buscador (Figura 1.5) y vamos a START EXPLORING ! (en la
página también se hace un buen resumen de las posibilidades de este buscador). Al igual
que en el caso anterior, debemos crear una cuenta y registrarnos de forma gratuita.

Una vez que hemos entrado en EO Browser (Figura 1.6) en la pestaña Discover el aspecto
es similar al del servidor Copernicus de la ESA, con una ventana a la izquierda donde se
elegirán los satélites/sensores de los que queremos buscar las imágenes y los mismos
criterios de búsqueda vistos anteriormente; una ventana en el centro con un mapa para
definir la zona de estudio; y los iconos a la derecha de buscar la zona con un polígono,
medir, etc., iconos que son exactamente los mismos que los del servidor Copernicus.
Hagamos la misma búsqueda que en el caso anterior, pero ahora con Sentinel-2 y
3
Landsat. Al igual que para el Sentinel-2, elegimos también el nivel 2 (L2) para el Landsat
8-9 (reflectancia en superficie y temperatura superficial).

Figura 1.5: Web de inicio de EO Browser de Planet

Figura 1.6: EO Browser y sus ventanas de visualización y elección de criterios.

Activando SEARCH se muestran las imágenes que cumplen los criterios seleccionados
(en nuestro caso no aparecen imágenes del Landsat 8-9 que los cumplan). De nuevo, la
escena del 22 de octubre es la única válida, que puede visualizarse sobre la ventana
central eligiendo en la pestaña Visualize alguna de las opciones de visualización, en
nuestro caso True color (Figura 1.7).

En Visualize también se puede crear una serie temporal de imágenes de la zona elegida
en Timespan y crear una animación con ellas dándole al séptimo icono a la derecha. Esta
animación se puede descargar y guardar como .gif. Esto es muy interesante, por
ejemplo, en nuestro caso, para ver la evolución de las zonas quemadas, si éstas van
desapareciendo con la regeneración de la vegetación.

4
Figura 1.7: EO Browser en Visualize, donde se muestra la escena en True color.

c) Usando GLoVis del USGS

El visualizador GloVis del Servicio Geológico de estados Unidos o, en inglés, U.S.


Geological Survey (USGS) puede verse en la web https://glovis.usgs.gov/ o, más
concretamente en https://glovis.usgs.gov/app (Figura 1.8). Permite seleccionar
imágenes Landsat y de otros satélites, pero no de los satélites Sentinel.

Figura 1.8: Web del visualizador GloVis del USGS

5
Al igual que en los otros buscadores, se puede seleccionar el tipo de datos (en nuestro
caso Landsat-8, aunque solo es posible elegir el nivel 1, L1), un rango de fechas y la
cobertura nubosa.

1.2. Descarga del software SNAP de la ESA

En la página web de la ESA https://step.esa.int/main/download/snap-download/


podemos descargar el software SNAP (Sentinel Application Platform) para el
procesamiento digital de imágenes Sentinel (aunque también puede procesar imágenes
de otros satélites/sensores). Descargamos entonces la versión actual de SNAP (en
nuestro caso la versión 9.0.0) y los toolboxes para los Sentinel donde aparece Sentinel
Toolboxes (en este caso la versión para Windows 64-Bit, que sería la primera opción de
la lista de la Figura 1.9). En la descarga se obtiene el ejecutable esa-
snap_sentinel_windows-x64_9_0_0.exe y se puede elegir que se instalen sólo los
toolboxes para Sentinel-2, que es en los que estamos interesados (podrían instalarse
también los del Sentinel 1 y Sentinel 3) y configurarlo para Python. Todo ello se puede
hacer también en cualquier momento.

Figura 1.9: Página web de la ESA donde se descarga SNAP y los diferentes Toolboxes.

6
Ejecutamos entonces el fichero .exe descargado para poder a empezar a usar SNAP. El
directorio de destino será C:\Program Files\snap9. En el proceso se nos preguntará si
queremos configurar SNAP para usar con Python y le diremos que sí. Si no tenemos
Python instalado, en el link Python (Figura 1.10) podemos descargar alguna de las
versiones permitidas por SNAP (en nuestro caso, usaremos la versión de Phyton 2.7, en
concreto la 2.7.16), que se cargará en C:\Python27, directorio que tengo que especificar
en SNAP, además del .exe de Python (Figura 1.10).

Figura 1.10: Configuración de SNAP para usar con Python (el cual también se puede
descargar en el proceso) y especificación de la ruta del ejecutable de Python.

En los siguientes procesos (Figura 1.11 y Figura 1.12) se nos indica las extensiones de los
ficheros con los que trabaja SNAP (que aceptamos), se crea el icono en el escritorio y se
corre SNAP para configurar Python.

Figura 1.11: Ficheros con los que trabaja SNAP

7
Figura 1.12: Creación del icono de escritorio de SNAP y configuración de Python.

1.3. Descarga e instalación del plugin de SNAP “Sen2Cor” para corregir de


atmósfera (y topografía) las imágenes Sentinel-2

En la página http://step.esa.int/main/third-party-plugins-2/sen2cor/ podemos ver


información del plugin Sen2Cor que genera los productos Level-2A (Figura 1.13) e
incluso descargarlo manualmente (aunque la opción automática que usaremos es mejor
para que defina los directorios directamente).

Figura 1.13: Función realizada por Sen2Cor sobre los productos L1C y última versión.

8
Para la descarga e instalación automática de Sen2Cor (siempre elegimos la última
versión, en nuestro caso la v2.11) entramos en SNAP y en la opción de Tools→ Plugins
podemos ver los módulos que podemos actualizar (Update), los que están disponibles
para descargar (Available Plugins), entre los que encontraremos el Sentinel-2 SEN2COR
2.11.0 Processor (además de otras versiones anteriores), y los instalados (Installed).
Entonces, desde la pestaña Available Plugins seleccionamos e instalamos Sen2Cor v2.11
y así, una vez instalado, aparecerá ya en la pestaña Installed (Figura 1.14). Si tuviéramos
versiones anteriores de Sen2Cor instaladas lo mejor es borrarlas antes de instalar la
nueva. En Tools→ Manage External Tools (haciendo clic sobre ella y eliminándola con
el signo -) y también en Tools→ Plugins→ Installed (con clic en Uninstall).

Figura 1.14: Sentinel-2 SEN2COR 2.11.0 Processor instalado.

Se procederá de la misma forma para instalar cualquier otro Plugin que necesitemos.
Tras la instalación o actualización de un Plugin de SNAP es necesario reiniciar el
programa, ya que los Plugins se cargan al inicio.

9
2. Empezando con SNAP: Herramientas básicas
Cuando abrimos SNAP podemos ver en la parte superior (Figura 2.1) los menús
principales: File, Edit, View, Analysis, Layer, Vector, Raster, Optical, Radar, Tools,
Window y Help, cada una de las cuales se puede desplegar para acceder a los distintos
comandos. Además, debajo de estas etiquetas aparecen diferentes iconos para hacer
ciertos procesos más rápidos, además de los típicos iconos de la lupa y mano, de abrir y
guardar ficheros, etc. Por otra parte, en el campo visual, la pantalla se distribuye en tres
partes, a la izquierda la ventana básica de Product Explorer y debajo varias como las de
Navigation, Colour Manipulation, Uncertainty Visualisation y World View y a la derecha
la ventana para la visualización de la imagen. De cualquier forma, se puede elegir las
ventanas que se muestren a la izquierda, cerrando unas y manteniendo otras, o bien
cargar otras nuevas. Además, al activar ciertos procesos aparecen ventanas nuevas
donde se muestran sus opciones o un seguimiento del proceso. En los laterales izquierdo
y derecho de la pantalla se irán poniendo las ventanas que hayamos cerrado para poder
volver a activarlas desde aquí, por ejemplo, en la Figura 2.1 aparecen Mask Manager y
Layer Manager entre otras. Por último, en el buscador de arriba a la derecha se pueden
buscar los diferentes comandos sin tener que entrar en los menús correspondientes.
Empecemos ahora a trabajar con una imagen, en concreto con la imagen del 22 de
octubre de 2017 de una zona de Galicia (As Rías Baixas), que es una imagen libre de
nubes (y humo) posterior a los incendios ocurridos entre el 14 y el 15 de octubre de 2017
y que estuvieron varios días activos. Posteriormente también usaremos la imagen libre
de nubes previa a los incendios de la misma zona, que es la del 13 de agosto de 2017.

Figura 2.1: Ventanas de trabajo, menús e iconos en el software SNAP

10
2.1. Abrir una imagen y visualizarla
En File→Open Product (o en su correspondiente icono) entro en la carpeta donde está
la imagen Sentinel-2 (y sus metadatos) que quiero abrir y elijo el fichero
MTD_MSIL1C.xml. (Figura 2.2). Leída la imagen se muestra en Product Explorer su
nombre completo y, desplegando el signo + de la izquierda, las capas básicas con
información de la imagen y sus bandas: Metadata, Vector Data, Bands y Masks. A su vez,
cada una de estas capas se puede desplegar con su signo + para acceder a sus subcapas.
Por ejemplo, en Bands podemos ver los datos/ángulos solares (sun) y de visión (view) y
las bandas de las que consta la imagen Sentinel-2 con su número y longitud de onda
central (Figura 2.3).

Figura 2.2: Open Product para abrir la imagen Sentinel-2 del 22/10/2017, Level-1C.

Figura 2.3: Capas básicas/bandas de la imagen y selección de un RGB=432 (color real).

11
Para visualizar la imagen lo primero es seleccionarla (debe aparecer marcada en azul)
en Product Explorer para que se active en la pestaña Window la opción básica Open
RGB Image Window (que también se puede también activar, teniendo seleccionada la
imagen, con el botón derecho del ratón) y, seleccionando ésta, la ventana Select RGB-
Image Channels (Figura 2.3). Las opciones de visualización por defecto vienen dadas
entonces en Profile y se muestran tres: Sentinel 2 MSI Natural Colors (RGB=4-3-2), False-
color Infrared (RGB=8-4-3) y Atmospheric penetration (RGB=12-11-8A); pero también se
puede elegir otra por defecto en el icono de abrir fichero que se muestra a la derecha
de donde aparece Profile, que lleva a la carpeta rgb_profiles. Además, se puede realizar
otra composición RGB que sea más adecuada para nuestro trabajo concreto, por
ejemplo, en este trabajo de incendios (zonas quemadas) es muy útil la composición
RGB=8A-11-12 que, una vez realizada, podemos guardar (con el icono de grabar a la
derecha del anterior) o bien en la carpeta rgb_profiles o en nuestro directorio de trabajo
(en nuestro caso la guardaremos en nuestro directorio de trabajo con el nombre
Sentinel2_RGB-8A-11-12). Probemos la diferencia de visualización entre el color real o
natural, el falso color y el RGB=8A-11-12. Las composiciones realizadas se van cargando
en unas pestañas que aparecen en la ventana de visualización, pudiendo cambiar la que
queramos visualizar en cualquier momento (Figura 2.4.). Nos movemos a través de los
distintos RGB abiertos y seleccionamos el que queramos con las flechitas que aparecen
en la misma ventana a la derecha. Por último, a la derecha de las flechitas, podemos
maximizar la ventana de visualización, escondiendo el resto de las ventanas.

Figura 2.4: Diferentes visualizaciones de una zona quemada en la imagen, de izquierda


a derecha: RGB=8-4-3 (falso color), RGB=8A-11-12 y RGB=4-3-2 (color real o natural).

Para visualizar una sola banda en una paleta de grises basta hacer un RGB que contenga
la misma banda en sus distintos colores básicos, por ejemplo, para visualizar la banda 4,
elegiríamos RGB=4-4-4. También se puede hacer esto, de forma más simple,

12
seleccionando la banda y dándole al botón derecho del ratón para seleccionar Open
Image Window. O simplemente haciendo clic dos veces encima de la banda
seleccionada.

Abierta la imagen podemos navegar sobre ella y ampliarla con los iconos de la mano y
la lupa/zoom y con las opciones de la ventana Navigation, a la izquierda, que puedo
activar (ver la ventana Navigation, en la esquina inferior izquierda de la Figura 2.4).
Probar las distintas opciones de lupa que tiene esta ventana a la derecha y fijarse en las
dos últimas opciones de poder sincronizar imágenes para ver la misma zona en ellas o
para señalar algo concreto con el cursor. Probarlas sobre dos RGB distintas. Las ventanas
que se abren para albergar las distintas RGB pueden disponerse en vertical u horizontal
con los iconos de color mostaza del menú principal. Algunas de las opciones de
Navigation también aparecen en la pestaña View del menú principal.

2.2. Ver los metadatos de la imagen


Para ver los metadatos de la imagen abrimos la capa Metadata de la ventana Product
Explorer. Fijarse en la información proporcionada en cada una de las capas y subcapas
(Figura 2.5). El signo i de información a la izquierda de las capas significa que podemos
darle al botón derecho del ratón para activar Open Metadata Window, que, como su
nombre indica, nos proporcionará más información.

Figura 2.5: Los metadatos de la imagen (Metadata) y sus tres capas principales (a la
izquierda), y la primera capa desarrollada en sus subcapas (a la derecha).

Por ejemplo, es muy útil ver, dentro de Level-1C_User_Product y en su primera capa


General_Info y las capas de ésta, la información del satélite (por ejemplo, Sentinel-2A),
el número de órbita (37) y su dirección (DESCENDING), la fecha y la hora (UTC) de toma
inicial (en DATATAKE_SENSING_START: 2017-10-22T 11:21:21 en nuestro ejemplo de la
imagen de Galicia) y hora final (GENERATION_TIME: 2017-10-22T 11:28:02), el nivel de
procesamiento (Level-1C) y el tipo de producto (S2MSI1C), el formato de la imagen
(JPGEG2000), los valores especiales (NODATA=0, SATURATED=65535), los valores

13
aplicados para el cálculo de la reflectividad y los valores de ganancia, la información
espectral de cada banda (longitudes de onda mínima, máxima y central; y la resolución
espacial). La información concreta de cada producto viene resumida en PRODUCT_URI:
S2A_MSIL1C_20171022T112121_N0205_R037_T29TNG_20171022T112802, que, a su
vez, es el nombre del fichero de la carpeta de la imagen (con el formato .SAFE). La
segunda capa de Level-1C_User_Product es General_Info y, en las capas de ésta,
podemos ver que el primer píxel de la izquierda es el número 1 (en otros
productos/software este píxel es el número 0) y que el sistema de coordenadas (EPSG)
es coordenadas geográficas (GEOGRAPHIC), es decir, nos mostrará los valores de la
latitud y longitud, de hecho, también nos muestra las coordenadas de las cuatro
esquinas de la imagen en este sistema. En la capa Auxiliary_Data_Info podemos ver que
la imagen tiene asociados otros productos (como un DEM y datos meteorológicos del
ECMWF (European Centre for Medium-Range Weather Forecasts)) y en
Quality_Indicators_Info si ha pasado los distintos controles de calidad, para terminar
con la evaluación de la cobertura nubosa (3.44% en este caso).

La información contenida en la capa Level-1C_DataStrip_ID de Metadata es más


específica y la de la capa Granules, en su capa Level-1C_Tile_29TNG nos proporciona
también General_Info, Geometric_Info (en su capa Tile_Geocoding se muestran las
distintas resoluciones espaciales: 10, 20 y 60 m; y el número de filas y columnas para
cada resolución (10980, 5490 y 1830, respectivamente) la geoposición del primer píxel
de la izquierda y el elipsoide/proyección: WGS84/UTM zone 29N y el código EPSG:
32629; en Tile_Angles se muestran los ángulos solares medios de la imagen (Figura 2.6)
y los detallados, así como también los ángulos de visión medios para cada banda y los
detallados) y Quality_Indicators_Info. Por ejemplo, en nuestro caso, los ángulos solares
medios (Mean_Sun_Angle) son el ángulo cenital (o vertical) Vsol=54.3020615270026o y
el ángulo azimutal ϑsol=165.441850332212o, y los ángulos de visión medios
(Mean_Viewing_Incidence_Angle) para la banda 12 son el cenital
Vview=7.57845159855338 y el azimutal ϑview=104.690102822468 (fijarse también lo
o o

poco que difieren estos ángulos para las distintas bandas, debido al sistema de detección
de éstas en los detectores).

Figura 2.5: La capa Granules con sus elementos (a la izquierda) y los ángulos solares
medios (a la derecha) de la imagen del 22 de octubre de 2017 bajo estudio.
14
Fijarse que los ángulos solares detallados se almacenan en dos bandas (de 22x22 píxeles)
incluidas en Bands→sun (Figura 2.3), así como los de visión detallados en varias bandas
en Bands→view, bandas que se podrán usar en distintos procesos.

Fijarse también que la última capa de la imagen es Masks, una clasificación por defecto
que tiene la imagen que permite, por ejemplo, ver los píxeles nodata y los defectuosos,
los clasificados como nubes (por ejemplo, veamos las nubes de cirrus_clouds), los trozos
de escena captados por los distintos detectores, etc.

Un pequeño resumen de la información de la imagen y de cada banda puede verse


también en Analysis→Information teniendo seleccionada la imagen (Figura 2.6) o una
banda (Figura 2.7). Observemos que queda claro que estamos observando la
reflectividad o reflectancia de cada píxel en esa banda. Recordemos y apuntemos
también el nombre de cada banda y el número de píxeles de los que consta cada una
para las diferentes resoluciones espaciales de éstas:
10 m (2=blue, 3=green, 4=red, 8=NIR) = 10980x10980
20 m (5, 6 y 7, las tres Vegetation Red Edge, 8A=Narrow NIR y 11 y 12, ambas del SWIR)
= 5490x5490
60 m (1=Coastal aerosol, 9=Water vapour, 10=SWIR-Cirrus) = 1830x1830

Figura 2.6: Información resumida de la imagen del 22 de octubre de 2017.

15
Figura 2.7: Información resumida de la banda 11 (del SWIR) de la imagen.

2.3. Ver la información espacial y espectral del píxel. Añadir pines


En View→Tool Windows aparecen muchas opciones, una de las cuales es Pixel Info, que
al activarla abre la ventana correspondiente con la información geográfica de cada píxel
y su valor en reflectividad en las bandas usadas en la composición RGB. Pero si queremos
obtener la curva espectral de cada píxel (en todas las bandas ópticas) tenemos que ir a
View→Tool Windows→Optical→Spectrum View, abriéndose entonces la ventana
correspondiente que nos muestra la curva espectral de cada píxel a medida que nos
movemos sobre la imagen (Figura 2.8). Fijarse que los ejes X e Y, correspondientes a los
valores de reflectividad y longitud de onda, respectivamente, se van adaptando a los
valores particulares de cada píxel. Elijamos diferentes píxeles (vegetación, agua, suelo,
nube, etc.) para ver sus diferentes curvas espectrales (mejor en color real, RGB:432).
Nos fijamos también en el exceso de reflectividad que se produce en el azul debido a la
atmósfera. Probemos también los iconos dentro de la ventana de Spectrum View, que
permiten elegir las bandas a mostrar (en el icono del embudo, clic en las flechas de la
izquierda para desplegar las bandas; para comparar con las curvas teóricas no elegir la
b1, b8A, b9 ni la b10), configurar el dibujo modificando la línea que conecta el valor de
la reflectividad en las distintas bandas, así como el símbolo y tamaño para cada valor en
cada banda, ver la unidad de medida en el eje Y (en este caso reflectancia o reflectividad)
y la longitud espectral de cada banda (en nm) y su anchura espectral (todo ello en el
icono del embudo), y permite elegir si aplicar una cuadrícula o no al dibujo (en el icono
de la cuadrícula). También permite exportar los valores a un fichero de texto (.csv; mejor
haced esto como explicado con los pines más adelante). Y para guardar la gráfica se hace
con el botón derecho del ratón encima de la parte interior gris de la ventana.
16
Figura 2.8: Ventana Spectrum View con la curva espectral típica de un píxel de
vegetación. Para mostrar la curva se han elegido las bandas ópticas usuales (incluyendo
las Red Edge; es decir, no se han seleccionado las bandas 1, 8A, 9 y 10).

El icono Spectrum View puede mostrase en el menú principal activando View→


Toolbars→Tool Windows, así como todos los que corresponden a Tools Window.

También es posible visualizar simultáneamente los valores de reflectividad de varios


píxeles de coordenadas conocidas usando pines. Los pines son puntos de interés que
nos interesa visualizar sobre la imagen y que se pueden crear y añadir de dos formas
(Figura 2.9): Gráficamente, usando la herramienta Pin placing tool (icono de la barra de
herramientas Tools situado a la derecha de la lupa de zoom); o mediante teclado,
activando el gestor de pines (Pin Manager). Este gestor se activa en View→Tool
Windows→Pin Manager (o bien a través del icono correspondiente si lo hemos activado
en el menú principal o tecleando “Pin Manager” en la búsqueda general) y permite
añadir pines en los píxeles de interés introduciendo sus coordenadas geográficas (latitud
y longitud en grados y con signo – si es latitud sur o longitud oeste) en la herramienta
Create and add new pin (el primer icono de la ventana Pin Manager), creándose una
tabla con los distintos pines en filas y su información en columnas. En las columnas Color
y Label de la ventana Pin Manager se puede modificar el color y la etiqueta de los pines
(así como las coordenadas en las columnas correspondientes). Además, a la derecha de
la ventana hay diferentes iconos que permiten editar los pines, borrarlos, importarlos
(de un fichero .xml o .txt), exportarlos (a .xml), transferirlos a otros productos (otra
imagen abierta, colocándonos en la imagen que tiene los pines para transferirlos a la
otra imagen abierta), buscar en la imagen el píxel seleccionado en la tabla, así como
exportar sus datos (de reflectividad, en este caso) sobre las distintas bandas (que puedo
elegir en el icono del embudo) a un fichero de texto (.txt), que podrá ser fácilmente

17
transferido a Excel o R. Seleccionemos sobre la imagen varios pines representativos de
las diferentes cubiertas: vegetación sana, quemada, agua, suelo (por ejemplo, asfalto),
nube, sombra de nube, etc., etiquetándolos con el nombre adecuado y eligiendo un
color adecuado para cada uno. Exportemos después sus valores de reflectividad en las
9 bandas usadas en la Figura 2.8 (y sólo en estas bandas) a un fichero que llamaremos
Curvas-espectrales-pines-antes_ATCOR.txt. Guardamos también la gráfica que
obtendremos de Spectrum View con el mismo nombre *.png.

Figura 2.9: Diferentes pines sobre la imagen en color real (RGB: 432) representativos de
diferentes cubiertas y la ventana Pin Manager donde se indica su nombre y su color.

Por otra parte, también se pueden editar las propiedades gráficas de los pines (el estilo)
en Style css en la ventana Edit Pin (ver la ayuda de SNAP al respecto), aunque es más
fácil hacerlo en Layer Editor. Volveremos sobre ello más adelante. Ahora sólo fijarse en
que los pines aparecen también como capas vectoriales dentro de Vector Data.

La imagen con los pines la guardamos con el mismo nombre añadiendo –con_pines,
para saber que esta imagen contiene pines (esto se puede hacer rápidamente con el
botón derecho del ratón sobre la imagen y eligiendo Save As para ponerle en nombre
que queramos, ya que si usamos Save la guardará con el mismo nombre, lo cual no nos
interesa; debemos fijarnos que se guarde en nuestro directorio de trabajo, ya que por
defecto la guarda dentro de la carpeta .SAFE de la imagen original). La imagen se
guardará en el formato .dim y esta imagen ya no será una sola carpeta, sino que será un
fichero .dim y una carpeta .data. Abrimos entonces esta imagen (el fichero .dim), para
poder visualizar los valores de reflectividad de sus pines en las distintas bandas (la curva
espectral de las cubiertas a las que representan) usando de nuevo la herramienta

18
Spectrum View y marcando la opción Show spectra for all pins para incluir en el gráfico
todos los pines, o Show spectra for selected pins para incluir sólo los pines seleccionados,
o bien Show spectrum at cursor position para mostrar el pin seleccionado con el cursor
(la flecha). Recordamos que para que las curvas obtenidas puedan compararse mejor
con las curvas teóricas debemos descartar mostrar las bandas b1, b8A, b9 ni la b10. La
selección de los pines, por lo tanto, puede hacerse en Pin Manager o también con el
icono de la flecha del menú principal (haciendo clic encima del pin, que aparecerá a su
vez seleccionado en la tabla de Pin Manager y en la imagen). Comparemos las curvas
espectrales de las diferentes cubiertas seleccionadas (Figura 2.10).

Figura 2.10: Curvas espectrales de las cubiertas seleccionadas mediante pines.

2.4. Ver la estadística de la imagen y de sus distintas bandas

En Analysis→Statistics podemos calcular la estadística de las diferentes bandas (para


cubrir la Tabla 2.1 en nuestro ejemplo). Para ello seleccionamos la banda
correspondiente y dentro de la ventana de Statistics damos al icono superior derecho
de inicio del cálculo. Histogram accuracy permite introducir un número entre 0 y 6 y
está relacionado con el número de píxeles involucrados en la estadística (si marcamos
Auto Accuracy pone 3), por lo que si queremos hacer una estadística completa debemos
poner 6. Para cada una de las bandas de nuestro ejemplo cubrimos los siguientes
estadísticos básicos:
n=número de píxeles (filasxcolumnas) en las bandas de resolución espacial:
10 m (2=blue, 3=green, 4=red, 8=NIR) = 10980X10980= 120 560 400 (poner el máximo)
20 m (5, 6 y 7, las tres Vegetation Red Edge, 8A=Narrow NIR y 11 y 12, ambas del SWIR)
= 5490x5490= 30 140 100
60 m (1=Coastal aerosol, 9=Water vapour, 10=SWIR-Cirrus) = 1830x1830= 3 348 900

19
ρ mínima ρ máxima ρ media σ (Desv. Típica) P90 th.
Banda 1 0.1022 0.6511 0.1303 0.0147 0.1439
Banda 2=blue 1E-4 2.8000 0.0994 0.0190 0.1164
Banda 3=green 1E-4 2.7356 0.0800 0.0219 0.1021
Banda 4=red 1E-4 2.8000 0.0655 0.0301 0.1006
Banda 5=VRE 1E-4 2.5221 0.0858 0.0336 0.1246
Banda 6=VRE 1E-4 2.6932 0.1459 0.0569 0.2083
Banda 7=VRE 1E-4 2.8001 0.1701 0.0697 0.2478
Banda 8=NIR 1E-4 2.8000 0.1697 0.0740 0.2540
Banda 1E-4 2.4846 0.1904 0.0808 0.2021
8A=NNIR
Banda 9=WV 1E-4 0.4142 0.0728 0.0287 0.1047
Banda 10 1E-4 0.0944 0.0040 0.0035 0.0080
Banda 1E-4 2.0510 0.1391 0.0735 0.2333
11=SWIR
Banda 1E-4 2.1203 0.0820 0.0525 0.1547
12=SWIR
Tabla 2.1: Estadística de las 13 bandas de la imagen del 22 de octubre de 2017.

Nos fijamos que, aunque en algunos casos el valor máximo de la reflectividad (ρ) es
mayor que 1, lo cual no es posible, eso significa que hay algún error en esos píxeles, ya
que si no fijamos en la ρ a un percentil de 90% (muy cercana a la máxima, que sería en
el 100%) es mucho menor.

Fijarse que sobre la tabla de la estadística se puede dar al botón derecho del ratón y
guardarla en algún fichero (Excel, por ejemplo, la b8) o bien exportarla a un fichero .csv
con el icono abajo a la derecha de la ventana. Y que entonces aparece el verdadero
número de píxeles totales (porque al hacer el cálculo en cada banda se ha prescindido
de algunos erróneos) y aparecen con más detalle los diferentes percentiles.

La desviación típica suele ser el estadístico que mejor define el contraste de cada banda.
Así, según ésta, en nuestro ejemplo, la banda (de las marcadas en color, que son las que
más nos interesan) menos contrastada sería la b2 (la que tiene menor valor de σ) y la
más contrastada sería la b8A (mayor σ). Comprobamos esto visualizando ambas bandas
en colores de grises.

Por otra parte, SNAP también permite enmascarar ciertos píxeles a la hora de hacer la
estadística en Use ROI mask(s) (a la derecha de la ventana) usando máscaras definidas
por el usuario (escribiendo el fichero o través del icono Mask Manager) y también usar
ciertas máscaras incluidas por defecto en las bandas.

20
2.5. Ver los histogramas

En Analysis→Statistics a la vez que vemos la estadística de cada banda vemos también


al lado su histograma, el cual se puede guardar como imagen al darle con el botón
derecho del ratón encima del dibujo. También se puede hacer zoom sobre la zona que
nos interese del histograma marcando un cuadrado sobre el dibujo. A la derecha del
histograma se muestran también los umbrales para todos los percentiles.

También es posible visualizar el histograma usando Analysis→Histogram. En esta


opción también se pueden usar máscaras y cambiar el mínimo y máximo del eje x
(valores de reflectividad representados), elegir los bins a usar en la representación (que
marcará la anchura de cada barra del histograma) y aplicar una escala logarítmica. Y en
los iconos a la derecha de la ventana se pueden cambiar los textos y estilo del
histograma, así como salvarlo como imagen o imprimirlo. Para que se muestre cada
cambio realizado hay que darle a Refresh View.

Observar los distintos histogramas para cada banda, la similitud de los histogramas de
las bandas similares (por ejemplo, las del visible (VIS)) y la diferencia entre el VIS y el NIR
y el SWIR (Figura 2.11). Fijarse en las diferencias, ya que según sea la forma del
histograma funcionarán mejor unas técnicas de contraste que otras. Y fijarse también
en los picos a valores de reflectividad (reflectancia) baja en las bandas del NIR y SWIR,
que revelan la existencia de agua en la imagen (en nuestro caso sobre todo el Océano
Atlántico).

Figura 2.11: Histogramas de distintas bandas (de izquierda a derecha y de arriba abajo):
b1 (Coastal aerosol), b3 (VIS), b5 (RVE), b7 (RVE), b8A(NIR) y b12(SWIR).

21
3. Correcciones en la imagen
3.1. Corrección atmosférica y topográfica (con un MDT de 90 m)
La corrección atmosférica y topográfica (ATCOR correction) de la imagen se realiza con
el plugin Sen2Cor que ya hemos instalado previamente (en Tools→Plugins pueden verse
todos los módulos instalados y los disponibles para instalar; si no encontramos el
Sen2Cor versión 2.11, que es la última versión, buscamos en los disponibles el llamado
Sentinel-2 SEN2COR 2.11.0 Processor y lo instalamos). Para que quede bien instalado
debemos cerrar SNAP con Restart Now, volver a abrirlo y cargar la imagen original, no
la de los pines, porque el módulo para hacer la corrección solo funciona con ésta. A
continuación, para usarlo, vamos a Optical→ Thematic Land Processing→ Sen2Cor
Processor→Sen2Cor 2.11.0 (Figura 3.1):

Figura 3.1: Proceso para la ATCOR usando el plugin Sen2Cor 2.11.0 (versión 2.11.0).

Ya en la ventana de Sen2Cor, en la primera pestaña (I/O Parameters) elegimos la imagen


(la imagen original, la .xml dentro de la carpeta .SAFE, ya que con la .dim no funciona,
ya que Sen2Cor necesita ir a carpetas auxiliares y a metadatos que solo están dentro de
la .SAFE) y en la segunda (Processing Parameters) los parámetros de procesamiento.
Cuando se realice la corrección atmosférica y la topográfica (con el MDT de 90 m), la
corrección ATCOR, el nombre del nivel cambiará de L1C a L2A, indicando que la imagen
está corregida. Pero para saber a qué resolución hemos elegido la imagen final (si es la
misma para todas las bandas), por ejemplo, 20 m en nuestro caso, y con qué versión de
Sen2Cor la hemos obtenido, le añadimos como sufijo a la imagen resultante: -20m-
Sen2Cor_v2-11.

Sen2Cor corrige de atmósfera, terreno (topografía) y cirros (opcionales los dos últimos)
el producto TOA (Top Of Atmosphere) Level 1C y crea el producto BOA (Bottom Of
Atmosphere) Level 2A, que contiene la reflectancia en superficie (Surface Reflectance).

22
Aplicamos Sen2Cor a todas las bandas (en realidad las que nos interesan son la 2, 3, 4,
5, 6, 7, 8, 8A, 11 y 12; la 1, 9 y 10, de 60 m, son aplicadas en la propia corrección) y como
resolución de salida elegimos 20 m (que lleva hacerla un tiempo razonable˜20 minutos).

Los parámetros/datos de entrada y de procesamiento (input data) importantes (ver


documento de Sen2Cor de la ESA para una explicación detallada de todos) en los que
tenemos que fijarnos para elegir la opción correcta, o bien aceptar la opción por
defecto, se muestran en las Figura 3.2 (a, b, c, d y e). Además, en los inputs en los que
hay que elegir un valor se muestra una explicación de las distintas opciones al colocarse
encima de la línea en blanco. En el caso de 20 m los parámetros serían:
1. L1C, TOA Reflectance, la imagen original de la carpeta .SAFE.
2. Resolution: 20 m para todas las bandas (puede ser 10, 20 o 60 m y lo ideal sería 10
m, pero lleva mucho tiempo el hacerlo a esta resolución). Pero para una prueba inicial
de que todo funciona bien hacemos primero la de 60 m.

Figura 3.2 (a): Parámetros Sen2Cor iniciales. El segundo muestra la resolución


espacial elegida para todas las bandas de la imagen de salida.

3. DEM Directory: directorio donde se encuentra el DEM a usar, en mi caso


C:\Users\Carmen\Documents\sen2cor\2.11\dem\srtm (para hacer la corrección) o
NONE (si no se quiere hacer). Las carpetas sen2cor\2.11\cfg se crean en la carpeta de
documentos local al instalar Sen2Cor v2.11. En cambio, las carpetas dem\srtm (así
como la carpeta log) se crean la primera vez que se ejecuta el proceso de corrección
(ver página 28; por lo tanto, la primera vez lo ejecutamos a 60 m, con los valores por
defecto, para que se creen estas carpetas y el proceso lleve poco tiempo) y también
debería generarse el DEM. Si el DEM no se encuentra en el directorio indicado se
descargará de la web indicada en el punto 4. De cualquier forma, actualmente sólo
se puede usar un DEM de 90 m, por ejemplo el DEM SRTM 90 m que se puede
descargar también en https://srtm.csi.cgiar.org/srtmdata/, donde buscaremos el tile
5x5 degree en formato GeoTiff de la zona correspondiente a la imagen (en nuestro
caso la esquina NW de Galicia), que será el fichero srtm_35_04:

Figura 3.2 (b): Parámetros Sen2Cor iniciales. El segundo muestra la resolución


espacial elegida para todas las bandas de la imagen de salida.
23
4. DEM reference: si no se encuentra el DEM en el directorio anterior, se descarga de la
web: https://srtm.csi.cgiar.org/wp-content/uploads/files/srtm_5x5/TIFF/ (esta web
no funciona actualmente, así que hay que usar el DEM del directorio que, si no se
genera, hay que descargarlo como se ha indicado en el punto 3).
5. Generate DEM output: TRUE
6. Generation TCI output: TRUE.

Figura 3.2 (c): Parámetros Sen2Cor relativos al DEM.

7. Aerosol Type: Rural, Maritime, AUTO. Elegimos la opción AUTO para que se
determine automáticamente. Por defecto es Rural (continental).
8. Mid latitude: Summer, Winter, AUTO. Elegimos la opción AUTO para que se
determine automáticamente. Por defecto es Summer.
9. Ozone content: Poniendo 0 seleccionará la LUT con la mejor aproximación. Por
defecto es 331 DU (Dobson Units, 1DU = 0.01mm de espesor de O3 en condiciones
normales para el nivel del mar). O sea, que 331 DU=3.31 mm.
10. WV WV (Water Vapour) correction: 0=No correction, 1= corrección usando la banda
de 940 nm (por defecto). Sentinel-2 solo tiene la b9 de 945 nm para hacer esta
corrección, que es la que se usará en la corrección.
11. Vis update mode: 0=Vis (visibility) constante o 1=Vis variable (por defecto).
12. WV watermask: 0=not replaced, 1=land-average, 2=line-average. Se elige qué
valores de WV aplicar a los píxeles de agua. 1= Average water vapour value of land
pixels is assigned to water pixels y 2= Line average of WV of land pixels is assigned to
water pixels. Elegimos 2, que se supone que es más preciso.
13. Cirrus correction: Detection of thin cirrus for atmospheric correction, que usará la
b10. Si no se quiere hacer aplicar FALSE, si no TRUE. Elegimos TRUE.
14. DEM terrain correction: TRUE si se quiere hacer la corrección topográfica.
15. BRDF_Correction: Elegimos 0 de momento (que no la haga) (lo recomendado es 21
pero lleva un día de cálculo. La BRDF (Bidirectional Reflectance Distribution Function)
o “Función de distribución de reflectancia bidireccional” describe la dependencia
direccional de la energía reflejada en la cubierta como una función de la geometría
de iluminación y de vista, así como de la longitud de onda. Debemos conocer la BRDF
para corregir la reflectancia de los efectos angulares de vista e iluminación (factores
externos).

24
16. BRDF lower bound: g=Lower boundary of BRDF correction factor, recommended
between 0.2 and 0.25. Por defecto pone 0.22. Si no la hace no lo aplica.
17. Adjacency range: Range of adjacency effect (reflected radiation from neighbourhood)
in [km]. Por defecto 1.0.
18. Visibility: entre 5-120 km. Por defecto es 40.0 (km).
19. Altitude: Assumed altitude if no DEM is present [km]. Por defecto 0.10=100 m.
20. Smooth WV map: Smooth water vapour map (m). Por defecto es 100 m.
21. WV threshold cirrus: Water Vapour threshold to switch cirrus algorithm off [%]. Por
defecto es 0.25. Pero si no se hace la corrección de cirrus no lo aplica.
22. Database compression level: 0 (mayor velocidad).

Figura 3.2 (d): Parámetros Sen2Cor relativos a la atmósfera, visibilidad, DEM, etc.

23. Workflow: l2a


24. IDP SC name: Sen2Cor
25. IDP SC versión: 02.11.00 (nos fijamos que la versión de Sen2Cor es correcta).
26. Baseline version: 02.11

Figura 3.2 (e): Parámetros Sen2Cor finales que muestran la versión a usar.

La configuración del proceso de corrección ATCOR se indica en un fichero GIPP (Ground


Image Processing Parameter), fichero de configuración en formato XML en el que se
incluyen los valores de los parámetros a utilizar en la corrección. Si no se indica ningún
fichero, se utilizará el fichero por defecto, que es el fichero L2A_GIPP.xml localizado en

25
sen2cor\2.11\cfg. Este fichero también puede ser configurado por el usuario para
modificar los valores por defecto utilizados en la corrección. Al realizar el proceso el
fichero será renombrado a S2A_USER_GIP_L2A_TL_<TILE_ID> y copiado en la carpeta
AUX_DATA dentro de GRANULE (en la carpeta de la imagen L2A) para la documentación.

Durante el proceso se leen de la imagen de entrada los Metadata como los ángulos de
incidencia, los valores de calidad y los datos ECMWF (AUX_ECMWT) de
GRANULE/AUX_DATA, como contenido en vapor de agua total (W), la presión
atmosférica media a nivel del mar (Pa) y la columna de ozono Dobson total. La imagen
de salida tendrá grabados también sus Metadata.

Como ya comentamos, la primera vez que usemos Sen2Cor (o una nueva versión) nos
avisa de que no existe el path ni el directorio para esa versión (Figura 3.3) y que
descargue/instale su bundle (paquete .zip de archivos; Figura 3.4).

Figura 3.3: Aviso de que no existe el path ni el directorio de la versión 2.11 de Sen2Cor.

Figura 3.4: Aviso de que existe un bundle del Sen2Cor 2.11 para descargarlo e instalarlo.

La descarga del bundle se hace de forma remota (Figura 3.5) y al final se indica dónde
se ha instalado (Figura 3.6).

26
Figura 3.5: Descarga del bundle de forma remota.

Figura 3.6: Indicación de dónde se ha instalado el bundle.

Hecho todo lo anterior, en la carpeta sen2cor se crean las carpetas dem y log que
faltaban (Figura 3.7). En dem\srtm se meterá el DEM usado.

Figura 3.7: Carpetas y subcarpetas en Documentos (sen2cor\2.11 →cfg, dem, log; y en


dem→srtm).

Terminado el proceso se crea la imagen corregida en la carpeta que empieza por


S2A_MSIL2A (con fecha y hora final en la que haya terminado el procesamiento) y la
imagen .xml que crea dentro es MTD_MSI2A. Fijarse en que si hacemos la de 20 m y
luego la de 10 m, por ejemplo, el nombre de la carpeta y el fichero no cambian y si
abrimos MTD_MSI2A guarda la última (10 m), por eso si quiero salvar las dos debo
renombrar la carpeta añadiendo -20m (-10m) o guardarlas a posteriori con este añadido
de la resolución pero con el formato .dim de SNAP (mejor incluso como sufijo -20m-
Sen2Cor_v2-11 para saber además la versión usada de Sen2Cor). De todas formas, en
Analysis→Information siempre sabré si estoy en la corregida de 20 m (5490 píxeles en

27
las bandas VIS, por ejemplo) o en la de 10 m (10980 píxeles) aunque el fichero dentro
de la carpeta (si renombro la carpeta) se llame en ambos MTD_MSI2A. Fijarse también
que en la imagen corregida de 20 m se eliminan las bandas b8 y b10 (es decir, quedan
11 de las 13 bandas). Pero las bandas b1 y b9 no están a 20 m, sino a 60m.

A partir de ahora en estas prácticas seguiremos con la imagen corregida de atmósfera


y topografía (con el MDT de 90 m) de 20 m (aunque hayamos hecho la de 10 m), para
que el proceso de cálculo no sea excesivo.

Hecha la corrección ATCOR nos fijamos que parece que es correcta, es decir, que
desaparece el exceso azul de los espectros de las distintas cubiertas y que se aprecia
el aplanamiento de la superficie. La disminución de la reflectancia en el visible-VRE
también se puede observar en las nuevas curvas espectrales que hacemos de los pines
(cubiertas) que habíamos usado en la imagen L1C (y que transferimos a la imagen L2A),
así como en la reflectancia media en los canales VIS-VRE (señalados en rojo) en la
estadística de la imagen L2A corregida (Tabla 3.1):

ρ mínima ρ máxima ρ media σ (Desv. Típica) P90 th.


Banda 1 1E-4 0.8992 0.0327 0.0222 0.0513
Banda 2=blue 1E-4 1.8118 0.0316 0.0266 0.0545
Banda 3=green 1E-4 1.7101 0.0485 0.0291 0.0767
Banda 4=red 1E-4 1.6419 0.0484 0.0349 0.0880
Banda 5=VRE 1E-4 1.6204 0.0810 0.0406 0.1256
Banda 6=VRE 1E-4 1.6073 0.1506 0.0661 0.2220
Banda 7=VRE 1E-4 1.5960 0.1737 0.0773 0.2591
Banda 1E-4 1.5783 0.1950 0.0863 0.2899
8A=NNIR
Banda 9=WV 1E-4 1.4178 0.1995 0.0809 0.2833
Banda 1E-4 1.5198 0.1522 0.0754 0.2453
11=SWIR
Banda 1E-4 1.5113 0.0955 0.0577 0.1743
12=SWIR
Tabla 3.1: Estadística para la imagen del 22 de octubre de 2017 corregida (BOA: L2A).

Por último, fijarse en los ficheros “S2A….._report.xml” obtenidos dentro de la carpeta


sen2cor\2.11\log (Figura 3.7), donde pueden verse los parámetros que ha usado
Sen2Cor donde hemos puesto que los calculase automáticamente y los comentarios
añadidos. Estos ficheros pueden abrirse con WordPad, por ejemplo, para buscar dentro
del fichero los datos que me interesan (usando las palabras en negrita a continuación,
para más rapidez), resumidos continuación:

1. Aerosol Type: RURAL


2. Mid_Latitude: WINTER

28
setMidLatitude. Mid latitude set to WINTER according to area and data.

L2A_AtmCorr: standard model is: WINTER RURAL

3. Center of latitude is: 41. Day of year is: 295.


4. setOzoneContentFromMetadata. Ozone mean value is: 285.915.
Ozone_Content: 285.915 DU. Este es el valor de ozono (2.86 mm de espesor) que
obtiene del archivo AUX de la imagen, pero luego elige el más próximo a éste de las
opciones mostradas si se seleccionase una de ellas. Los pasos son: 1-Obtiene O3 de los
metadatos: 285.915 DU. 2-Busca en la lista de valores de O3 el valor más próximo, que
es el u-290 (Ozone_Content is set to u with 4.084984 least difference to input value;
285.915+4.085=290.000) y 3-Genera el archivo de datos atmosféricos para la corrección
usando “u-290” (generated file name for look up tables is: u99000_wv04_rura.atm).

NOTA: En versions anteriores de Sen2Cor aparecían también estos datos:


Average visibility: 69.4 km
Average ground elevation [km] = 0.42

El vapor de agua y el ozono aparecen como imágenes en la capa Tie-Point Grids, que
contiene 3 capas:
tco3: Total column water vapour at surface provided by ECMWF, 9x9-->5400 pixeles (kg
m**-2). Haciendo la estadística de esta imagen vemos que el rango de valores va entre
11.1898 y 15.9632, con un valor medio de 13.7080 kg/m2 = 0.00137 kg/cm2 = 1.37 cm.
tcwv: Total column ozone at surface provided by ECMWF, 9x9-->5400 pixeles (kg m**-
2). El rango de valores va entre 0.00611 y 0.00613, con un valor medio de 0.00612 kg/m2
= 0.000612 cm = 0.0612 mm.
msl: Mean sea level pressure at surface provided by ECMWF, 9x9-->5400 pixeles (Pa). El
rango de valores va entre 103035.8125 y 103108.6797, con un valor medio de
103071.6678 Pa = 10510.385 kg/m2 = 1051.0385 cm = 105.104 m.
En la imagen L1C estas tres capas tienen una resolución de 10 m (10980x10980
píxeles), mientras que en la L2A es de 20 m (5490x5490 píxeles).

Por último, nos fijamos en la nueva capa Index Codings que se crea en la imagen
corregida, dentro de la cual la capa “quality_scene_classification” nos muestra los
valores dados a las distintas clases que se han creado en la imagen. También nos fijamos
en las capas quality que se crean en Bands (con imágenes de AOT (Aerosol Optical
Thickness, espesor óptico de aerosoles), WVP (water vapour pressure), nubes, nieve y
una clasificación de la imagen). Y en las nuevas capas creadas en Masks dentro de la
capa “scl” que corresponden a las distintas clases resultantes de la clasificación realizada
y cuyos códigos hemos visto anteriormente. Abramos estas máscaras como hacemos
con una banda para ver su utilidad.

TAREA: Corregir también la imagen del 13 de agosto de 2017 (post-incendio) a 20 m.

29
3.2. Conversión a parámetros físicos
Las imágenes Sentinel-2 ya están en valores de reflectividad y podemos trabajar
directamente con ellas en la mayoría de los procesos de Teledetección. Sin embargo, en
algunos casos podemos necesitar las imágenes en radiancia (W m-2 sr-1 µm-1), por
ejemplo, para realizar nuestros propios modelos de corrección topográfica, etc. Para
ello, seleccionamos la imagen L1C (porque la imagen de entrada ha de ser la TOA; ver la
ayuda de SNAP) y vamos a Optical→Preprocessing→Reflectance to Radiance (Figura
3.8).

En la pestaña I/O Parameters seleccionamos la imagen de entrada (L1C), la de salida (a


la que añadimos _radiancia o dejamos _refl2rad, que es lo que añade por defecto)
(Figura 3.8) y en la pestaña Processing Parameters podemos dejar todo por defecto
(Figura 3.9). Los datos solares y el de U (ver su relación con la distancia Tierra-Sol, que
llamamos D o d2 en la teoría) se toman de los metadatos, siempre que sea una imagen
Sentinel-2 (si no, han de indicarse), como se ve en la Figura 3.9.

Figura 3.8: Proceso para la conversión de reflectancia (ρ) a radiancia (L) para cada
banda de la imagen. Selección de la imagen de entrada y salida (con _radiancia).

30
Figura 3.9: Pestaña Processing Parameters. Los valores de Eo, U y cos V (cos i) se toman
de los metadatos siempre que sea una imagen Sentinel-2 (si no lo es, hay que indicar
estos valores). En el caso de una imagen S2 solo se muestra el valor de U.

Veamos la información de las bandas de salida y los valores en Pixel Info (Figura 3.10):

Figura 3.10: Valor de radiancia en un píxel de vegetación de la banda 8 (NIR) del S-2.
Fijarse en que las unidades de la radiancia son W m-2 sr-1 µm-1.

Si queremos seguir con esta imagen en valores de radiancia habría que corregirla de
ATCOR a continuación, lo cual no vamos a hacer, ya que, en nuestro caso, volveremos a
la imagen en valores de reflectancia BOA (corregida de A y T, ATCOR, con Sen2Cor).

31
TAREA:

a) Fórmula para obtener la radiancia espectral (Lλ) de la reflectividad espectral (ρλ):

b) Correspondencia entre U y D (o “d” en algunos textos):

c) Valores de la irradiancia solar (Eo) para cada una de las bandas (ópticas) del S-2:

Bandas Eo (W m-2 µm-1 = mW m-2 nm-1)


b1
b2 (B)
b3 (G)
b4 (R)
b5 (R Edge)
b6 (R Edge)
b7 (R Edge)
b8 (NIR)
b8A (NNIR)
b9
b10
b11 (SWIR)
b12 (SWIR)

d) Valores del ángulo vertical del Sol (V) y del cosV:

V=

cosV=

32
4. Realces y mejoras en la imagen
4.1. Ajuste del contraste
Abrimos una banda en colores de gris, por ejemplo, la b8A. Entonces, en View→Tool
Windows→Colour Manipulation (o en el icono correspondiente que se muestra
activando View→Toolbars→Tool Windows), obtenemos la ventana Colour
Manipulation donde aparecen varias opciones de visualización y varios botones.
Empezando por los botones superiores, en el botón Basic podemos ver el mínimo y
máximo aplicado actualmente a la visualización de la banda y dándole a Range from
Data toma el mínimo y máximo de la banda (Figura 4.1), lo que sería una Expansión
lineal tomando el valor (en este caso de reflectividad, ρ) mínimo y máximo de la banda
(lo que se conoce también como normalización (lineal) del histograma). También se
pueden elegir diferentes esquemas (scheme) y paletas (palette) de color (pseudocolor)
con las flechas, así como como tomarlas de un fichero (.cpd), salvar la que se elija a un
fichero, aplicarla al resto de bandas y Reset to defaults.

Figura 4.1: Expansión lineal tomando la ρ mínima y máxima de la banda 8A (NNIR).

En Sliders se muestra el mínimo y máximo de la banda (de la estadística), el histograma


correspondiente y la representación gráfica de la CLUT entre ρ-NV, donde por defecto
se muestra un ajuste lineal, y el color (de negro a blanco) aplicado al mínimo (negro),
intermedio (gris) y máximo (blanco) valor de la imagen. Moviendo las flechas inferiores
correspondientes a estos valores, realcemos las zonas del puerto y las mejilloneras

33
(bateas) gallegas (Figura 4.2); y las zonas quemadas, por ejemplo. Con ello estamos
aplicando una Expansión lineal con la ρ mínima y máxima ajustada a la cubierta que
queremos realzar. Los valores se pueden introducir como texto dando clic en ellos.

Figura 4.2: Expansión lineal con la ρ mínima y máxima ajustada a las mejilloneras.

Los iconos de la derecha 2σ/3σ aplican una Expansión lineal por percentiles quedándose
con el 95.45% / 99,73% de los píxeles y eliminando los de las colas. Y abajo, en More
Options, en No-data colour podemos cambiar el valor del No data, en Histogram
matching podemos elegir Equalize (Ecualización del histograma) o Normalize, así como
cambiar el valor de Gamma non-linearity (con γ=1 la relación ρ-NV es lineal, con γ<1 es
una curva convexa, saturando los valores de ρ más altos, y realzando por lo tanto los
valores bajos-intermedios, y con γ>1 la relación es una curva cóncava, dando mayor peso
a los valores de intermedio-mayor ρ. Una explicación gráfica puede verse en
https://www.mathworks.com/help/images/gamma-correction.html. En una composición
RGB se puede contrastar cada banda de forma diferente. En la ayuda de SNAP indica
que un valor de γ=0.7 en el canal azul realza la mayoría de las composiciones RGB
(comprobadlo; Figura 4.3).

Figura 4.3: Ajuste del contraste para una composición RGB=432 (color natural),
mostrando la banda azul (Blue), a la que se le ha aplicado un γ=0.7.

34
En Table (volviendo a la banda B8A, porque no aparece con un RGB) se muestra una
tabla con los tres colores negro-gris-blanco y sus correspondientes valores mínimo-
medio-máximo. Se pueden cambiar los colores/valores haciendo clic en ellos.

Probad con otras bandas, una del visible (VIS) y otra del SWIR, por ejemplo. Fijarse que
en las bandas con histogramas con largas colas (VIS) funciona mejor la expansión lineal
y peor la ecualización del histograma.

En More Options puede aparecer la opción Discrete colours (útil para valores de T, por
ejemplo) para hacer una paleta de color para un mapa y elegir el rango de valores de T
para cada color. Ver la ayuda de SNAP para más detalles (en el icono de interrogación
dentro de la ventana Colour Manipulation).

4.2. Aplicación de filtros


Escojo una banda, por ejemplo, ahora la b4 (roja), y nos acercamos a algún puerto o
ciudad haciendo zoom y realzamos el contraste como hemos visto en el apartado
anterior hasta que veamos bien el detalle de líneas, casas, carreteras, etc. (por ejemplo,
con 3σ). Seleccionada la banda damos al botón derecho del ratón y activamos Filtered
Band para aplicar un filtro sobre la banda (Figura 4.4).

Figura 4.4: Aplicación de filtros sobre la banda b4.

35
Los filtros que tiene SNAP están en distintas categorías: Detect Lines, Detect Gradients
(Emboss), Smooth and Blurr, Sharpen, Enhance Discontinuities, Non-Linear Filters y
Morphological Filters. Probemos con al menos uno de cada categoría (podemos
prescindir de los Morphological Filters que son para imágenes binarias) y con distinto
tamaño del kernel (3x3, 5x5, etc.) para ver el efecto de cada uno. Hacedlos primero y
luego comparad, por ejemplo, la zona de la Figura 4.4 (porque al hacer cada imagen
filtrada se pierde el zoom; se sincronizan luego en Navigation, como ya vimos).

Fijarse que las bandas filtradas las va almacenando como capas, que podemos guardar
o no. Y que eligiendo una de las filtradas podemos aplicar otro filtro sobre ella, es decir,
aplicar varios filtros sucesivamente. También es posible aplicar un mismo filtro de forma
sucesiva modificando la opción Number of iterations de la ventana Create Filtered Band.
Por ejemplo, en el caso de un filtro con 2 iteraciones, se aplicaría el filtro a la imagen de
entrada y a continuación se aplicaría de nuevo el filtro a la imagen ya filtrada. La
aplicación sucesiva de filtros suele realizarse principalmente en el caso de filtros
morfológicos.

Existe también la opción de que el usuario realice sus propios filtros, en la pestaña User.
Entonces, con el signo + a la derecha se crea un nuevo filtro (con el signo – se borra) y
se edita y salva con los iconos debajo de los signos. Al editarlo se abre la ventana Image
Filter donde en la pestaña Filter Properties se puede indicar el tipo de operación
(convolución, media, máximo, etc.), el nombre del filtro y su sufijo para añadir a la
banda, el tipo de filtro y el factor a dividir cada valor del kernel. Y en la otra pestaña Filter
Kernel se le puede dar tamaño al kernel (3x3, 5x5, etc.) en W-H y rellenar sus valores con
Fill. Fijarse que los valores del desplegable de Fill varían entre -5.0 y 5.0, pero que
también es posible introducir por teclado otros valores distintos en caso de ser
necesario, por ejemplo, para los filtros direccionales. Hagamos por ejemplo los
direccionales SW-NE y NW-SE (5x5) (Figura 4.5) mediante convolución (CONVOLVE).

Figura 4.5: Filtro direccional NW-SE


36
Usemos esta opción User para hacer también, por ejemplo, el filtro Arithmetic Mean 9x9
mediante convolución (CONVOLVE; aunque en este caso se podría usar también MEAN):

Figura 4.5: Filtro de media 9x9

Hagamos también los filtros de pendiente X y pendiente Y (filtros para operaciones


matemáticas) para aplicarlos sobre el MDE de 90 m empleado en la corrección
topográfica (que lo habremos copiado previamente a nuestro directorio, dejándolo
como estaba en la carpeta sen2cor). El filtro de pendiente X_90 m se muestra en la
Figura 4.6 y el de pendiente Y_90 m en la Figura 4.7:

Figura 4.6: Filtro de Pendiente X (8 vecinos) para un MDE de 90 m.

37
Figura 4.7: Filtro de Pendiente Y (8 vecinos) para un MDE de 90 m.

CUIDADO: SNAP no hace bien los filtros px y py, los signos salen cambiados. Así que
haced, con una operación matemática px_90m_correcto y py_90m_correcto y salvad el
MDE de 90 m y sus pendientes como capas (srtm_35_04-con_pendientes).

Haced también las pendientes para un MDE de 20 m de resolución espacial (que es el


proporcionado en las prácticas; es remuestreado del MDT de 25 m del IGN para Galicia;
de todas formas, el proceso de descarga y remuestreo se muestra en el cuadro de abajo,
Tabla 4.1). Para el MDE de 20 m, hay que fijarse en que el valor a dividir es 3x2x20=120.

Salvad todos los filtros: px_90m, py_90m, px-20m y py-20m. Aplicadlos sobre los MDE
correspondientes, visualizad el resultado y en Pixel Info observad si los valores obtenidos
al moverse sobre la banda resultante son adecuados.

Para obtener la pendiente total habría que hacerlo con la operación matemática:
pendiente = �(𝑝𝑝𝑝𝑝)2 + (𝑝𝑝𝑝𝑝)2 (Apartado 5.2, donde se ven las operaciones
matemáticas). Para el caso del MDE de 90 m sería:

Figura 4.8: Cálculo de la pendiente con Band Maths


38
Obtención del MDT de 20 m:

1) Ir a la web del Centro de Descargas del IGN (http://centrodedescargas.cnig.es) y


hacer clic en “Modelos Digitales de Elevaciones” para ver los modelos disponibles.
De los modelos disponibles elegir el de 25 m de resolución espacial (MDT25), que
es el que tiene una resolución más similar a la de la imagen Sentinel 2 corregida de
atmósfera y topografía (20 m).
----------------------------------------------------------------------------------------------------------------
2) Buscar las hojas correspondientes a Galicia y descargarlas en el huso 29, que es el
huso en el que está georreferenciada la imagen. Las hojas están disponibles para
descarga solamente en el formato ASCII Grid de ESRI (ARC). Dado que no es posible
abrir este formato en SNAP, es necesario convertir las hojas a otro formato de
imagen que pueda leer SNAP, como es el formato GeoTIFF. En este caso se utiliza
QGIS para realizar la conversión de formato. Se abren en QGIS las hojas en formato
ARC y se exportan a formato GeoTIFF.
----------------------------------------------------------------------------------------------------------------
3) Realizar un mosaico con todas las hojas para obtener un único MDT a 25 m. Se
puede hacer con software comercial (Global Mapper, ENVI, etc.) o libre (SNAP,
QGIS, etc.). Para realizar el mosaico en SNAP se utiliza la herramienta
RasterGeometric Mosaicking.
----------------------------------------------------------------------------------------------------------------
4) Remuestrear el MDT de 25 m a 20 m. Se puede hacer dentro de SNAP en
Raster→Geometric→Resampling usando convolución cúbica (Bicubic) como
método de remuestreo.

----------------------------------------------------------------------------------------------------------------
5) Para usar el MDT-20m en conjunto con la imagen Sentinel-2 (20 m) hay que alinear
los píxeles con los de ésta, utilizando la herramienta Raster→Geometric
→Collocation. Para utilizar esta herramienta es necesario que todas las bandas de
la imagen tengan la misma resolución espacial. Las bandas de reflectividad de la
imagen Sentinel corregida de atmósfera y topografía tienen una resolución
espacial de 20 m, pero en esta imagen también hay otras bandas de menor
resolución espacial, como es el caso de las bandas de datos solares. Por lo tanto,
para usar la herramienta Collocation será necesario remuestrar previamente la
imagen a 20 m utilizando de nuevo la herramienta Raster→Geometric

39
→Resampling. Como método de remuestreo se utilizará de nuevo convolución
cúbica (Bicubic). Esto es porque remuestrea bandas que no son bandas espectrales
(porque si se remuestreasen bandas espectrales se usaría el método del vecino
más cercano en el remuestreo, para distorsionar menos el valor de la
reflectancia). Una vez remuestreada la imagen, se realiza la alineación de los
píxeles del MDT-20m usando también convolución cúbica:

Notar que el remuestreo realizado en el paso 4 y la alineación de los píxeles realizada


en el paso 5 se podrían hacer en un único paso utilizando la herramienta
Raster→Geometric →Collocation, ya que ésta también permite remuestrear. En este
caso se ha realizado en dos pasos para obtener el MDT de 20 m para toda Galicia, y
no solo para la zona de solape con la imagen Sentinel.

4.3. Composiciones en color (RGB): bandas originales y OIF


Ya hemos visto cómo hacer diferentes composiciones RGB en el Apartado 2.1. Ahora el
objetivo es buscar la mejor composición RGB que lleve la mayor información de toda la
escena para visualizar en conjunto sus características generales. Esto se hace calculando
el OIF de las tres bandas que irán en la composición:

donde σk es la desviación típica de cada


∑𝑘𝑘=1,3 σ𝑘𝑘 banda de la composición y ri,j el
𝑂𝑂𝑂𝑂𝑂𝑂 = coeficiente de correlación entre cada dos
∑𝑖𝑖,𝑗𝑗=1,3�𝑟𝑟𝑖𝑖,𝑗𝑗 � de esas bandas.

40
OIF que, como vemos, depende de la desviación típica de cada banda (σ o s) y del
coeficiente de correlación (ri,j) entre cada dos de ellas (i y j). La desviación típica de cada
banda la podemos ver en la estadística calculada para cada una en el Apartado 3.1. El
coeficiente de correlación de Pearson entre dos bandas no es posible obtenerlo usando
las herramientas de la interfaz gráfica de SNAP 9.0, pero se puede calcular a través de la
línea de comandos de SNAP, usando la librería de SNAP para Pyhton “snappy” y la
librería de cálculo numérico “numpy”:

1.- Se abre la línea de comandos de SNAP “SNAP Command-Line”

2.- Se modifican los 3 argumentos señalados en azul del código siguiente (directorio con
la imagen Sentinel-2 de 20 m corregida de atmósfera y topografía y nombre de las dos
bandas). Se ejecuta el código en la ventana de comandos (se puede copiar el texto del
informe y pegarlo directamente en la ventana de comandos). Ver NOTAS abajo.

# Abrir Python
python

# Importar las librerias numpy y snappy


import numpy as np
from snappy import ProductIO

# Definir las variables de entrada (‘ es el de debajo de la ?)


image = ‘C:\Users\carme\Documents\Docencia\SNAP-
ESA\S2A_MSIL2A_20171022T112121_N0205_R037_T29TNG_20171022T112802
-20m.SAFE\MTD_MSIL2A.xml’
b1name = ‘B8A’
b2name = ‘B11’

# Abrir la imagen de Sentinel-2 de 20 m corregida de atmosfera y


topografia
s2 = ProductIO.readProduct(image)

# Ver el nombre de las bandas de la imagen


list(s2.getBandNames())

# Seleccionar dos bandas de la imagen con la misma resolucion


espacial
b1 = s2.getBand(b1name)
b2 = s2.getBand(b2name)

41
# Determinar las dimensiones de la imagen
h = s2.getSceneRasterHeight()
w = s2.getSceneRasterWidth()

# Generar dos matrices con los valores de las bandas


arr1 = np.zeros((w,h), dtype=np.float32)
arr2 = np.zeros((w,h), dtype=np.float32)
arrb1 = b1.readPixels(0, 0, w, h, arr1).reshape(1,w*h)
arrb2 = b2.readPixels(0, 0, w, h, arr2).reshape(1,w*h)

# Calcular y mostrar el coeficiente de correlacion de Pearson


r = round(np.corrcoef(arrb1, arrb2)[0, 1],4)

print ‘r Pearson entre las bandas ‘ + b1name + ‘ y ’ + b2name +


‘: ‘ + str(r)

NOTAS:

A. Si no encuentra Python hay que editar las variables de entorno del sistema en
nuestro PC (en propiedades del sistema) y añadir en Path una Nueva ruta:
C:\Python36.
B. Si no está bien configurado para que SNAP reconozca Python o quiero usar otra
versión de Python que la que estaba configurada con SNAP, lo configuro de nuevo:
snappy-conf C:\Python36\pythonw.exe

C. Generalmente, “numpy” y “pip” las tiene Python por defecto entre las
librerías/paquetes de Ptyhon en: C:\Python36\Lib\site-packages (y las que
metamos nuevas tienen que ir a esta misma carpeta). Si entramos en la línea de
comandos de Windows (ir a Ejecutar, se pone cmd y se da a Enter) podemos usar
también “pip” para cargar otras librerías usuales, por ejemplo, si tuviéramos “pip”
pero no “numpy”, pondríamos en C:\Users\carme:
python -m pip install numpy
Y para ver las librerías/paquetes instalados:
python -m pip list
Y para desinstalar alguno que no queramos:
python -m pip uninstall …….
D. Si no tenemos ni “pip” y/o lo anterior no funciona para “numpy”: En
https://www.lfd.uci.edu/~gohlke/pythonlibs/ descargamos las versiones de
Windows de pip y numpy+mkl (son ficheros .whl; y pip es necesario para descargar
los ficheros .whl). Luego ir a Ejecutar en Windows (cmd y darle a Enter) y ponemos:

42
cd C:\Users\carme\Documents\Software\Paquetes_Python (o la carpeta donde
estén los .whl)
python -m pip install numpy

E. La librería “snappy” es especial de SNAP, al realizar la configuración del apartado B,


la crea en C:\Users\carme\.snap\snap-python y debemos pegarla directamente en
donde están las librerías/paquetes de Python para poder usarla (ya no habría que
instalarla).

3.- Se obtiene el coeficiente de correlación lineal en la última fila, que en el caso de las
bandas B8A y B11 es 0.6305:

La visualización gráfica de la correlación entre cada dos bandas se puede obtener en


Analysis→Scatter Plot eligiendo las bandas a poner en el eje x e y. Las opciones gráficas
de esta ventana son similares a las de la ventana del histograma. Observamos cómo las
bandas del visible (VIS=2, 3 y 4) están muy correlacionadas entre sí y, por lo tanto, no
conviene usar dos de ellas en la misma composición (para el objetivo que buscamos en
este apartado), la cual tendría un OIF muy bajo. Lo mismo ocurre con las bandas SWIR
(11 y 12). Así, la mejor composición es la que tiene una banda de cada región espectral
diferente (VIS-NIR-SWIR, por ejemplo). Probemos también con las bandas Red Edge (5,
6 y 7). Cubramos la siguiente la Tabla 4.1 para algunas composiciones:

Bandas RGB Desv. típicas Coef. Correl. (r) OIF


σ (8A) = 0.0869 r (8A,11) = 0.6302
8A-11-4 σ (11) = 0.0757 r (8A,4) = 0.348 0.115
σ (4) = 0.0356 r (11,4) = 0.7501
σ (8A) = 0.0869 r (8A,12) = 0.4208
8A-12-2 σ (12) = 0.0576 r (8A,2) = 0.1396 0.154
σ (2) = 0.0274 r (12,2) = 0.5535

43
σ (8A) = 0.0869 r (8A,11) = 0.6302
8A-11-5 σ (11) = 0.0757 r (8A,5) = 0.6654 0.094
σ (5) = 0.041 r (11,5) = 0.8729
σ (8A) = 0.0869 r (8A,12) = 0.4208
8A-12-7 σ (12) = 0.0576 r (8A,7) = 0.9916 0.121
σ (7) = 0.0779 r (12,7) = 0.4225
Tabla 4.1: Diferentes composiciones de bandas y cálculo del OIF.

Fijarse también en la diferencia visual entre 8A-12-2, 8A-12-3 y 8A-12-4 (en el mar, zonas
quemadas, etc.).

44
5. Transformaciones en la imagen
5.1. Transformación RGB a HSV (Hue, Saturation, Value)
Para realizarla se opera de forma similar a como realizamos una composición RGB en el
Apartado 2.1, es decir, seleccionamos la imagen y elegimos en la pestaña Window del
menú principal la opción Open HSV Image Window; o bien, en Product Explorer le
damos al botón derecho del ratón para que salga directamente Open HSV Image
Window. En la ventana que sale en ambos casos, Select HSV-Image Channels,
introducimos en cada canal Hue, Saturation and Value una banda. Por ejemplo,
probemos con las bandas con las que se realiza el RGB de color real (4-3-2), o el de falso
color (8A-4-3) o el que resaltaba las zonas quemadas en azul (8A-11-12) y veamos la
diferencia en ver el RGB o el HSV correspondiente. También intercambiar las bandas
para los distintos canales HSV, por ejemplo 12-11-8A (Figura 5.1).

Figura 5.1: Transformación HSV donde se observan los incendios en color oscuro

Aunque el paso de RBG a HSV es una transformación, en realidad tiene que ver con el
realce y mejora de la imagen para su visualización.

5.2. Índices de vegetación (y de suelo y agua)


La realización de índices espectrales es una de las operaciones fundamentales en la
mayoría de las aplicaciones de Teledetección. SNAP tiene índices por defecto tanto de
vegetación (los más utilizados) como de suelo y agua. Los tres tipos de índices pueden
encontrarse en Optical→Thematic Land Processing→Vegetation Radiometric Indices
(para el caso de la vegetación) o bien en Soil Radiometric Indices (para el suelo) o Water
Radiometric Indices (para el agua). Empecemos por los índices de vegetación.

45
Observemos los 21 índices de vegetación que tiene SNAP por defecto y busquemos en
la ayuda de SNAP su acrónimo, nombre completo, su fórmula, descripción breve y sus
flags asociados. Por ejemplo:

𝑁𝑁𝑁𝑁𝑁𝑁−𝑅𝑅𝑅𝑅𝑅𝑅 𝐵𝐵8𝐴𝐴−𝐵𝐵4
NDVI= Normalized Difference Vegetation Index: NDVI= 𝑁𝑁𝑁𝑁𝑁𝑁+𝑅𝑅𝑅𝑅𝑅𝑅 =
𝐵𝐵8𝐴𝐴+𝐵𝐵4

“The Normalized Difference Vegetation Index algorithms exploit the strength and the vitality of
the vegetation on the earth's surface……..The NDVI composes a measurement for the
photosynthetic activity and is strongly in correlation with density and vitality of the
vegetation…..”

The NDVI results from the following equation:

NDVI = (IR_factor * near_IR - red_factor * red) / (IR_factor * near_IR + red_factor * red)

El NDVI usual es con IR_factor=1 y red_factor=1.

NDVI-Flags: consultar los valores de la capa ndvi_flags que se crea con la imagen ndvi: 0-cálculo
correcto, 1-Bit 0 (20=1)-fallo aritmético, 2-Bit 1 (21=2)-NDVI demasiado bajo (agua); 4-Bit 2
(22=4)-NDVI demasiado alto (saturación). Figura 5.2.

Figura 5.2: NDVI (contrastado) de la imagen posterior al incendio (izquierda) y capa


ndvi_flags para una zona de agua (con valor 2, por ser el NDVI negativo).

---------------------------------------

𝑅𝑅𝑅𝑅𝑅𝑅 𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸5−𝑅𝑅𝑅𝑅𝑅𝑅 𝐵𝐵5−𝐵𝐵4


NDI45= Normalized Difference Index: NDI45= 𝑅𝑅𝑅𝑅𝑅𝑅 𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸5+𝑅𝑅𝑅𝑅𝑅𝑅 = 𝐵𝐵5+𝐵𝐵4

“The Normalized Difference Index algorithm is more linear, with less saturation at higher values
than the NDVI. Some algorithms have already been presented in work by Delegido et al. (2011b)
which specifically investigated the optimal bands to use in the NDVI formula with synthesised
Sentinel-2 data. Research found that bands 4 and 5 were the optimal combination.”

46
NDI45 = (IR_factor * near_IR - red_factor * red) / (IR_factor * near_IR + red_factor * red)
Lo usual es con IR_factor=1 y red_factor=1.
NDI45-Flags: consultar los valores de la capa ndi45_flags que se crea con la imagen ndi45: 0-
cálculo correcto, 1-Bit 0 (20=1)-fallo aritmético, 2-Bit 1 (21=2)-NDVI demasiado bajo (agua); 4-Bit
2 (22=4)-NDVI demasiado alto (saturación).

--------------------------------------------

𝑅𝑅𝑅𝑅𝑅𝑅 𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸7−𝑅𝑅𝑅𝑅𝑅𝑅
IRECI= Inverted Red-Edge Chlorophyll Index; IRECI= 𝑅𝑅𝑅𝑅𝑅𝑅 𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸5/ 𝑅𝑅𝑅𝑅𝑅𝑅 𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸6 =
𝐵𝐵7−𝐵𝐵4
𝐵𝐵5/𝐵𝐵6

“The Inverted Red-Edge Chlorophyll Index algorithm incorporates the reflectance in four bands
to estimate canopy chlorophyll content (Guyot and Baret, 1988; Clevers et al., 2000) …..
Increases in the amount of chlorophyll visible to the sensor, either through an increase in leaf
chlorophyll content, or Leaf Area Index (LAI), result in a broadening of a major chlorophyll
absorption feature centred around 680 nm.
The effect is to cause a movement of the point of maximum slope, termed the red edge position
(REP).The position of the red edge has been used as an indicator of stress and senescence of
vegetation (Collins1978, Horler et al. 1983, Rock et al. 1988, Boochs et al. 1990, Jago and
Curran 1995)”

IRECI = (IR_factor * near_IR - red1_factor * red1) / (red2_factor * red2 / red3_factor * red3)


IRECI -Flags: iguales a los índices anteriores.
-----------------------------------

Como ejemplos, hacemos el NDVI, NDI45 e IRECI y los guardamos en la misma carpeta
donde tengamos el resto de las imágenes (ya que por defecto, lo mete en la última que
hayamos usado, así que lo cambiamos; nos fijamos que el nuevo producto .dim está
asociado a un .data). Nos fijamos que añade un sufijo con el acrónimo del índice al
nombre de la imagen, por ejemplo, _ndvi. Nos fijamos también en el nombre que da a
cada banda en la fórmula, que a veces no coincide con su definición usual (por ejemplo,
las Red Edge las llama o near_NIR o Red). Sin embargo, a la hora de realizar los índices
queda claro las bandas a usar consultando la ayuda de SNAP. También fijarse que para
hacer los índices hay que seleccionar la imagen con todas las bandas (porque a lo mejor
aparece seleccionado el índice que acabamos de hacer). Finalmente, para cada índice
nos fijamos en el valor de éste en las cubiertas básicas de vegetación (sana y quemada),
suelo y agua. Observamos que la capa ndvi_flags vista antes, que se crea como banda
debajo de cada índice en Bands, se asocia a unas máscaras, que podemos visualizar en
la imagen en distintos colores (que podemos cambiar) activando View→Tool
Windows→Mask Manager (o en el icono correspondiente). Veamos qué índice es mejor
para distinguir entre vegetación (sana y quemada), suelo y agua y genera mejores
máscaras.

47
Probemos con los 4 índices de suelo que tiene SNAP por defecto y veamos cuál es mejor
para distinguir los suelos (bi) y cuál para las zonas quemadas (bi2). Veamos también las
máscaras que tienen.

Por último, probemos con los 5 índices de agua de SNAP, cuyo objetivo es distinguir las
zonas de agua del resto de las cubiertas. Seleccionamos el mejor para distinguir los
embalses. El NDWI2=(Verde-NIR)/(Verde+NIR)=(B3-B8A)/(B3+B8A) parece el más
adecuado. Sobre este índice pongamos un umbral que elimine los valores del índice
negativos para quedarnos con las zonas de agua (que son positivas en este índice). Esto
se hace sobre la banda ndwi2 seleccionando con el botón derecho del ratón Band Maths
y haciendo ndwi2 ≥ 0. Con esta fórmula hacemos una máscara binaria (valores 0 y 1) con
valores 1 para ndwi2 ≥ 0. Figura 5.3.

Figura 5.3: NDWI2 de la imagen anterior al incendio (a la izquierda) y máscara de agua


realizada con ndwi2 ≥ 0

Otra forma de hacer índices que no estén incluidos en SNAP por defecto es usando
precisamente Band Maths, esta vez seleccionando la imagen sobre la queramos
aplicar el índice. Por ejemplo, en el Apartado 6 (Proyecto de Incendios) haremos los
índices de la Tabla 5.1, que se han visto adecuados para el estudio de las zonas
quemadas (y que requieren dos imágenes, la pre-incendio y la post-incendio):

Índice Acrónimo Fórmula Aplicación Sentinel-2


Normalized NBR 𝑁𝑁𝑁𝑁𝑁𝑁 − 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆 𝑏𝑏8(8𝐴𝐴) − 𝑏𝑏12
Burn Ratio 𝑁𝑁𝑁𝑁𝑁𝑁 + 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆 𝑏𝑏8(8𝐴𝐴) + 𝑏𝑏12
delta dNBR NBRpre-incendio- NBRpre-NBRpost
Normalized NBRpost-incendio
Burn Ratio
Relativized RBR 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑
Burn Ratio 𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁 + 1.001 𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁 + 1.001
Tabla 5.1: Índices usados para la cartografía de zonas quemadas.

48
5.3. Análisis de Componentes Principales (PCA=Principal Component Analysis)

Para realizar el análisis de componentes principales (PCA) vamos a Raster→Image


Analysis→Principal Component Analysis. En la primera pestaña de la ventana elegimos
la imagen de entrada (source product) y la de salida (target product; con el mismo
nombre que la de entrada pero le añade -pca) e indicamos que la guarde como .dim. en
el directorio donde están el resto de las imágenes (Figura 5.7). En la siguiente pestaña
seleccionamos como bandas de entrada todas las ópticas de 20 m (de la b1 a la b12,
exceptuando la b1 y la b9, en total 9 bandas) e indicamos que queremos obtener las 9
componentes principales (CP o PC) posibles (9 bandas, 9 PC) (dejando -1 en el número
máximo de componentes las calcula todas, las 9) y no aplicamos ninguna máscara
(Figura 5.8).

Figura 5.7: Pestaña I/O Parameters del PCA, donde se seleccionan las imágenes de
entrada y salida.

Figura 5.8: Pestaña Processing Parameters del PCA, donde se seleccionan las bandas a
usar en el análisis. El valor -1 indica que se extraigan todas las componentes.

49
Se genera una imagen con los 9 CP (visualizadlos), en la que en sus Metadata podemos
ver los resultados del análisis en PCA_RESULTS (Figura 5.9), donde se muestra el vector
de medias y la matriz de autovectores (matriz de cambio de base):

Figura 5.9: Metadata de la imagen resultante, donde se muestran los resultados del PCA.

Observamos que las tres primeras componentes ya llevan la mayoría de la información


de la imagen y que al componerlas en un RGB: CP1-CP2-CP3 se muestra una gran
variabilidad de cubiertas en la imagen (Figura 5.10):

Figura 5.10: Composición RGB: CP1-CP2-CP3 frente a la RGB:8A-11-12

50
5.4. Cortar la imagen por coordenadas
Volvemos sobre la imagen usual L2A, RGB: 8A-11-12, de 20 m. Para cortar la imagen
vamos a Raster→Subset y elegimos una opción de corte (por coordenadas de píxeles,
por coordenadas geográficas o reduciendo el recuadro que aparece sobre la imagen en
la pantalla del comando, o sea, haciendo un zoom). Elegimos un trozo de imagen de la
parte superior izquierda que contenga las dos zonas quemadas superiores para hacer el
corte. Cortada la imagen, la abrimos para comprobar que se ha realizado bien el subset
(Figura 5.11).

Figura 5.11: Corte sobre la imagen del 22 de octubre de 2017

5.5. Cortar la imagen por un vectorial


Abrimos de nuevo la imagen completa e importamos el vectorial (shapefile) de las
provincias de Galicia (Provincias_IGN.shp) en File→Import→Vector Data→ESRI
Shapefile (o en Vector→Import→ESRI Shapefile). Como el vectorial está compuesto de
varios polígonos se nos preguntará si queremos importarlos de forma separada, a lo que
contestamos que sí. Si tenemos una imagen abierta, se visualizarán sobre ella la zona de
los polígonos que le correspondan (en nuestra escena la de 3 provincias) y en Mask
Manager podemos gestionarlas como máscaras (cambiarles el color y la transparencia
para visualizarlas, unir varias máscaras en una sola, etc.) y en Layer Manager
activarlas/desactivarlas para visualizarlas o no. Como máscaras también pueden usarse
en las fórmulas. Y aparecerán también como Vector Data en la imagen (Figura 5.12).

En este caso, como ejemplo, vamos a cortar la imagen por Pontevedra. Esto se hace en
Raster→Mask→Land/Sea Mask, pero al intentarlo me avisa de que la imagen es “multi-
size”, por lo que debo remuestrear todas las bandas a 20 m en Raster→Geometric

51
→Resampling, usando el método del vecino más cercano (Nearest) (Figura 5.13). La
imagen de salida llevará el sufijo _resampled20m (por defecto es _resampled).

Figura 5.12: Resultado de importar el vectorial con las provincias.

Figura 5.13: Remuestreo de todas las bandas de la imagen a 20 m con el método del
vecino más cercanos (Nearest). Usad siempre este método para remuestrear bandas.

52
A continuación se selecciona la imagen remuestreada a 20 m y se ejecuta la herramienta
Raster→Mask→Land/Sea Mask. En la primera pestaña se indica el nombre de la
imagen de salida, a la que añadimos el sufijo _corPontevedra (por defecto es _msk). En
la segunda pestaña desmarcamos la opción Use SRTM 3sec, señalamos la opción Use
Vector as Mask y elegimos Pontevedra en la lista desplegable. En Source Bands se eligen
las bandas a cortar, pero si no se selecciona ninguna se cortarán todas, que es lo que
necesitamos (Figura 5.14).

Figura 5.14: Proceso de corte de la imagen por la provincia de Pontevedra.

Como resultado se obtiene la imagen de Pontevedra del mismo tamaño que la imagen
completa (Figura 5.15, a la izquierda), a la que podríamos aplicar un subset que se ciñese
solo a la provincia de Pontevedra (Figura 5.15, a la derecha):

Figura 5.15: Imagen cortada por la provincia de Pontevedra (izquierda: del mismo
tamaño de la original; derecha: ceñida a la provincia con un subset).
53
6. Proyecto de incendios: cartografía de zonas quemadas

Una de las principales aplicaciones de la Teledetección es la cartografía de zonas


quemadas por incendios forestales. En este proyecto obtendremos las zonas quemadas
debido a los incendios ocurridos en Galicia el 14 y 15 de octubre de 2017 (y que
continuaron activos durante cuatro días). Para ello debemos contar con dos imágenes
lo más cercanas posible a las fechas de los incendios, libres de nubes (y humo), una
anterior a éstos (la pre-incendio) y otra posterior (post-incendio). En nuestro caso son
las imágenes del 13 de agosto de 2017 (pre-incendio) y la del 22 de octubre de 2017
(post-incendio). Ambas han de estar corregidas de atmósfera y topografía, es decir, estar
en el nivel L2A. Abrimos las dos imágenes, de forma que la [1] sea la pre-incendio y la
[2] la post-incendio. También es bueno hacer una carpeta llamada Proyecto-incendios
donde vayamos almacenando las nuevas imágenes creadas a lo largo de este proyecto.

6.1. Aplicación de los índices de incendios

Usaremos los índices de incendios más usuales, mostrados de nuevo en la Tabla 6.1:

Índice Acrónimo Fórmula Aplicación Sentinel-2


Normalized NBR 𝑁𝑁𝑁𝑁𝑁𝑁 − 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆 𝑏𝑏8(8𝐴𝐴) − 𝑏𝑏12
Burn Ratio 𝑁𝑁𝑁𝑁𝑁𝑁 + 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆 𝑏𝑏8(8𝐴𝐴) + 𝑏𝑏12
delta dNBR NBRpre-incendio- NBRpre-NBRpost
Normalized NBRpost-incendio
Burn Ratio
Relativized RBR 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑
Burn Ratio 𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁 + 1.001 𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁𝑁 + 1.001
Tabla 6.1: Índices usados para la cartografía de zonas quemadas.

El primer índice, el NBR, se hace sobre cada imagen individualmente. Seleccionamos


entonces primero la imagen pre-incendio para crear en ella la capa NBRpre, y con el
botón derecho del ratón hacemos clic en Band Maths y en la ventana que se abre le
damos un nombre a la nueva banda (NBRpre; Figura 6.1a), añadimos una descripción si
queremos, no ponemos ninguna unidad (el índice es adimensional) y eliminamos la
marca en Virtual ya que queremos guardar el índice como capa, no sólo su expresión
(que también). Hacemos clic en la caja Edit Expression para en la siguiente ventana
(Figura 6.1b) aplicar la fórmula del índice insertando las bandas correspondientes (B8A
y B12; se mostrarán a la izquierda como $1.B8A y $1.B12, ya que son de la imagen [1]
en la lista de Product Explorer). La fórmula es: ($1.B8A- $1.B12)/($1.B8A+ $1.B12).
Dando OK en esta ventana volvemos a la anterior donde aparecerá ya la fórmula del
índice. En esta ventana inicial damos a Save para salvar la fórmula como texto
(NBRpre.txt) y OK para que se realice el índice. Una vez realizado, comprobar en algún
píxel que ha hecho bien el cálculo (abrir las bandas 8A, 12 y NBR para que aparezca el

54
valor en las tres capas). A la imagen de salida le ponemos el sufijo –con_NBRpre. La
imagen debe salvarse para grabar la nueva capa y poder hacer cálculos con ella. Realizar
de la misma forma la capa NBRpost en la imagen post-incendio, salvar la fórmula como
NBRpost.txt y salvar la imagen de salida con el sufijo –con_NBRpost.

Figura 6.1: Proceso para la creación del índice NBR en la imagen pre-incendio (NBRpre).
a) Primera pantalla y b) Segunda pantalla.

El índice dNBR lo crearemos en la imagen post-incendio, aunque necesitamos los dos


índices NBR, el NBRpre y el NBRpost. Seleccionamos entonces la imagen post-incendio
y en Band Maths introduzco la fórmula correspondiente (Figura 6.2), que salvaremos
como dNBR.txt. Fijarse que para elegir NBRpre al hacer la expresión, que está en la
imagen [1], debemos elegir en Product esta imagen, así como la imagen [2] para elegir
NBRpost. La fórmula es: $1.NBRpre - $2.NBRpost. Salvamos de nuevo la imagen post-
incendio con el sufijo –con_dNBR.

55
Figura 6.2: Cálculo del índice dNBR en la imagen post-incendio.

El índice RBR lo crearemos también en la imagen post-incendio, a partir de los índices


NBRpre y dNBR. De nuevo seleccionando la imagen post-incendio y en Band Maths
introduzco la fórmula correspondiente (Figura 6.3), que salvaremos como RBR.txt. La
fórmula es: $2.dNBR/($1.NBRpre+1.001). Salvamos de nuevo la imagen post-incendio
con el sufijo –con_RBR.

Figura 6.3: Cálculo del índice RBR en la imagen post-incendio.

Como podemos observar, los dos últimos índices se engloban en procesos de detección
de cambios, en este caso la ocurrencia de incendios, por lo que se basan en la
comparación de la imagen después del incendio (post-incendio) respecto a la imagen
previa a éste (pre-incendio).
56
Las imágenes de todos los índices realizados se muestran en la Figura 6.4 y Figura 6.5:

Figura 6.4: Imágenes NBRpre y NBRpost sobre sus imágenes correspondientes.

Figura 6.5: Imágenes RBR y dNBR creadas en la imagen post-incendio.

6.2. Aplicación de máscaras y Umbralización del RBR (y/o dNBR)

Volvemos sobre la imagen post-incendio en la que hemos almacenado como capas los
índices de incendios realizados en el apartado anterior (NBRpost, dNBR y RBR).
Usaremos ahora el RBR como ejemplo (el dNBR también sería adecuado). Si
comparamos éste con un RGB=8A-11-12 de la imagen (donde los incendios se muestran
el color azul) vemos que el RBR es un buen índice, ya que destaca los incendios en un
color muy claro (Figura 6.5). Sin embargo, vemos que también se muestran en color muy
claro algunas zonas de agua y las nubes, así que tendremos primero que hacer máscaras
con estas cubiertas para quedarnos sólo con las zonas quemadas, que son las que nos
interesan.

57
Lo primero que hacemos entonces es ver si las máscaras de nubes que contiene la
imagen eliminarían las nubes que se confunden con las quemas (no nos importa que
elimine otras nubes también, aunque no nos afecten, mientras no eliminen las zonas
quemadas). Con la ayuda de Mask Manager vemos estas máscaras en colores sobre el
RGB=8A-11-12 para comprobarlo. Estas máscaras son: scl_cloud_medium_proba,
scl_cloud_high_proba y scl_thin_cirrus. Observamos cómo las dos primeras nos son
útiles, pero no la tercera, ya que afecta a la zona quemada más grande de la escena y si
la usamos para eliminar datos, eliminaríamos parte de esta zona quemada (Figura 6.6).

Figura 6.6: Máscaras de nubes sobre la imagen post-incendio. Vemos que la máscara
scl_thin_cirrus (en color rosa) no se puede usar porque se eliminaría zona quemada.

Las máscaras también se pueden ver de forma individual en la capa Masks (scl) de la
imagen (Figura 6.7):

Figura 6.7: Máscaras de nubes de la imagen posterior al incendio: high, medium y thin.

58
Hacemos entonces una máscara de nubes conjunta con las máscaras útiles
scl_cloud_medium_proba y scl_cloud_high_proba que llamaremos nubes y que
añadiremos como otra capa a la imagen. Lo hacemos seleccionando una de las máscaras
y, activando Band Maths, introduciendo la expresión (Figura 6.8):

if (scl_cloud_medium_proba + scl_cloud_high_proba) < 255 then 0 else 1

Figura 6.8: Cálculo de la máscara de nubes conjunta nubes, suma de las máscaras útiles
scl_cloud_medium_proba y scl_cloud_high_proba. La fórmula se guarda como nubes.txt

La imagen nubes resultante se muestra en la Figura 6.9 junto con la máscara de agua
que haremos a continuación. Nos fijamos que a las nubes les da el valor 1 y al resto el
valor 0, es decir, es una imagen binaria (de ceros y unos).

Figura 6.9: Máscaras de nubes (a la izquierda) y agua (a la derecha)

Para generar la máscara de agua usamos el índice NDWI2=(Green-NIR)/(Green + NIR) =


(b3-B8A)/(b3+b8A), que cuando es ≥0 delimita muy bien las zonas de agua. Lo hacemos

59
con Band Maths y, al mismo tiempo, nos quedamos sólo con los valores ≥0 mediante la
expresión (Figura 6.10):

if ((B3 - B8A) / (B3 + B8A)) >= 0.0 then 1 else 0

para crear la capa agua (Figura 6.9). Las zonas de agua toman el valor 1.

Figura 6.10: Cálculo de la máscara agua. La fórmula se guarda como agua.txt

Generamos la máscara conjunta de nubes y agua (nubes_agua) colocándonos en una de


ellas (por ejemplo, nubes) y aplicando con Band Maths la fórmula:

if (nubes > 0 or agua > 0) then 1 else 0

Para eliminar ahora del índice RBR las nubes y el agua con la máscara conjunta anterior
(que llamaremos RBR_filtrado_nubes_agua), seleccionamos el RBR y con Band Maths
aplicamos la fórmula:
if nubes_agua == 0 then RBR else NaN

A continuación, para seleccionar las zonas quemadas, aplico el umbral genérico 0.27
(usado por el USGS para definir el límite Moderada_Baja Severidad), de forma que sólo
me quedo con los valores con RBR>0.27 (que teóricamente son las zonas quemadas)
llamando al resultado RBR_filtrado_nubes_agua_umbral_027. Se hace seleccionando
RBR_filtrado_nubes_agua y aplicando sobre él la fórmula:

if RBR_filtrado_nubes_agua > 0.27 then RBR_filtrado_nubes_agua else NaN

60
En la Figura 6.11 podemos observar la imagen resultado
RBR_filtrado_nubes_agua_umbral_027 en comparación con la imagen anterior
RBR_filtrado_nubes_agua, para ver el efecto de haber aplicado el umbral:

Figura 6.11: Imagen filtrada RBR_filtrado_nubes_agua y la obtenida después de aplicar


sobre ésta el umbral >0.27, RBR_filtrado_nubes_agua_umbral_027.

Si comparamos la cartografía de zonas quemadas obtenida en comparación con el


RGB=8A-11-12 (Figura 6.12), se observa que, si bien delimita muy bien las zonas
quemadas, aparecen también zonas que no son quemas, sino vegetación que ha
cambiado o se ha secado entre la fecha pre y post incendio (por ejemplo, al Este de la
imagen, en la provincia de Orense y otras zonas en Portugal). Cargad el vectorial de las
provincias en conjunto para luego cortar la imagen por Galicia, dejando fuera Portugal
(Figura 6.13). Así en Galicia, excepto los casos de cultivos en Orense, el umbral es
adecuado para cartografíar las zonas quemadas. Aunque se podría definir otro umbral
más ajustado si no nos parece adecuado. Las zonas de cultivos pueden eliminarse
definiendo nosotros una máscara por medio de polígonos que las engloben (y operar
como hicimos con las máscaras de nubes y agua) o buscar otros filtros además de los
usados (estudiando la diferencia espectral en ciertas bandas, etc.) o eliminarse a
posteriori con un programa de GIS (que convierta los raster a vectoriales).

Figura 6.12: RGB=8A-11-12 y la cartografía de zonas quemadas obtenida del índice RBR
filtrado de nubes y agua y con un umbral >0.27.
61
Figura 6.13: RGB=8A-11-12 y la cartografía de zonas quemadas en Galicia obtenida del
índice RBR filtrado de nubes y agua y con un umbral >0.27.

TAREA: Repetimos los mismos pasos (desde que ya están generadas las máscaras) con
el dNBR tanto en la imagen post-incendio completa como en la cortada por Galicia y
guardamos ambas imágenes con todas sus capas. Comparamos ambos índices para ver
cuál es el más adecuado. La Figura 6.14 muestra un ejemplo de esta comparación.

Figura 6.14: Comparación entre los índices RBR (a la izquierda) y dNBR (a la derecha)
(ambos filtrados y con un umbral >0.27) en la zona de cultivos de Orense.

Para exportar como GeoTIFF el corte de Galicia seleccionamos la imagen y en la ventana


de File→Export→ GeoTIFF damos a Subset, donde ajustamos la zona en Spatial Subset
y elegimos las bandas a convertir en Band Subset (sólo los índices RBR y dNBR filtrados
y con el umbral). En Tie-Point Grid Subset y Metadata Subset seleccionamos todo, que
es la opción por defecto (Select all) no seleccionamos nada. La imagen se grabará como
.tif. Ahora podemos importar la imagen con otro software de Teledetección o GIS, por
ejemplo, QGIS, para hacer otros procesos o crear mapas. Probemos que funciona al
importarlo en QGIS.

62
6.2. Clasificación no supervisada con k-Means
Tomamos la imagen post-incendio completa (con Galicia y Portugal) y con todas las
bandas e índices realizados y vamos a Raster→Classification→Unsupervised
Clasiffication→K-Means Cluster Analysis. La primera ventana es la usual de introducir
el nombre de la imagen de salida (por defecto le añade al nombre de la imagen de
entrada_kmeans) y en la segunda ventana se introducen los parámetros de
procesamiento: el número de clases, el número de iteraciones el número de píxeles
semilla y las bandas/índices que va a usar en la clasificación. Probemos con 9 clases, 30
iteraciones, dejamos el número por defecto de semillas (31415) y elegimos todas las
bandas (excepto la b1 y la b9) y los dos índices RBR_filtrado_nube_agua y
dNBR_filtrado_nube_agua (Figura 6.15).

Figura 6.15: Proceso para hacer una clasificación kmeans con las bandas e índices.

63
Obtenida la nueva imagen, observamos que se crea una capa virtual llamada
“class_indices” y esta capa se visualiza en diferentes colores. En Colour Manipulation
podemos ver el valor dado a cada clase (Value, de 0 a 8; no confundid con class_1, etc.),
la etiqueta (Label) y el % de píxeles en cada clase (Frequency). A continuación,
comparando con el RGB=8A-11-12, vamos dando el color negro a las clases que veamos
que no son quemas y un color rojo a las que sí lo sean. Por ejemplo, en el caso de la
Figura 6.16, hay solo una clase que incluye todas las zonas quemadas (la clase 8), a la
que llamaremos quemado en Label.

Figura 6.16: Búsqueda de la clase o clases que corresponden a las zonas quemadas.

Pero con esto solo hemos ocultado las otras clases en la visualización, pero siguen
estando ahí, como podemos ver en Pixel Info, que cada clase tiene el número indicado
en Value. Vamos entonces a convertir la imagen en binaria, con valor 1 para la clase
quemado y 0 para el resto de las clases. Nos colocamos entonces en la banda/capa
class_indices y en Band Maths aplicamos la fórmula:

if (class_indices== 8) then 1 else NaN

llamando a la nueva capa quemado.

Si fueran necesarias dos o varias clases para incluir todas las zonas quemadas, por
ejemplo, la 6 y la 8, la fórmula sería:

if (class_indices== 6 or class_indices==8) then 1 else NaN

Se creará entonces la capa binaria con valor 1 donde están las zonas quemadas. Se
podrá exportar a .tif (como vimos al final del Apartado 6.1) y, en un software de GIS,
convertir de raster a vectorial para eliminar las quemas menores de 5 ha, que es lo usual
en estos trabajos.

También, por supuesto, se puede cortar por Galicia para tener sólo las zonas quemadas
de esta región.

64
REFERENCIAS
Páginas web de servidores para la búsqueda y descarga de imágenes:

Copernicus Data Space Ecosystem: https://dataspace.copernicus.eu/browser/


EO Browser: https://www.sentinel-hub.com/explore/eobrowser/
GloVis: https://glovis.usgs.gov/app

Páginas web de la ESA para descarga de software y tutoriales:

Software SNAP: https://step.esa.int/main/download/snap-download/


Plugin Sen2Cor: http://step.esa.int/main/third-party-plugins-2/sen2cor/ y
https://step.esa.int/main/snap-supported-plugins/sen2cor/sen2cor-v2-11/
Configuración y Manual de usuario:
https://step.esa.int/thirdparties/sen2cor/2.11.0/docs/OMPC.TPZG.SUM.001%20-
%20i1r0%20-
%20Sen2Cor%202.11.00%20Configuration%20and%20User%20Manual.pdf
Definición de los datos de entrada y salida:
https://step.esa.int/thirdparties/sen2cor/2.11.0/docs/OMPC.TPZG.IOD.001%20-
%20i1r0%20-%20Sen2Cor%202.11.00%20IODD.pdf

Plataforma STEP (información general): https://step.esa.int/main/


Tutoriales: https://step.esa.int/main/doc/tutorials/

Material y datos para el entrenamiento en distintas aplicaciones:


https://eo4society.esa.int/resources/copernicus-rus-training-materials/
En concreto, la aplicación de zonas quemadas realizada en este guion está adaptada
del recurso: HAZA02 – Burned area mapping with Sentinel-2

EO Training & Education: https://eo4society.esa.int/training-education/

65

También podría gustarte