Łupina od orzecha
Każdy zestaw 3 zdjęć poniżej powinien zostać odczytany, np. „Szary (pasmo) + krycie (pasmo) = wynik przezroczysty” . Możesz przetestować te procesy w ciągu kilku minut za pomocą powiązanego pliku makefile obsługiwanego przez github . Proces nr 3 to ten, który zalecam, z progiem między 170 (utrzymuje silne cienie) a 220 (utrzymuje wszystkie cienie). Proces 3 zapewnia najsilniejsze cienie i pozwala uniknąć efektu szarości i wybielenia. W razie potrzeby dostosuj ogólną nieprzezroczystość warstwy. Równania w --calc="<equation>"
można również poprawić w razie potrzeby, używając gdal_calc
.
Aby uzyskać wyluzowane wideo na temat tego podejścia, wyjaśnione przez projektanta Photoshopa, zobacz Dodawanie zacieniowanej ulgi w Photoshopie (16 minut).
tło
gdaldem hillshade
tworzy jednopasmowy plik w skali szarości z zakresem wartości pikseli = [1-255], czyli od najciemniejszych cieni do najbardziej oświeconych pikseli. W przypadku płaskich obszarów px = 221 (#DDDDDD). NoDataValue
piksele otrzymują domyślną wartość dodatnią 0
, również najciemniejsza czerń na wejściu i wyjściu jest i powinna być 1
. Bez zdefiniowanego pasma krycia krycie wynosi 100% .
gdaldem hillshade input.tif hillshade.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
Chcemy zdefiniować i kontrolować 2. pasmo krycia!
Cele
Chcemy jednego zespołu w skali szarości -b 1
, to cień. Poza gdalem jest to szary pas z ciągłym zakresem, np. Px = [1-255]. Możemy wykadrować niepowiązane obszary (# 2) lub przyciemnić go do px = 1 i polegać na pasie krycia (# 3).
Chcemy jednego pasma krycia -b 2
, ogólnie odwrócenia cienia wzgórza lub pokrewnej funkcji tego. Możemy wykadrować nieistotne obszary (# 2). Musi to być ciągły zakres nieprzezroczystości, np. Px = [1-255], w przeciwnym razie nie ma elegancji.
gdal_calc
może być użyty zarówno do wykonywania obliczeń matematycznych na pikselach z plików wejściowych A, B, C ... i sprawdzania wartości logicznych, takich jak A<220
, która zwraca 1 (prawda) lub 0 (fałsz). Pozwala to na rachunek warunkowy. Jeśli warunek jest fałszywy, powiązana część równania zostaje unieważniona.
1. Szary klosz wzgórza przezroczysty
Poniżej przedstawiono bardzo dobre wyniki dwóch pasm ze standardowymi gdal hillshade
szarościami i bielszymi obszarami, które stają się coraz bardziej przejrzyste:
# 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. Optymalizacja za pomocą pseudo-uprawy (-b 1 i -b 2)
2/3 pikseli na -b 1
(skala szarości) staje się niewidoczna gołym okiem po -b 2
dodaniu krycia , ale piksele te zachowują różne bielsze -b 1
i niskie -b 2
wartości krycia . Mogą być wykonane wszystkie białe przezroczyste [255,1]
piksele, co pozwala na lepszy współczynnik kompresji:
# 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. Dalsza optymalizacja -b 1 (przycięcie + czernienie)
Ponieważ mamy do czynienia z progresywnym pasmem krycia -b 2
, możemy stworzyć -b 1
piksele białe px = 255 przez 255*(A>220)
lub czarne px = 1 przez 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
Ten wynik pokazuje silniejsze cienie .
Wynik
Utworzenie przezroczystego cienia wzgórza ma na celu natychmiastowe usunięcie wcześniejszych szarych obszarów równiny i związanego z tym niepożądanego, ale wszechobecnego efektu blaknięcia szarości. Pożądany produkt uboczny to większa kontrola nad końcowym produktem wizualnym. Opisany proces usuwa większość szarych i wszystkich białych pikseli. Kolorowy zwykły obraz tła zachowa wybrane kolory, gdy zostanie nałożony przez przezroczyste do czarnych odcienie wzgórza, tylko zaciemnione obszary zostaną zaciemnione. Porównanie procesu nr 2 (po lewej) i nr 3 (po prawej) poniżej.
Przegląd :
Powiększ, zwróć uwagę na cienie (przed vs po):
Dalsze optymalizacje
Białe obszary : Można również chcieć zachować najbardziej oświecone obszary, aby zwiększyć wrażenie 3D. Byłoby to dosłownie symetryczne tego obecnego podejścia z niewielkimi zmianami progów, a następnie scaleniem obu wyjść przez gdal_calc. Równina byłaby w 100% przezroczysta, a najciemniejsze cienie i najjaśniejsze obszary światła byłyby nieprzezroczyste.
Wygładzanie: Cieniowanie wejściowe może być wstępnie wygładzone, aby uzyskać lepszy efekt końcowy, patrz Wygładzanie DEM za pomocą GRASS?
Composite Hillshade ( Jak stworzyć kompozytowy shadows? ).
Ciekawy jest również zderzający się cień ( opis )
Notatki
- Płaska powierzchnia progu w
gdal hillshade
produkcji jest px = 221 (#DDDDDD = [221221221]), znakowanie powierzchni płaskich. Ponadto piksel cienia wzgórza = 221 dzieli obrazy między nachylonymi w cieniu zboczami (A <221) i jasnymi zboczami (A> 221) pikseli.
- Próg przetwarzania w px = [170-220], a sprawdzonych, utrzymuje prawie 100% oczu-zauważalne cieni, które same w sobie prawie ważne dla 15-35% powierzchni przyłożenia.
- Rozmiar pliku> Kompresja: final.tif z # 1, # 2, # 3 wynosi ~ 1,3 MB bez kompresji, a następnie ~ 0,3-0,16 MB po kompresji, 80% oszczędności!
- Rozmiar pliku> kadrowanie: od .326 KB w # 1 kolor przycięcia i krycie (# 2) osiągają 310 kb, kolor czerni (# 3) do 160 kb. Efekt przycinania dla rozmiaru pliku wynosi między 5 ~ 50% redukcji z progiem przy px = 220 i moim wejściem.