martes, 2 de enero de 2018

Aplicación de máscaras para nubes en imágenes Landsat 8 con QGIS









En esta oportunidad vamos a presentar a Cloud Masking,  un plugin de QGIS con el que podemos enmascarar nubes, sombras de nubes, cirros (nubes grises), aerosoles, hielo/nieve y agua para productos Landsat (4, 5, 7 y 8), utilizando diferentes procesos y filtros como Fmask, Blue Band, Cloud QA , Aerosol y Pixel QA.

Fuente de datos


Para este procedimiento vamos a considerar una escena del Landsat 8, las cuales pueden ser descargadas desde distintas fuentes, en este caso se realizó desde: https://earthexplorer.usgs.gov/. La zona de interés corresponde al Path/Row 8/64.




Descarga de las bandas de Landsat con ESPA


Con el objetivo de conseguir mejores resultados para el procesamiento de enmascaramiento y aplicación de los filtros, se requiere otros productos o bandas del Landsat, los cuales deberás ser solicitados a través de la interface del Earth Resources Observation and Science (Eros) Center Science Processig Architecture (ESPA),  para lo cual es necesario tener un registro.




Con nuestros datos de registro, accederemos a una página que nos solicita que como primer paso le indiquemos la lista de escenas, en este caso del Landsat 8, para ello debemos generar un archivo de texto (*.txt), con los códigos que identifican las escenas; para nuestro caso sería algo como la siguiente figura.


Ahora cuando nos soliciten la lista de las escenas, simplemente tenemos que indicar la ubicación de nuestro archivo de texto. Para las otras opciones, considerar las que se indican en la figura de abajo, en donde para este caso también se solicitó en la sección de configuración de salida, que nuestras escenas se guarden como GeoTiff y tengan una proyección UTM Zona 18S.



Luego de realizar el pedido, nos llegará un correo anunciando que el enlace para la descarga está listo y nosotros ya podemos descargar todo nuestro pedido.




Plugin Cloud Masking



Una vez que ya contamos con nuestras bandas requeridas, nuestro siguiente paso es instalar y luego activar el plugin Cloud Masking. Tal como se aprecia en la figura de abajo, se genera un panel del plugin.




El plugin presente esta dividido y ordenado en tres secciones; (1) Open and Load, desde donde podremos abrir el archivo de los metadatos (MTL) y las bandas apiladas, (2) Filters and Mask, que nos permite habilitar y configurar los filtros para aplicar las máscara de nubes y (3) Apply and Save, para guardar la máscara creada y aplicarla sobre las bandas apiladas.


Abriendo los Metadatos 


Lo primero que tenemos que hacer con el plugin es ubicar el archivo de los metadatos de nuestra escena (MTL), para abrirlo e identificar nuestras bandas.



Abriendo un Apilado de bandas (Stack)



No es un paso obligatorio, pero se recomienda hacer una combinación de bandas de tipo RGB, con el objetivo de poder visualizar y revisar la escena. En el lado derecho podemos apreciar que existen botones con las combinaciones más comunes. Para este caso vamos a elegir "False Color", luego hacemos clic en "Load stack", con ello podremos apreciar en nuestra vista de mapa, la combinación de bandas establecida.




Seleccionando los filtros a aplicarse



Ahora en la siguiente sección debemos seleccionar nuestros filtros. El plugin tiene cuatro filtros diferentes para aplicar, Fmask y Blue Band están disponibles para cualquier escena Landsat, pero Aerosol y Pixel QA (para el caso del Landsat 8), están disponibles solo para las escenas que son solicitadas a través de ESPA, tal como lo vimos anteriormente. Se puede activar más de un filtro a la vez, el complemento acumula los filtros en el mismo orden (de abajo hacia arriba).



Filtro FMask


El primer filtro que activaremos será el FMask, dejando las opciones por defecto. El proceso de Fmask utiliza una implementación de un algoritmo de python llamado fmask, descrito  en http://pythonfmask.org/en/latest/, actuando como una biblioteca interna en el plugin.




Filtro de la Banda Azul


Este filtro utiliza la banda azul del Landsat (Banda 2 para Landsat 8) para enmascarar todos los píxeles con valores inferiores al umbral establecido, este último también depende de la versión empleada, por lo tanto, para Landsat 8 el umbral es 0-65534 (16 bits).




Filtro Aerosol



Este tipo de filtro solo se puede ejecutar en escenas del Landsat 8, para lo cual se emplea una banda (Aerosol) de 8 bits. Cuando revisamos los archivos solicitados a través de ESPA, veremos que existe una banda que tiene la terminación  *_sr_aerosol.tif. Estos 8 bits son:



En el complemento se implementa este filtro bit a bit (solo los bits útiles) y se puede habilitar uno o más bits.



Para obtener más información, es importante consultar esta guía del producto.


Filtro Pixel QA


Para emplear este filtro, debemos contar con una banda de 16 bits, la misma que presenta la terminación *_pixel_qa.tif. Este archivo solo estará disponibles cuando seleccionamos en nuestro pedido a través de ESPA, la opción de "Surface Reflectance (SR)", lo que representa una colección especial de Landsat. Estos 16 bits para Landsat 8 son:


Las opciones del Pixel QA a emplear son:



Generando la máscara de nubes


A partir de aquí ya podemos generar las máscaras en función a los filtros previamente habilitados. Existen tres opciones para su generación: (1) La imagen completa (Whole Image), la cual viene por defecto, esto ocurre si las otras opciones están desactivadas; (2) Solo en el área seleccionada (In only select area), cuando se selecciona esta opción, podemos procesar la máscara en un área específica de la imagen, que podrá ser seleccionada en la vista del mapa (solo un área rectangular). Si la opción de Mantener el tamaño de la imagen original (Keep the original image size) está habilitada, la máscara de resultado tendrá la misma extensión, de lo contrario, la máscara de resultado se recortará en el área seleccionada; (3) La opción In only shape area, con esta opción, se puede procesar la máscara solo dentro de un Shape particular, el mismo que debe ser creado antes de aplicarse. Si la opción Eliminar datos fuera de la forma está habilitada, la máscara resultante tendrá la misma extensión pero los datos fuera del shape se enmascararán, de lo contrario la máscara resultante tendrá la misma y los datos fuera de la forma serán válidos (solo enmascarados dentro del shape).

En nuestro caso vamos a emplear la opción 2 y luego haremos clic en "Generate mask".




Si vemos nuestro panel de capas, veremos que se generó una capa temporal con el resultado de la máscara generada aplicando los filtros habilitados.




Aplicando la máscara


El plugin nos ayuda a crear, aplicar y guardar las  bandas apiladas con el Landsat cargado, teniendo tres opciones para aplicar la máscara sobre las bandas apiladas. (1) Raw Bands, que son las bandas originales de los productos landsat, uno mismo puede seleccionar el orden de apilado, por defecto son las bandas de reflectancia; (2) SR Bands, estos son los productos de Landsat obtenidos por ESPA, Surface Reflectancia (SR), esta opción solo está habilitada si está procesando este tipo de producto, y también se puede seleccionar el orden de la bandas para ser el apilado, por defecto son las bandas de reflectancia; (3) Particular file, esta última opción se aplica a una apilado o archivo de imagen en particular.

Para nuestro caso emplearemos la opción 2 y luego le indicamos la ubicación en donde se guardará nuestra imagen apilada con la máscara aplicada.





Finalmente cuando se ejecuta la máscara, podemos hacer una combinación de bandas y para verificar nuestro resultado podemos emplear el plugin "Value Tool", y si nos ubicamos en una zona donde existe nubes y se aplicó una máscara, comprobaremos que los valores son "cero".




Se recomienda grabar la capa temporal inicial con los filtros aplicados, para ello es importante salvar el estilo de la capa para que lo podamos agregar en otro proyecto.

Bueno, por ahora es todo lo que quería mostrarles, les invito a probar el plugin.




Referencias Consultadas:








domingo, 24 de diciembre de 2017

Descarga de Imágenes Sentinel en QGIS con Plugin SentinelHub









Continuando con la temática del post anterior, en esta oportunidad mostraremos que también podemos obtener los mismos resultados, pero ahora con el uso del Plugin del QGIS "SentinelHub". En primer lugar debemos instalar nuestro plugin, siendo la mejor opción hacerlo desde nuestro administrador de complementos.

Figura 1: Instalando plugin SentinelHub


Paso 1: Seleccionar nuestra Zona de Interés


