martes, 16 de marzo de 2021

Uso del Relief Visualization Toolbox (RVT) con Python y QGIS - Parte 2

 

Continuando con lo visto en la anterior entrada, ahora vamos a terminar de conocer los otros tipos de visualizaciones que podemos generar con la herramienta RVT. Se busca brindar el marco teórico sobre los que se sustentan las funciones y parámetors de la librería de Python que se emplean.


Factor de Vista del Cielo, Factor de Vista Anisotrópico y Apertura

Dentro del RVT, las tres visualizaciones mencionadas se calculan con la misma función, en el caso de la Apertura, la función calcula la Apertura positiva, mientras que en el caso de Apertura Negativa, solo debemos multiplar el DEM por -1 y con este DEM como entrada incluirla en la función. A continuación veremos algunos detalles que involucran a dichas visualizaciones.

Factor de Vista del Cielo - Sky-View Factor (svf)

Es una nueva técnica de visualización en relieve basada en iluminación difusa, en lugar de directa. Utiliza el factor de vista del cielo, un parámetro que corresponde a la porción de cielo visible limitada por el relieve. Utiliza el factor de vista del cielo como una técnica general de visualización del relieve para mostrar las características del relieve. En particular, mostramos que esta visualización es una herramienta muy útil en arqueología, ya que mejora el reconocimiento de características a pequeña escala desde un DEM de alta resolución. La SVF varía entre 0 y 1. Valores cercanos a 1 significan que casi todo el hemisferio es visible, como es el caso de las características expuestas (planos y picos), mientras que valores cercanos a 0 están presentes en sumideros profundos y partes bajas de valles profundos desde donde casi no se ve el cielo (1).

Fig. 1: El factor de vista del cielo se define por la parte del cielo visible (Ω) por encima de un cierto punto de observación visto desde una representación bidimensional (a). El algoritmo calcula el ángulo de elevación vertical del horizonte γi en n (aquí se presentan ocho) direcciones al radio especificado R (b). Fuente (1)


Factor de Vista del Cielo Anisotrópico - Anisotropic Sky-View Factor (asvf)

El factor de vista del cielo anisotrópico asume que el cielo es más brillante en algunas direcciones que en otras. Los pesos se basan en la función coseno de la mitad del ángulo (2). Hay tres parámetros que normalmente deben establecerse: el acimut del peso más alto, el exponente que define el gradiente del peso máximo al mínimo y el peso mínimo posible. El exponente y el peso mínimo definen el nivel de anisotropía: cuanto mayor es el exponente y menor el peso mínimo, más fuerte es el efecto. Esto se ha simplificado a los niveles de anisotropía bajo y alto donde los pesos mínimos posibles son 0.4 y 0.1, y los exponentes son 4 y 8 respectivamente (3).


Apertura - Openness (opns)

La apertura también es un sustituto de la iluminación difusa y se basa en una estimación de un ángulo medio de elevación del horizonte dentro de un radio de búsqueda definido. El valor medio de todos los ángulos cenitales da una apertura positiva, mientras que el valor medio del nadir da una apertura negativa (Fig. 2). La apertura positiva es similar al factor de vista del cielo, con una "sensación más aplanada", mientras que la apertura negativa brinda información adicional sobre las características convexas (4). Debido a que es independiente de la dirección y el sombreado y elimina la topografía general, es útil para el reconocimiento automático de características (3).


Fig. 2: Cálculo de la apertura positiva (α) y negativa (β) a lo largo de dos perfiles (a lo largo de la dirección Este (α 90, β90) y Oeste (α270, β270)) dentro de una distancia radial dada (r) en dos situaciones topográficas diferentes. Fuente (5). 


Uso de RVT

Para calcular las tres visualizaciones descritas debemos usar rvt.vis.sky_view_factor (). Los parámetros son: 
  • dem (numpy.ndarray) - Ingrese el modelo de elevación digital como matriz numérica 2D.
  • resolution (int) - Resolución de nuestro DEM
  • compute_svf (bool)- Si es verdadero (True), calcula el factor de vista del cielo, 
  • compute_asvf (bool)-  Si es verdadero (True), calcula svf anisotrópico, 
  • compute_opns (bool)- Si es verdadero (True), calcula la apertura positiva), 
  • svf_n_dir (int)- Número de direcciones, teniendo como rango valores de 4 a 360, pero el valor de 16 es óptimo para la mayoría de aplicaciones, 
  • svf_r_max (int)-  Radio de búsqueda máximo en píxeles, recomendando valores pequeños como 5-10 si los elementos a distinguir son pequeños,
  • svf_noise (int)- Nivel de eliminación de ruido (0-no eliminar, 1-bajo, 2-medio, 3-alto), 
  • asvf_level(int)- Nivel de anisotropía (1-bajo, 2 -alto), 
  • asvf_dir(int or float)- Dirección de anisotropía (0 es el Norte y 90 es el Este. 315 presenta la dirección habitual para el relieve sombreado), 
  • ve_factor (int or float)- Factor de exageración vertical (Sin exageración = 1, para uso en relieve plano> 1),
  • no_data (int or float)- Valor que representa no_data, todos los píxeles con este valor se cambian a np.nan.,
  • fill_no_data (bool)- Si es Verdadero (True), se llena donde np.nan (no_data) con la media de píxeles circundantes (3x3),
  • keep_original_no_data(bool)- . Si es Verdadero (True), cambia todos los píxeles de salida a np.nan donde dem tiene no_data.

