jueves, 25 de abril de 2024

Mapas estilo karesansui con R

El karesansui (枯山水) o jardín seco japonés es una técnica de paisajismo donde mediante rocas y otros elementos se representan islas separadas por un manto de grava que simboliza el mar. La arena se rastrilla formando surcos, los cuales en las proximidades de cada isla siguen sus contornos de forma concéntrica emulando las olas.

Fuente: Cat Tuong Quan Zen House


En este ejercicio vamos a programar unas rutinas en R que a partir del mapa de una isla o conjunto de islas nos proporcionen apariencia karesansui. Partimos de un mapa de elevación de las Islas Baleares con resolución de 200m descargado del Centro Nacional de Información Geográfica:



Disponer del DEM, además de proporcionarnos el contorno de cada isla nos permitirá dibujar sus hillshade para enriquecer las zonas insulares. Obtenemos una versión sólida del mapa y las líneas de costa de las islas:



Ahora recorremos los píxeles de estos contornos, acumulando sobre ellos círculos de radios crecientes cuyas envolventes equiespaciadas constituyen los sucesivos surcos. Es la misma artimaña de fuerza bruta que usamos en 'Los horizontes del Lago Michigan'. El número de surcos y su ancho son parametrizables:



En un auténtico jardín karesansui, cuando se produjera solape entre los surcos de dos islas diferentes (Mallorca con Menorca por ejemplo) prevalecería el que se rastrillase en último lugar, mientras nuestro algoritmo hace una intersección. Para evitarla habríamos de calcular cada isla por separado y después establecer prioridades.

Para convertir la anterior imagen en un mapa de elevación de surcos haremos dos pasos adicionales. Primero forzamos en las bandas una alternancia de blanco y negro que las convierte en una secuencia escalonada periódica (máx, mín, máx, mín,...):



Ahora suavizamos los escalones con un filtrado paso bajo. El radio del filtro no debe ser inferior a la mitad de la separación entre bandas escogida, o sobrevivirán zonas planas sin gradiente en los máximos y valles de los surcos. Este desenfoque proporciona directamente un mapa de elevación de los surcos que queremos modelar:



Así que su hillshade puede ser utilizado como una máscara de luminosidad de cualquier textura para tener nuestro mapa japonés (hacer clic para verlo en Full HD):



En las zonas ajenas al hillshade de las islas, hemos añadido el hillshade correspondiente a unas bandas horizontales que queremos tener como fondo. Es importante notar que la fusión entre los surcos curvos y los rectilíneos la hacemos una vez tenemos calculados ambos hillshade. Fusionar mapas de elevación es casi garantía de encontrar discontinuidades en el hillshade de la combinación como ya aprendimos en 'Plegando papel con R'.

El anterior hillshade se desenfoca ligeramente y se aplica con fusión de 'Luz suave' en Photoshop sobre una textura de arena real:



Terminamos añadiendo los hillshade de las islas en sus localizaciones. Por la forma en que hemos generado los surcos no puede haber ninguna interferencia ni artefacto cercano a los litorales (hacer clic para ver tamaño original):



En karesansuimap.tif puede descargarse el achivo TIFF con las capas que generan el mapa terminado. Replicamos el proceso con surcos un poco más estrechos para el archipiélago de las Islas Canarias (hacer clic para ver tamaño original):


~~~

Al iterar sobre círculos de radios crecientes trazados desde el contorno de las islas, el tiempo de proceso aumenta según el cuadrado de este radio lo que enlentece mucho el algoritmo si se parametriza un número alto de surcos.

Cuando dibujábamos horizontes desde la costa funcionar así era obligatorio, pero aquí podemos acelerar enormemente el proceso utilizando cada nuevo anillo calculado como contorno de partida para el siguiente, manteniendo un radio constante.

En el código se incluye este algoritmo alternativo que para el ejemplo de Baleares visto ha ejecutado en mi ordenador 18 veces más rápido que el original. El coste es una ligera pérdida de calidad en la definición de los surcos, mayor cuanto más exteriores sean:



Repositorio con el código R y archivos DEM: 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.