Ahora vamos a seleccionar nuestra zona de interés, en este caso nos enfocaremos a un ámbito ubicado en el Departamento de San Martín, en específico áreas que cubren los campos del INIA que se encuentran cercanos al centro poblado de Juan Guerra.
Si seguimos los pasos ya vistos en el post anterior, cuando nos referimos a la "Configuración de nuestro servicio de Sentinel Hub", en esta oportunidad, crearemos una nueva configuración y por lo tanto un nuevo ID, pero ahora cambiaremos nuestros límites del mapa, para seleccionar nuestra nueva zona de interés.

Figura 2: Delimitando nuestra zona de interés para la descarga



Paso 2: Activando nuestro plugin SentinelHub



Considerando que ya tienen instalado el plugin, ahora podemos activarlo si lo ubicamos desplegando en la barra menú "Web" o también en la barra de herramientas se dispone de un icono. Una vez que lo activamos, aparecerá un panel en la parte inferior de nuestra vista del mapa, mostrando un campo en donde debemos colocar el ID de nuestra configuración.

Figura 3: Activando el plugin SentinelHub en el QGIS




Paso 3: Seleccionando nuestra imagen a descargar



Ahora es importante definir cual será la imagen más adecuada, para ello, recomiendo primero emplear un buscador de imágenes del Sentinel, en este caso un aplicativo que forma parte del Sentinel Hub sería el http://apps.sentinel-hub.com/eo-browser, a través del cual podremos filtrar las mejores imágenes considerando un bajo porcentaje de nubes. Tal como se aprecia en la Figura 4, en el buscador le indicamos que nos muestre imágenes con hasta 10% de nubes, dando como resultado unas tres imágenes más recientes.


Figura 4: Empleo del EO Browser para buscar imágenes del Sentinel


Si bien vemos que existe poca nubosidad, es posible que nuestra zona de interés esté cubierta por esas pequeñas nubes, por lo tanto, se recomienda hacer una pre-visualización y descartar esa posibilidad.


Figura 5: Visualizando en detalle la imagen de nuestra zona de interés


Paso 4: Descargando Imágenes con el Plugin SentinelHub


El siguiente paso, una vez colocado nuestro ID, es seleccionar nuestra imagen a descargar, en este caso empezaremos por una que nos muestre el NDVI y ahora que conocemos las fechas en donde existen las mejores imágenes para descargar, vamos a optar por la opción de descargar una imagen en una fecha específica, en este caso hablamos del 10-12-2017, por ser la más reciente. Cuando tenemos todas las opciones indicadas solo debemos hacer clic en el botón "Create".

Figura 6: Descarga de una imagen NDVI de nuestra zona de interés


Para verificar que la imagen corresponde a la fecha indicada, podemos emplear el identificador de objetos espaciales.



Figura 7: Mostrando los datos de la imagen  NDVI descargada


Podemos continuar descargando todas las opciones de imágenes disponibles, teniendo en cuenta nuestra configuración inicial, para efectos de ejemplo, se muestran las que corresponden a "Agriculture" y de "Moisture Index".

Figura 8: Otras imágenes del Sentinel descargadas



Paso 5: Configurando descarga de imágenes por intervalo de tiempo y porcentaje de nubes



Por ahora hemos visto que podemos descargar imágenes en una fecha fija, porque sabíamos que era la mejor imagen; pero si requerimos que nos muestre la siguiente imagen dentro de un periodo de tiempo que podamos establecer, podemos tener el resultado que se muestra en la Figura 9, en donde podemos ver que existen nubes justo en nuestra zona de interés, a pesar que fue una de las imágenes seleccionadas previamente (Ver Figura 4).

Figura 9: Descarga de imágenes empleando un intervalo de tiempo



Para resolver este caso, como vimos en la Figura 4, la imagen de fecha 06-10-2017, presenta un 8.6% de nubes, por lo tanto, lo que podemos hacer para que no sea considerada, disminuimos el porcentaje de nubes hasta un 8%, dando como resultado la imagen de fecha 21-09-2017, porque tiene 3.78% de nubes, además que apreciamos que para nuestra zona de interés no presenta nubes, lo cual es lo que buscamos.


Figura 10: Descarga de imágenes ajustando el porcentaje de nubes



Paso 6: Descarga de nuestras imágenes en distintos formatos


Por último, el plugin nos presenta la opción para descargar en formatos de imagen (PNG, TIFF y JPEG), teniendo que solamente indicarle la extensión de descarga y claro definir una carpeta en donde va ser descargado, siendo lo interesante de esto, que dichas imágenes están georreferenciadas, por lo tanto la podemos incluir como una capa adicional.


