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
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.
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)"
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
gis.stackexchange.com/a/24798/19460