Animación del iceberg A68-A usando imágenes MODIS de AQUA en Python

Hace poco hemos estado dibujando la trayectoria del iceberg A68 usando cartopy y folium. En el artículo de hoy vamos a ver una parte de esa trayectoria desde el espacio usando información del instrumento MODIS a bordo del satélite AQUA, xarray, matplotlib, cartopy y Python.

La parte de trayectoria que vamos a procesar corresponderá al fragmento A68-A en su aproximación a las islas Georgias del sur después de haber vagado más de mil kilómetros durante meses por las gélidas aguas más meridionales del océano atlántico.

MODIS y AQUA

El AQUA es un satélite de observación de la tierra operado por la NASA y lleva, entre otros, un instrumento llamado MODIS. MODIS viene de moderate resolution imaging spectroradiometer.

El MODIS recoge información en 36 bandas distintas con resoluciones horizontales que varían entre los 250 metros y los 1000 metros dependiendo de la banda o canal que estemos usando.

Para el ejercicio de hoy voy a usar las bandas 1 (rojo a 250 metros), la banda 3 (azul a 500 metros) y la banda 4 (verde a 500 metros). Voy a usar un producto con algo de preproceso que me dan las imágenes agregadas a una resolución de 1 kilómetro para todas las bandas (producto L1B).

Los tres canales o bandas que voy a usar están dentro del visible (rojo, azul y verde) y con ellas crearé una imagen visible.

La información del producto L1B la podéis descargar de aquí recortadas para una zona de interés, que es mucho más práctico que descargar las imágenes completas de cada pasada del satélite.

Si quieres reproducir lo que voy a hacer aquí, este es el listado de imágenes usado:

Todas las imágenes tienen formato HDF. He hablado anteriormente sobre este formato en varias ocasiones.

Bibliotecas a usar

Como siempre, importamos una serie de cosas de las que haremos uso:

rasterio nos ayuda para poder leer el formato HDF. Lo llamamos desde xarray. cartopy lo uso para crear el mapa mientras que imageio me ayudará a crear la animación.

Creación de cada fotograma

La siguiente función incluye toda la funcionalidad que necesito para generar cada uno de los fotogramas de la animación final:

La función recibe la ruta de cada fichero de cada banda (rojo, verde y azul) para un momento dado de pasada del satélite sobre la zona de interés y hace varias cosas:

  • Lee cada uno de los canales usando xarray y rasterio.
  • Extraemos las posiciones de los datos.
  • Toqueteamos un poco los valores para tener un histograma un poco modificado.
  • Guardamos la imagen con los tres canales en RGB y en RGB_
  • Finalmente, usamos cartopy y matplotlib para crear la imagen final.

El tema de los histogramas, no quiero entrar ahora en mucho detalle. Si alguien tiene un poco de interés le puede echar un ojo a este enlace.

En la función se crean dos imágenes, una para RGB y otra para RGB_. En la segunda se ve ‘más’ color. Lo dicho, no voy a entrar mucho en ello ahora e igual en un próximo artículo me meto más en detalle.

Una vez que tenemos la función solo nos queda gestionar todo el tema de recolectar las imágenes, guardar los fotogramas y crear la animación. Eso lo puedes ver en la siguiente porción de código:

El anterior código no tiene mucha historia. Si tienes alguna duda usa los comentarios (de más abajo) para preguntar. Sobre imageio ya hablé aquí.

El resultado final sería (ponlo a pantalla completa y verás que algo, el iceberg, se va acercando desde el oeste a la isla para luego girar hacia el sur):

Un saludo.

Deja una respuesta

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

fifty nine − 58 =