11 votos

¿Cómo crear una sombra compuesta?

El concepto de sombra de colina compuesta es combinar varias sombrillas con diferente orientación de la luz solar para evitar el punto ciego. Para ello, es necesario combinar 3 imágenes de colinas con 315 (luz solar del noroeste, capa por defecto), +355 capa, +275 luz solar, respectivamente. Esto aumenta los detalles y la elegancia, como se muestra a continuación. la descripción está aquí .

enter image description here

Utilizando cualquier archivo srtm, los 3 hillshades iniciales se pueden hacer a través de :

gdaldem hillshade input.tif hillshades_A.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_B.tmp.tif -s 111120 -z 5 -az 355 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_C.tmp.tif -s 111120 -z 5 -az 275 -alt 60 -compute_edges

0 votos

11voto

ohzeadae Puntos 65

La fuente vinculada menciona "cambiar su modo de fusión a < Multiplicar >" por lo que la operación a realizar no es un simple promedio de las colinas de entrada (para ello, véase también ¿Cómo promediar gdal_hillshades? ). Es otra cosa. Sin embargo, vamos a crear las 3 sombras de luz solar diferentes:

gdaldem hillshade input.tif hillshades_A.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_B.tmp.tif -s 111120 -z 5 -az 355 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_C.tmp.tif -s 111120 -z 5 -az 275 -alt 60 -compute_edges

enter image description here

Mantener el valor más bajo de A,B,C

El primer algoritmo que pensé es filtrar y mantener los píxeles más oscuros, es decir, los píxeles con valores más bajos entre la entrada A,B,C.Un booleano puede hacer eso :

gdal_calc.py -A hillshades_A.tmp.tif  -B hillshades_B.tmp.tif -C hillshades_C.tmp.tif --outfile=./hillshades_xl.tmp.tif \
   --calc="(A*(A<=B)*(A<=C)+ B*(B<A)*(B<=C)+ C*(C<A)*(C<B))"

El área dominada por las sombras ahora constituyen más que el lado opuesto de un lignt central, se ha incrementado en 40 en cada lado. No como el enlace proporcionado, este algoritmo actual parece perder demasiado el área de iluminación.

Ángulo de 315±30 (menor variación del ángulo) en lugar de la corriente 315±40 lo haría mejor.

El diagrama siguiente es la base de la ecuación. Muestra las fuentes de luz A, B, C, y las comparaciones booleanas para los valores de los píxeles A, B, C en cada parte. Las líneas de igualdad necesitan una atención especial para ser incluidas en la booleana. Las líneas de la mediana tienen valor 221 para la fuente de luz perpendicular. Piensa en áreas de influencia La fuente de luz más cercana es la principal influencia, y la más lejana la más débil.

enter image description here

Mantener los valores extremos de A,B,C

Otro algoritmo booleano podría ser mantener los valores más extremos, tanto los píxeles más oscuros como los más blancos. El siguiente diagrama ayuda a entender la fórmula booleana. Para cada sexta parte del círculo, identifica el valor a mantener de A,B,C, y un booleano para seleccionar el área triangular más la línea de igualdad de las agujas del reloj, y sólo que . Da (desde arriba y en el sentido de las agujas del reloj) :

--calc="A*(A>B)*(A>=C) + C*(C>A)*(A>=221) + B*(C>A)*(C>=221) + A*(A<B)*(B<=221) + C*(B>A)*(A<=221) + B*(B>A)*(C<=221)"

enter image description here

Si las variaciones de los ángulos no son demasiado importantes, podría dar buenos resultados.

Otros booleanos

Puede crear booleanas más complejas para cubrir los círculos completos utilizando cualquier combinación de segmentos de borde. Sigue siendo importante que sólo un valor de A,B,C se mantiene para un segmento.

Multiplicar

Hice varios intentos fallidos a multiply valores de los píxeles sin fórmula probada ni éxito final. @Radouxju señaló que (a*b*c)^(1/3) (media GEOMÉTRICA) en lugar de la media ARITMÉTICA (a*b*c)/(255*255) puede funcionar. La media geométrica es inferior o igual a la media aritmética, lo que acentúa la oscuridad de las zonas sombreadas. Todavía no lo he probado.

0 votos

Intenté resumir mi aprendizaje conceptual sobre los compuestos y cómo alguien podría personalizarlos. La fórmula real de "multiplicar" sigue siendo desconocida para mí.

0 votos

¿Por qué no multiplicar los valores y reescalar los resultados?

0 votos

No lo he probado. Qué fórmula lo haría, (A*B*C)/(255*255) ?

0voto

Florin Andrei Puntos 412

Una herramienta que puede hacer esto (entre otras) es la visualización basada en factores de Sky-View ( http://iaps.zrc-sazu.si/en/svf#v ). Calcula varios parámetros de un terreno. Es muy bueno.

0voto

ohzeadae Puntos 65

Gdal_calc 's numpy parece tener más operadores :

+ addition 
- subtraction 
/ division 
* multiplication 
= equals to 
< less than 
> larger than 
! not equal to 
? if clause 
M maximum of two values 
m minimum of two values 
B bit level operator

No he encontrado ejemplos claros y adecuados de cómo se deben utilizar los operadores exóticos. Si tienes algo, no dudes en compartirlo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X