Come creare una collina composita?


10

Il concetto di paralume composito è quello di combinare più paralumi con diversi orientamenti della luce solare per evitare punti ciechi. Richiede di unire 3 immagini di sfumature di collina rispettivamente con 315⁰ (luce del sole NO, livello predefinito), + 355⁰, + 275⁰ di luce solare. Questo aumenta i dettagli e l'eleganza, come mostrato di seguito. Una descrizione completa non GIS è qui .

inserisci qui la descrizione dell'immagine

Usando qualsiasi file srtm, i 3 punti iniziali iniziali possono essere eseguiti tramite:

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

Risposte:


9

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

inserisci qui la descrizione dell'immagine

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 221per 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.

inserisci qui la descrizione dell'immagine

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)"

inserisci qui la descrizione dell'immagine

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 multiplyvalori 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.


Ho cercato di riassumere il mio apprendimento concettuale sul composito e su come qualcuno potesse personalizzarlo. La vera formula per "moltiplicare" non mi è nota.
Hugolpz,

Perché non moltiplicare i valori e ridimensionare i risultati?
whuber

Non ci ho provato! Quale formula lo farebbe (A*B*C)/(255*255)?
Hugolpz,

1
Sarebbe un buon inizio :-).
whuber

1
non "moltiplica" usando la media GEOMETRICA invece della media ARITMETICA. (a b c) ^ (1/3). La media geometrica è inferiore o uguale alla media aritmetica, che accentua l'oscurità delle aree ombreggiate.
Radouxju,

0

Uno strumento che può farlo (tra gli altri) è la visualizzazione basata sui fattori Sky-View ( http://iaps.zrc-sazu.si/en/svf#v ). Calcola diversi parametri di un terreno. È dannatamente buono


-1

Il numpy di Gdal_calc sembra avere più operatori :

+ 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

Non ho trovato esempi chiari e corretti su come usare gli operatori esotici. Se hai qualcosa, sentiti libero di condividere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.