La función genera un diccionario con claves: “svf” (si compute_svf es verdadero), “asvf” (si compute_asvf es verdadero), “opns” (si compute_opns es verdadero). Cada clave contiene una numpy array de visualización.

Se comparte el código:


Los resultados obtenidos son:

Fig. 3: Vista en el QGIS de las salidas de las cuatro visualizaciones ejecutando el código previo


Dominancia Local

La visualización del dominio local de un DEM se basa en calcular, para cada píxel del DEM, qué tan dominante sería un observador parado en ese punto para un área circundante local. La dominancia, como se usa aquí, es la inclinación promedio del ángulo en el que el observador mira hacia la superficie terrestre circundante. Es más alto para puntos en elevaciones locales y más bajo para puntos en depresiones locales. La dominancia local se calcula para píxeles dentro de un radio máximo especificado y una altura de observador especificada sobre la superficie. Para reducir la apariencia ruidosa de la imagen resultante debido a la rugosidad de la superficie a pequeña escala, se puede especificar un radio mínimo. El brillo de los píxeles se deriva de los valores de dominancia local aplicando una extensión de histograma de escala de grises adecuada (6).

Para calcular el dominio local, use la función rvt.vis.local_dominance (). Los parámetros nuevos son:

  • min_rad (int)- Distancia radial mínima (en píxeles) para que el algoritmo comience con el cálculo de visualización, 
  • max_rad(int)- Distancia radial máxima (en píxeles) para que el algoritmo comience con el cálculo de visualización, 
  • rad_inc(int)Pasos de distancia radial en píxeles, 
  • angular_res(int)Paso angular para la determinación del número de direcciones angulares,
  • observer_height(int or float)-  Altura a la que observamos el terreno.
La función genera una matriz numpy 2D de dominio local.

Se comparte el código:


Los resultados obtenidos son:

Fig.4: Resultado en QGIS de la visualización "Dominancia Local"



Iluminación del Cielo - Sky Illumination


Los modelos de iluminación del cielo representan cuantitativamente la luminancia natural del cielo en diversas condiciones atmosféricas (7). Se implementan modelos de cielo uniforme y nublado, ya que ambos ignoran los efectos de sombreado direccional. Los detalles del modo en las sombras se pueden ver usando el modelo de cielo nublado. Los cálculos duran mucho más que para otras visualizaciones, especialmente con grandes distancias máximas de modelado de sombras (3).

Para calcular sky_illumination utilice la función rvt.vis.sky_illumination (). Los parámetros nuevos son: 
  • sky_model(str)- Modelo de cielo, puede ser 'overcast' (nublado) o 'uniform' (uniforme),
  • compute_shadow(bool) - Si es Verdadero (True) agrega sombreado,
  • max_fine_radius(int)- Distancia máxima de modelado de sombras en píxeles,
  • num_directions(int)- Número de direcciones para buscar horizonte,
  • shadow_az(int or float)- Azimut de sombra,
  • shadow_el(int or float)- Elevación de sombra,

Se comparte el código:



Los resultados obtenidos son:

Fig. 5: Resultado en QGIS de la visualización "Iluminación del Cielo".



En esta segunda parte vimos otras visualizaciones que podemos generar con el RVT, a continuación mostramos un gráfico que resume lo mostrado en esta segunda parte.

Fig.6: Funciones del RVT Toolbox empleadas y los resultados obtenidos



Solo estaría pendiente revisar el módulo "Blend" que nos permite hacer combinaciones, espero que en una próxima entrada podamos mostrarlo.


Referencias:

  1. Sky-View Factor as a Relief Visualization Technique (https://www.mdpi.com/2072-4292/3/2/398/htm)
  2. Hill-Shading based on anisotropic diffuse illumination (http://gisak.vsb.cz/GIS_Ostrava/GIS_Ova_2012/sbornik/papers/zaksek.pdf)
  3. RVT manual, version 2.2.1 (https://www.zrc-sazu.si/sites/default/files/rvt_2.2.1_0.pdf)
  4. Visualizing Topography by Openness: A New Application of Image Processing to Digital Elevation Models (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.451.9798&rep=rep1&type=pdf)
  5. Openness as Visualization Technique for Interpretative Mapping of Airborne Lidar Derived Digital Terrain Models (https://www.mdpi.com/2072-4292/5/12/6427/htm)
  6. DEM visualisation techniques: Local dominance (https://blog23d.wordpress.com/2013/06/13/dem-visualisation-techniques-local-dominance/)
  7. General sky models for illuminating terrains (https://www.tandfonline.com/doi/abs/10.1080/13658816.2013.848985)

No hay comentarios.: