Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Carmen Recondo
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.
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.
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.
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).
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.
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.
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.
7
Figura 1.12: Creación del icono de escritorio de SNAP y configuración de Python.
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).
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.
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.
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.
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.
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).
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).
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.
15
Figura 2.7: Información resumida de la banda 11 (del SWIR) de la imagen.
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).
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
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).
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).
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.
Figura 3.2 (e): Parámetros Sen2Cor finales que muestran la versión a usar.
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.
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.
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.
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):
28
setMidLatitude. Mid latitude set to WINTER according to area and data.
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.
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).
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:
c) Valores de la irradiancia solar (Eo) para cada una de las bandas (ópticas) del S-2:
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.
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).
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).
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).
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:
----------------------------------------------------------------------------------------------------------------
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:
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”:
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
41
# Determinar las dimensiones de la imagen
h = s2.getSceneRasterHeight()
w = s2.getSceneRasterWidth()
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
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:
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.
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…..”
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.
---------------------------------------
“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)”
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.
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):
48
5.3. Análisis de Componentes Principales (PCA=Principal Component Analysis)
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.
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).
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.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).
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
Usaremos los índices de incendios más usuales, mostrados de nuevo en la Tabla 6.1:
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.
55
Figura 6.2: Cálculo del índice dNBR 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:
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):
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).
59
con Band Maths y, al mismo tiempo, nos quedamos sólo con los valores ≥0 mediante la
expresión (Figura 6.10):
para crear la capa agua (Figura 6.9). Las zonas de agua toman el valor 1.
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:
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.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.
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:
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:
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:
65