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 werden gdal_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 Nodatavalue 0
, außerdem ist und sollte das dunkelste Schwarz in der Eingabe und in der Ausgabe sein 1
. Wenn kein Opazitätsband definiert ist, beträgt die Opazität 100% .
gdaldem hillshade input.tif hillshade.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
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:
# hillshade px=A, opacity is its invert: px=255-A
gdal_calc.py -A ./hillshade.tmp.tif --outfile=./opacity.tif --calc="255-A"
# assigns to relevant bands -b 1 and -b 2
gdalbuildvrt -separate ./final.vrt ./hillshade.tmp.tif ./opacity.tif
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:
# filter the color band, keep greyness of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif --outfile=./color_crop.tmp.tif \
--calc="255*(A>220) + A*(A<=220)"
# filter the opacity band, keep opacity of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif --outfile=./opacity_crop.tmp.tif \
--calc=" 1*(A>220) +(256-A)*(A<=220)"
# gdalbuildvrt -separate ./final.vrt ./color_crop.tmp.tif ./opacity_crop.tmp.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final_crop.tif
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 Via 255*(A>220)
oder schwarze Pixel = 1 Via definieren 1*(A>220)
.
gdal_calc.py -A ./hillshade.tmp.tif --outfile=./color.tmp.tif \
--calc="255*(A>220) + 1*(A<=220)"
# gdal_calc.py -A ./hillshade.tmp.tif --outfile=./opacity_crop.tmp.tif \
# --calc=" 1*(A>220) +(256-A)*(A<=220)".
# gdalbuildvrt -separate ./final.vrt ./color.tmp.tif ./opacity_crop.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final.tif
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
- Der Schwellenwert für flache Bereiche in der
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).
- Eine Verarbeitungsschwelle bei px = [170-220] hat sich als gut erwiesen. Sie bewahrt nahezu 100% der augenfälligen Schatten, die selbst kaum 15-35% der Relieffläche ausmachen.
- Dateigröße> Komprimierung: final.tif von # 1, # 2, # 3 ist ~ 1,3 MB ohne Komprimierung, dann ~ 0,3-0,16 MB nach Komprimierung, 80% Ersparnis!
- Dateigröße> Zuschneiden: Ab 0,326 KB in # 1 erreichen die Zuschneidefarbe und die Deckkraft (# 2) 310 KB, die Schwärzungsfarbe (# 3) 160 KB. Der Cropping-Effekt auf die Dateigröße liegt zwischen 5 und 50% bei einem Schwellenwert von px = 220 und meiner Eingabe.