domingo, 4 de mayo de 2025

Mejorando un DEM con mapeo de tonos HDR

El mapeo de tonos HDR es una técnica utilizada en fotografía digital para procesar escenas de alto contraste. Busca representar sobre el dispositivo de salida (pantalla, impresión) todo el rango dinámico de la escena capturada, y consiste esencialmente en reducir el contraste global de la imagen (levantando las sombras y bajando las altas luces) a la vez que se preserva o incluso se aumenta el contraste local (micro contraste).

En escenas del mundo real es común encontrar cambios bruscos del gradiente de luminosidad (por ejemplo el marco de una ventana visto desde el interior frente a una vista exterior a pleno día), por lo que se necesitan algoritmos de mapeo de tonos sofisticados.

Sin embargo un DEM representa la superficie natural del terreno donde cambios abruptos de altitud son poco frecuentes, haciendo del mapa de elevación una imagen relativamente poco exigente. Así tiene sentido pensar que un algoritmo básico de mapeo de tonos basado en curvas de contraste podría funcionar con el objetivo de mejorar un DEM.

La ejecución de un mapeo de tonos HDR sobre un DEM nos proporcionará un nuevo mapa de elevación que ya no representará altitudes absolutas sino relativas. Los valores medios de todo el mapa tenderán a igualarse mientras las diferencias de elevación locales se enfatizarán. Esto revelará más fácilmente los gradientes de altitud presentes en el mapa entre montañas, valles, ríos... incluso los más sutiles que originalmente quedaban enmascarados por los incrementos de mayor magnitud.

~~~

Usando la formulación definida en 'Curvas de contraste con R', aplicamos los siguientes pasos para implementar un mapeo de tonos básico:
  • Se aplica un filtro paso bajo gaussiano al DEM original. En cada punto del mapa, esta versión suavizada proporcionará la altitud promedio del área circundante. Cuanto mayor sea el radio del desenfoque la corrección de contraste global será más progresiva y viceversa.
  • Se define una curva en forma de S invertida para reducir el contraste global (no aplicada todavía). Esta curva tendrá el efecto de igualar la altitud media en todo el mapa, aumentando los valores más bajos a la vez que reduce los más altos.
  • Para preservar el contraste local en cada zona del mapa al mismo tiempo que se reduce el contraste global, se aplicarán curvas de contraste individualmente adaptadas a cada píxel. Sus puntos de inflexión se situarán a lo largo de la curva de reducción de contraste anterior, y tomarán como entrada la altitud media obtenida en el primer paso.

Ahora vamos a ejecutar estos pasos sobre un ejemplo práctico. Partimos del siguiente DEM con las elevaciones de la Península Ibérica y países limítrofes obtenido de GEBCO:



Utilizamos un kernel gaussiano para obtener una versión desenfocada del mapa:



Lo que hacemos ahora es programar el set de curvas de mapeo de tonos que utilizaremos para procesar el DEM original. Sobre la curva de reducción de contraste global (definida por los parámetros a1, b1, m1 y E1) se sitúan los puntos de inflexión (a2, b2) de todas las curvas de aumento de contraste (definidas por los parámetros m2 y E2), que son las que serán aplicadas en cada píxel del DEM:



El valor de luminosidad media en el área circundante a cada píxel constituirá el parámetro a2 del punto de inflexión de cada una de estas curvas de contraste, y la salida b2 será la definida por la curva de reducción de contraste global, en este caso un valor constante de 0,5 para todo el rango de entrada. En esencia el mapeo de tonos equivale a un filtro paso alto del relieve del terreno, con una ganancia positiva aplicada sobre los elementos de mayor variabilidad.

El resultado de aplicar el mapeo de tonos al DEM, alternado con el DEM original es el siguiente:



Si aplicamos a ambas versiones el mismo mapa de colores (topo.colors() de R), podemos ver que se puede leer y seguir la geografía con mucho mayor grado de detalle que en el mapa de elevación original (imprescindible hacer clic para ver la comparación en alta resolución):



En particular las cuencas de los ríos se hacen mucho más visibles permitiendo estimarlas sin necesidad de disponer de una capa fluvial específica en el mapa. En este sentido el procesado puede considerarse un REM (Relative Elevation Map) global.

~~~

El método es perfectamente válido para ser aplicado en fotografía, pero por su simplicidad no puede llevarse muy lejos o rápidamente aparecerán halos y saturaciones excesivas, dando un look HDR que rechazará cualquier fotógrafo con criterio.

Aquí una escena con unas sombras muy oscuras tal y como salió de un revelado estándar, seguida de un mapeo de tonos razonablemente mesurado y luego de un mapeo claramente excesivo (hacer clic para ver en alta resolución):

Fuente: galería Sony A7R IV en Dpreview

La curva de reducción de contraste global (en negro) se descentró ligeramente hacia arriba para aplicar en el mismo paso un aumento general de la luminosidad. La única diferencia entre uno y otro mapeo de tonos fue la intensidad del contraste local E2:


~~~

Repositorio con el código R y simulador de curvas en Excel: 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.