Figura 11: Opción para descarga de las imágenes en distintos formatos



Muy bien, espero que les pueda servir estos pasos para sacarle provecho al uso del plugin SentinelHub, les invito a probarlo. Hasta la próxima.


Referencias Consultadas









domingo, 3 de diciembre de 2017

Adicionando WMS desde Sentinel Hub con QGIS








En esta oportunidad voy a mostrar las ventajas de trabajar con Sentinel Hub, que representa una Infraestructura de imágenes satelitales que pone a disposición de los usuarios finales a través de servicios web, la facilidad de integrar gran cantidad de imágenes que nos ayudan al manejo de los mismos. 

Nuestro objetivo será lograr configurar servicios de tipo WMS a través del Sentinel Hub, que nos permita visualizar un grupo personalizado de imágenes del satélite Sentinel 2, los cuales lo mostraremos como nuevas coberturas en nuestro QGIS.


Primeros pasos con Sentinel Hub


Lo primero que debemos hacer es registrarnos, para ello dentro de la página principal hay que solicitar una suscripción al servicio (https://services.sentinel-hub.com/oauth/subscription), el cual luego de una confirmación de nuestro correo, estaremos debidamente registrados.



Luego nos vamos a las aplicaciones existentes (http://sentinel-hub.com/apps), desde aquí podremos elegir dentro de las aplicaciones independientes a "Configuration Utility". Una vez que entramos, nos va a solicitar nuestros datos de inscripción.


Ahora solo nos queda hacer clic en Login e ingresar a nuestro ambiente para realizar la configuración de nuestro servicio. Comprobaremos que en el lado derecho está nuestro nombre y ya podemos empezar a generar nuestra primera configuración.



Configurando nuestro Servicio de Sentinel Hub


Nuestro paso siguiente será adicionar una nueva configuración, para ello primero le indicamos un nombre, luego seleccionamos una plantilla disponible y finalmente la creamos.


Luego ya podremos ver que nos ha generado un ID a nuestra configuración, para editarlo hacemos clic en Edit.



Ahora veremos que tenemos disponible un grupo de combinaciones de bandas de las imágenes del Sentinel 2, los que están representados con un nombre que los distingue en función a su aplicación, como por ejemplo "Agriculture". Pero antes de ver ese detalle, es importante definir nuestro ámbito de trabajo, para ello, nos vamos a la parte inferior de nuestra configuración (Maps bounds)




En este caso, voy a seleccionar un ámbito que cubra parte de la Zona Norte del Perú, específicamente dentro del Departamento de Lambayeque. Simplemente ajustamos un rectángulo y lo confirmamos, tal como se aprecia en la siguiente figura.



Capas de Agricultura


Vamos a mostrar el detalle de una de las capas que se generaron, hablamos de "Agriculture", al desplegar el detalle de dicha capa, veremos que se creó con la combinación RGB de las bandas 11,8 y 2. Podemos hacer una pre-visualización de nuestra capa. Para conocer mayor detalle de la capa, se recomienda revisar el script de procesamiento empleado.




Configurar nuestro servicio WMS


Para lograr tener nuestro URL del servicio WMS, entramos dentro del portal a http://www.sentinel-hub.com/apps/wms/wms-parameters, para ver la manera de emplear nuestro ID.





Añadiendo servicios WMS en QGIS


Ahora ya estamos listos para añadir un servicio WMS dentro de nuestro QGIS, para ello nos vamos a Capa --> Añadir Capa --> Añadir Capa WMS/WMTS.. Seguimos los pasos indicados en la siguiente figura:


Luego de conectarnos al servicio, como ejemplo añadimos la capa denominada "Agriculture".


Ahora lo podemos ver en nuestra vista de mapa.



Si nos vamos a nuestro "Panel del explorador",  podremos apreciar también todas las capas que podemos incorporar, solamente lo arrastramos a nuestra vista de mapa.


Como ejemplo se mostrará una ampliación de una zona que representa al INIA  Vista Florida, visualizando las capas de Agriculture, Moisture Index y NDVI.



Finalmente, es importante mencionar que con el Identificador de objetos espaciales, podemos conocer información del punto que seleccionemos, tal como se aprecia en la siguiente figura.



Bueno, espero que puedan aprovechar la ventaja de usar el Sentinel Hub, se recomienda probar otras capas y analizar los resultados.  Hasta la próxima.




martes, 10 de octubre de 2017

Empleando coberturas Geopackage en QGIS





En esta oportunidad voy a mostrar las ventajas de usar el formato Geopackage, sobre todo porque es una interesante alternativa al uso de los ESRI Shapefiles, sobre todo porque nos permite empaquetar varias capas en un solo archivo, lo que nos facilita mucho cuando necesitamos compartir nuestro trabajo, sobre todo si son varias capas, la lista de total de archivos que involucran a los Shapefiles pueden ser tantos que nos puede causar algunos inconvenientes.

Para este post como ejemplo, usaremos un proyecto con capas vectoriales principalmente, los cuales ya presentan sus estilos. Nuestro objetivo será adicionar todas las capas vectoriales y una capa raster en un solo archivo en formato Geopackage, incluir sus estilos dentro de la base de datos del formato y poder exportarlo empleando el plugin  QGIS map styling GeoPackage extension.

Datos de Entrada


El ámbito elegido es el Departamento de Pasco en Perú, dentro del mismo superpondremos capas que cubren la Provincia de Oxapampa, tal como se aprecia en la siguiente figura.

Fig. 1: Vista de un proyecto con capas vectoriales (Shapefiles) y raster


Generando Coberturas Geopackage


Luego de algunos intentos para adicionar en un mismo archivo GPKG, una capa raster y las capas vectoriales que tenía. Como primer paso, usaremos las herramientas de GDAL para convertir un archivo tipo GeoTiff en GPKG; para nuestro ejemplo seleccionamos la capa llamada Dem Fill (Ver Fig. 2), para luego en la parte inferior de las opciones, donde dice "Convertido", vamos a guardarlo como "oxapampa.gpkg".

Fig. 2: Uso de herramientas GDAL para convertir un GeoTiff a GPKG



Como segundo paso empezaremos a cargar las capas vectoriales en base al archivo convertido, para ello tenemos dos opciones para hacerlo. El primero directamente realizando el "Guardar como..." (Ver Fig. 3), el segundo apoyados por el "Administrador de BBDD" (Ver Fig. 4).


Fig. 3: Opción para generar un Geopackage desde un Shapefile existente

Fig. 4: Opción de importar capas vectoriales con el Administrador de BBDD



Por cualquiera de las opciones, debemos repetirlo por cada capa vectorial de nuestro proyecto, al final debemos tener algo parecido a esto.

Fig. 5: Resultado de importar capas dentro de un Geopackage

Generando Estilos


Un paso importante es la generación de estilos, si bien como lo mencionamos antes, nuestro proyecto ya presentaba sus propios estilos, lo que debemos hacer es guardarlo dentro de nuestra base de datos, repitiendo este procedimiento para cada capa vectorial.

Fig. 6: Guardando estilos en una base de datos Geopackage


La ventaja de este procedimiento, es que lo manejamos los estilos dentro de una base de datos, lo que permite tener más de un estilo y cargarlo dependiendo nuestro requerimiento, por ello se crea una tabla exclusiva para los estilos.

Fig. 7: Detalle de la tabla de estilos generados


Uso del Plugin GeoPackage QGIS


Una vez que tenemos nuestras coberturas en un solo archivo gpkg, existe la posibilidad de guardarlo y compartirlo, pero si lo queremos volver a verlo, simplemente con "añadir una capa vectorial", seleccionamos la lista de coberturas que deseamos insertar. Ahora, existe una alternativa si instalamos un plugin denominado QGIS map styling GeoPackage extension, a través del cual, tenemos la opción de guardar a nivel de nuestro proyecto, es decir podemos empaquetar mejor nuestro proyecto.

Fig. 8: Instalación del Plugin



Luego de ser instalado y habilitado, en la barra de herramientas se visualiza los iconos que nos permitirán, primero empaquetar el proyecto y luego supongamos que lo hemos compartido o lo deseamos abrir en otra máquina, tenemos la opción de leer nuestro archivo gpkp.

Fig. 9: Iconos del plugin




Bueno, es una opción interesante, sobre todo porque un proyecto tiene la opción no solo de establecer los estilos por defecto, sino que nos permite generar un diseño de mapa y cuando lo empaquetamos, tendremos la opción de recuperar ese detalle.
Los invito a probar el plugin y me indican si han tenido problemas, sobre todo sería interesante saber si alguien lo puede abrir empleando otros software SIG. Les dejo el resultado final para que lo puedan descargar desde aquí.