Ich bekomme elegante transparente Schirme über eine Kombination gdal
und convert
. Im Vergleich zu den üblicherweise verwendeten grauen Schirmen sind solche transparenten Schirme sehr cool, da sie zwischen dem Kartenhintergrund und anderen oberen Ebenen (Straßen, Gebäude) platziert werden können, um ein 3D-Gefühl zu erzeugen, unabhängig von Art und Farbe des Hintergrunds.
Wie es funktioniert
Der Trick: Ausgehend von einem von erzeugten Graustufenhügel gdal hillshade
besteht der Trick darin, die Werte des Graukanals zu nehmen, jeden Wert zu invertieren und dieses Ergebnis in einen neuen Opazitätskanal zu fließen. Schwarzes Pixel [0,0,0] wird [0,0,0,255] (Opazität = 255), graues Pixel [120,120,120] wird niedriger, wird [120,120,120,135] (Opazität = 135, auch bekannt als 255-120), weißes Pixel [255,255,255] transparent werden [255,255,255,0] (Deckkraft = 0, auch bekannt als 255-255) und so weiter. Die Schattierungen der Hügel sind undurchsichtig und schwarz , die Ebenen werden zunehmend (weiß) transparent . Konzeptionell ist die Bandgleichung des Pixels wie folgt:
alpha_value([0]) = 255-0 = 255; // black pixels get full opacity
alpha_value([Grey]) = 255-Grey;
// grey pixels get 255-GreyValue opacity.
alpha_value([255]) = 255-255 = 0 // white pixels get null opacity !
Ein entspanntes Video zu diesem Ansatz, das von einem Photoshop-Designer erklärt wurde, finden Sie unter Hinzufügen von schattierten Reliefs in Photoshop (16 Minuten).
Frage
Unter einem ETOPO oder SRTM abgeleitet grau-basiertem Schummerungs ( gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
, Datei finden Sie hier zum Download ) als Eingabe ...
... Wie mache ich den oben genannten Trick über GDAL oder einen anderen nicht-GIS-destruktiven Weg für solche .tif-Dateien?
Beachten Sie, dass ich GIS-Eigenschaften behalten möchte (Geolokalisierung).
gdaldem hillshade etopo_crop.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdal_tranlate
mit einer Kombination aus -b Band , -mask Band , -expand grey | rgb | rgba zusammen mit der Formelopacity=-(px_grey_value)+255
ist das der richtige Weg, aber ich habe noch nie Bands angerührt und bin immer noch ziemlich ratlos.Antworten:
Nussschale
Jeder Satz von 3 Bildern sollte wie folgt gelesen werden: "Grau (Band) + Opazität (Band) = transparentes Ergebnis" . Sie können diese Prozesse innerhalb von Minuten über das zugehörige von Github gehostete Makefile testen . Prozess Nr. 3 ist derjenige, den ich empfehle, mit einer Schwelle zwischen 170 (behält starke Schatten bei) und 220 (behält alle Schatten bei). Prozess 3 liefert die stärksten Schatten und vermeidet den Grau-Weiß-Effekt. Passen Sie die Gesamtdeckkraft der resultierenden Ebene nach Bedarf an. Die Gleichungen in
--calc="<equation>"
können bei Bedarf auch mit verbessert werdengdal_calc
.Ein entspanntes Video zu diesem Ansatz, das von einem Photoshop-Designer erklärt wurde, finden Sie unter Hinzufügen von schattierten Reliefs in Photoshop (16 Minuten).
Hintergrund
gdaldem hillshade
Erzeugt eine Ein-Band-Graustufendatei mit einem Pixelwertebereich von [1-255], auch bekannt als von den dunkelsten Schatten bis zu den hellsten Pixeln. Für flache Bereiche ist px = 221 (#DDDDDD).NoDataValue
Pixel bekommen standardmäßig einen Nodatavalue0
, außerdem ist und sollte das dunkelste Schwarz in der Eingabe und in der Ausgabe sein1
. Wenn kein Opazitätsband definiert ist, beträgt die Opazität 100% .Wir wollen ein 2. Opazitätsband definieren und steuern!
Ziele
Wir wollen eine Graustufen-Band
-b 1
, das ist der Schatten. Außerhalb von GDAL ist dies ein grauer Streifen mit kontinuierlichem Bereich wie px = [1-255]. Wir können nicht relevante Bereiche ausschneiden (# 2) oder auf px = 1 schwärzen und uns auf das Opazitätsband verlassen (# 3).Wir wollen ein Opazitätsband
-b 2
, im Allgemeinen die Umkehrung des Schattens oder eine verwandte Funktion davon. Wir können nicht relevante Bereiche ausschneiden (# 2). Es muss ein kontinuierlicher Bereich von Opazitäten wie px = [1-255] sein, ansonsten gibt es keine Eleganz.gdal_calc
kann verwendet werden, um Pixel aus den Eingabedateien A, B, C ... zu berechnen und um boolesche Werte zu überprüfen, z. B.A<220
, die 1 (true) oder 0 (false) zurückgeben. Dies ermöglicht eine bedingte Berechnung. Wenn die Bedingung falsch ist, wird der zugehörige Teil der Gleichung aufgehoben.1. Grauer Hügelschirm transparent gemacht
Das Folgende liefert ein sehr gutes Zwei-Band-Ergebnis, wobei die Standard-
gdal hillshade
Grau- und Weißbereiche immer transparenter werden:2. Optimierung über Pseudo-Crop (-b 1 & -b 2)
2/3 der Pixel auf
-b 1
(Graustufen) werden für bloße Augen unsichtbar, wenn die Deckkraft-b 2
hinzugefügt wird. Diese Pixel behalten jedoch verschiedene weißere-b 1
und niedrigere Deckkraftwerte bei-b 2
. Sie können aus allen weißen transparenten[255,1]
Pixeln bestehen, was eine bessere Komprimierungsrate ermöglicht:3. Weitere -b 1 -Optimierung (Zuschneiden + Schwärzen)
Da wir ein progressives Opazitätsband haben
-b 2
, auf das wir uns verlassen können, können wir-b 1
Pixel entweder als weiße Pixel = 255 Via255*(A>220)
oder schwarze Pixel = 1 Via definieren1*(A>220)
.Dieses Ergebnis zeigt stärkere Schatten .
Ergebnis
Die Schaffung eines transparenten Hügelschattens hat zum unmittelbaren Ziel, die ehemaligen Grauzonen der Ebene und den damit verbundenen unerwünschten, aber allgegenwärtigen Grauverblassungseffekt zu beseitigen . Das gewünschte Nebenprodukt ist eine erhöhte Kontrolle über das visuelle Endprodukt. Der beschriebene Prozess entfernt die meisten grauen und alle weißen Pixel. Das farbige Hintergrundbild behält seine ausgewählten Farben bei, wenn es von transparenten bis schwarzen Hügeln überlagert wird. Nur die schattierten Bereiche werden abgedunkelt. Vergleich von Prozess Nr. 2 (links) und Nr. 3 (rechts) unten.
Überblick :
Zoom, bitte beachte die Schatten (vorher gegen nachher):
Weitere Optimierungen
Weiße Bereiche : Möglicherweise möchten Sie auch die hellsten Bereiche beibehalten, um das 3D-Feeling zu verbessern. Es wäre buchstäblich die Symmetrie dieses aktuellen Ansatzes mit geringfügigen Schwellenwertänderungen, dann eine Zusammenführung beider Ausgänge über gdal_calc. Die Ebene wäre zu 100% transparent, die dunkelsten Schatten und die hellsten aufhellenden Bereiche undurchsichtig.
Glätten: Der Eingabehügel kann vorab geglättet werden, um ein besseres Endergebnis zu erzielen. Siehe Glätten von DEM mit GRASS?
Composite Hillshade ( Wie erstelle ich einen Composite Hillshade? ).
Interessant ist auch der steile Schatten ( Beschreibung )
Anmerkungen
gdal hillshade
Ausgabe ist px = 221 (#DDDDD = [221,221,221]), wodurch flache Bereiche markiert werden. Außerdem unterteilt px = 221 von hillshade die Bilder in Pixel mit Schattenschrägen (A <221) und Lichtschrägen (A> 221).quelle
Eine andere Möglichkeit, dasselbe Ergebnis einer nicht grauen Leinwand zu erzielen, die sich besser für die Kombination mit anderen Ebenen eignet, ist die Option 'kombiniert' in gdaldem.
Es führt einen Hang- und Hügelschatten aus und kombiniert die beiden in einem Arbeitsgang. Bereiche mit einer Neigung von 0 sind weiß. Bereiche mit einem Neigungswinkel von 90 Grad sind für den Neigungsschatten schwarz, wobei durch die Schattierungsschicht eine gewisse Beleuchtung hinzugefügt wird.
gdaldem hillshade -combined -compute_edges infile outfile.tif
Verwenden Sie dann einen Zusammensetzungsmodus mit mehreren Ebenen, um diese über andere Ebenen zu "drapieren".
Standard / Kombiniertes Hillshading
Kombinierte Schattierung multipliziert mit OSM-Basisschicht (Deckkraft ca. 50%)
quelle
gdal
+convert
basierter WorkflowEs gibt eine
gdal
+convert
Lösung, die gute visuelle Ergebnisse liefert. Das Problem bei dieser Lösung ist, dassconvert
geografische Informationen zerstört werden, die Sie dann wiederherstellen müssen. Es erhöht die Anzahl der auszuführenden Aktionen.Erläuterungen zu Befehl 4 finden Sie unter: https://stackoverflow.com/a/23018544/1974961
quelle