Wie erstelle ich einen zusammengesetzten Hügelschatten?

10

Das Konzept des Composite Hillshade besteht darin, mehrere Hillshades mit unterschiedlicher Sonnenlichtausrichtung zu kombinieren, um toten Winkel zu vermeiden. Es müssen 3 Hillshades-Bilder mit 315⁰ (NW-Sonnenlicht, Standardebene), + 355⁰-Ebene und + 275⁰ Sonnenlicht zusammengeführt werden. Dies erhöht die Details und die Eleganz, wie unten gezeigt. Eine vollständige Beschreibung ohne GIS finden Sie hier .

Geben Sie hier die Bildbeschreibung ein

Mit einer beliebigen srtm-Datei können die 3 anfänglichen Hillshades über Folgendes ausgeführt werden:

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
Hugolpz
quelle

Antworten:

9

In der verknüpften Quelle wird erwähnt, dass der Fusionsmodus auf <Multiplizieren> geändert wird. Daher handelt es sich bei der auszuführenden Operation nicht um einen einfachen Durchschnitt der eingegebenen Hillshades (siehe auch Wie man gdal_hillshades mittelt? ). Es ist etwas anderes. Lassen Sie uns jedoch die 3 Hügelschatten in verschiedenen Sonnenlichtrichtungen erstellen:

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

Geben Sie hier die Bildbeschreibung ein

Behalten Sie den niedrigsten Wert von A, B, C bei

Der erste Algorithmus, über den ich nachgedacht habe, besteht darin, die dunkelsten Pixel zu filtern und beizubehalten, auch bekannt als die Pixel mit niedrigeren Werten unter den Eingaben A, B, CA. Boolesche Werte können dies tun:

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

Der von Schatten dominierte Bereich bildet jetzt mehr als die gegenüberliegende Seite eines zentralen Lichts, er wurde auf jeder Seite um 40 ° vergrößert. Nicht als Link bereitgestellt, scheint dieser aktuelle Algorithmus den Aufklärungsbereich zu sehr zu verlieren.

Winkel von 315±30⁰(kleinere Winkelvariation) eher als Strom 315±40⁰würde besser tun.

Das folgende Diagramm ist die Grundlage der Gleichung. Es zeigt die Lichtquellen A, B, C und die Booleschen Vergleiche für die Pixelwerte A, B, C in jedem Teil. Gleichheitslinien benötigen besondere Aufmerksamkeit, um in den Booleschen Wert aufgenommen zu werden. Die Mittellinien haben einen Wert 221für die senkrechte Lichtquelle. Denken Sie an Einflussbereiche , die nächstgelegene Lichtquelle ist der Haupteinfluss und die weiteste der schwächste Einfluss.

Geben Sie hier die Bildbeschreibung ein

Halten Sie die Extremwerte für A, B, C ein

Ein anderer boolescher Algorithmus könnte darin bestehen, die extremsten Werte beizubehalten, sowohl die dunkelsten als auch die weißesten Pixel. Das folgende Diagramm hilft bei der Booleschen Formel. Für jedes Sechstel des Kreises wird der Wert angegeben, der von A, B, C und einem Booleschen Wert beibehalten werden soll, um den dreieckigen Bereich plus die Gleichheitslinie im Uhrzeigersinn auszuwählen, und nur diesen . Es gibt (von oben und im Uhrzeigersinn):

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

Geben Sie hier die Bildbeschreibung ein

Wenn die Winkelschwankungen nicht zu wichtig sind, kann dies zu guten Ergebnissen führen.

Andere Boolesche

Sie können komplexere Boolesche Werte erstellen, um die gesamten Kreise mit einer beliebigen Kombination der Rahmensegmente abzudecken. Es bleibt wichtig, dass nur ein Wert von A, B, C für ein Segment beibehalten wird.

Multiplizieren

Ich habe mehr failled Versuche zu multiplyPixelwert ohne eine bewährte Formel noch endgültigen Erfolg. @ Radouxju wies darauf hin, dass (a*b*c)^(1/3)(GEOMETRISCHER Mittelwert) anstelle des ARITHMETISCHEN Mittelwerts (a*b*c)/(255*255)funktionieren könnte. Das geometrische Mittel ist niedriger oder gleich dem arithmetischen Mittel, wodurch die Dunkelheit der schattierten Bereiche hervorgehoben wird. Ich habe es noch nicht getestet.

Hugolpz
quelle
Ich habe versucht, mein konzeptionelles Lernen auf Composite zusammenzufassen und wie jemand es anpassen könnte. Die wahre Formel für "multiplizieren" bleibt mir unbekannt.
Hugolpz
Warum nicht einfach die Werte multiplizieren und die Ergebnisse neu skalieren?
whuber
Habe es nicht versucht! Welche Formel würde es tun (A*B*C)/(255*255)?
Hugolpz
1
Das wäre ein guter Anfang :-).
whuber
1
wird nicht mit dem GEOMETRISCHEN Mittelwert anstelle des ARITHMETISCHEN Mittelwerts "multipliziert". (a b c) ^ (1/3). Das geometrische Mittel ist niedriger oder gleich dem arithmetischen Mittel, wodurch die Dunkelheit der schattierten Bereiche hervorgehoben wird.
Radouxju
0

Ein Tool, das dies (unter anderem) kann, ist die Sky-View Factor Based Visualization ( http://iaps.zrc-sazu.si/en/svf#v ). Berechnen Sie mehrere Parameter eines Geländes. Ist verdammt gut.

Dimitris Poursanidis
quelle
-1

Gdal_calcs Nummer scheint mehr Operatoren zu haben :

+ 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

Ich habe keine klaren und richtigen Beispiele dafür gefunden, wie die exotischen Operatoren verwendet werden sollten. Wenn Sie etwas haben, können Sie es gerne teilen.

Hugolpz
quelle