miércoles, 9 de octubre de 2024

Radiografía de Tenerife con R

En este ejercicio además de crear una animación que combine varios de los mapas que hemos venido creando (hillshade, curvas de nivel, proyección de sombras,...), vamos a implementarlo de forma vectorizada, para poder superponer con una línea de código sobre un mapa base información sumarizada más concreta, utilizando una flexible máscara con transparencia al más puro estilo de las máscaras de capa de Photoshop.

Como telón de fondo usamos un hillshade de la isla de Tenerife con luz dirección Este y muy ligeramente coloreado por cotas. Los datos de elevación con resolución de 25m provienen del Centro Nacional de Información Geográfica:



Sobre este mapa vamos a superponer con forma de máscaras circulares las siguientes cuatro versiones de los datos:
  • DEM en escala de grises
  • Curvas de nivel
  • Coloreado por altitud
  • Proyección de sombras (dirección Este)



La parte más interesante del ejercicio consiste en la construcción de una máscara o matriz de transparencia, del mismo tamaño que cada una de las imágenes (Full HD), y que contendrá una forma de circunferencia que situaremos en el lugar oportuno en cada frame de la animación:



Este círculo se situará en cualquier lugar arbitrario de la escena mediante una función overlap(), con la que calculamos las coordenadas de las esquinas superior izquierda e inferior derecha de la región de solape tanto en el dominio de las imágenes como de la propia máscara.

Creada esta máscara de capa, con una sola línea de código copiamos sobre el array/imagen imgout, y de acuerdo al array/máscara con transparencia mask, cada nueva capa i de información contenida en el array/imagen img2[,,,i]:

imgout = (1-mask)*imgout + mask*img2[,,,i]


El resultado es un vídeo en formato MP4 generado a partir de los frames individuales usando FFmpeg, al que añadimos el tema 'Strange' del grupo valenciano Mebageat. Puede verse en xraymap.mp4:



Repositorio con el código R: GitHub.

No hay comentarios:

Publicar un comentario

Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.