La fonte collegata menziona "cambia la sua modalità di fusione in <Moltiplica>" , quindi l'operazione da fare non è una semplice media di input hillhades (per questo, vedi anche Come fare la media di gdal_hillshades? ). È qualcos'altro. Tuttavia, creiamo le 3 diverse sfumature di luce solare:
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
Mantieni il valore più basso di A, B, C
Il primo algoritmo di cui ho pensato è di filtrare e mantenere i pixel più scuri, ovvero i pixel con valori più bassi tra gli input A, B, CA booleani possono farlo:
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))"
L'area dominata dalle ombre ora costituisce più del lato opposto di un lignt centrale, è stata aumentata di 40 ° su ciascun lato. Non come il collegamento fornito, questo algoritmo attuale sembra aver perso troppo l'area illuminata.
Angolo di 315±30⁰
(variazione di angolo minore) piuttosto che la corrente 315±40⁰
sarebbe più piacevole.
Il diagramma seguente è la base dell'equazione. Mostra le sorgenti luminose A, B, C e i confronti booleani per i valori dei pixel A, B, C in ciascuna parte. Le linee di uguaglianza hanno bisogno di un'attenzione speciale per essere incluse nel booleano. Le linee mediane hanno valore 221
per la sorgente di luce perpendicolare. Pensa alle aree di influenza , la fonte di luce più vicina è l'influenza principale e la più lontana l'influenza più debole.
Mantieni valori estremi per A, B, C
Un altro algoritmo booleano potrebbe essere quello di mantenere i valori più estremi, sia i pixel più scuri che quelli più bianchi. Il diagramma seguente aiuta a capire la formula booleana. Per ogni sesto del cerchio, identifica il valore da mantenere tra A, B, C e un valore booleano per selezionare l'area triangolare più la linea di uguaglianza in senso orario, e solo quella . Dà (dall'alto e in senso orario):
--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)"
Se le variazioni degli angoli non sono troppo importanti, potrebbero dare buoni risultati.
Altri booleani
Puoi creare booleani più complessi per coprire tutti i cerchi utilizzando qualsiasi combinazione dei segmenti di bordo. Resta importante che un solo valore su A, B, C sia mantenuto per un segmento.
Moltiplicare
Ho fatto diversi tentativi errati di multiply
valori di pixel senza una formula provata né un successo finale. @Radouxju ha sottolineato che (a*b*c)^(1/3)
(media GEOMETRICA) invece della media ARITMETICA (a*b*c)/(255*255)
potrebbe funzionare. La media geometrica è inferiore o uguale alla media aritmetica, che accentua l'oscurità delle aree ombreggiate. Non l'ho ancora provato.