Problem obejmuje 2 części. Po pierwsze, chcesz przekonwertować z 16 bitów na 8 bitów, a robi to opcja -scale programu gdal_translate, jak wspomniano w poprzedniej odpowiedzi.
-scale minOriginal maxOriginal minOutput maxOutput
Drugi problem to problem poprawy kontrastu: podczas przeskalowywania chcesz mieć wysoki kontrast dla interesujących Cię pikseli. OSTRZEŻENIE: Nie ma „magicznego” kontrastu, ponieważ podczas przeskalowywania zwykle tracisz pewne informacje : robi się to w celu poprawy wizualizacji danych, a profesjonalne oprogramowanie robi to w locie bez pisania nowego pliku. Jeśli chcesz dalej przetwarzać swoje dane, twoja „czarna” geotiff zawiera te same informacje co twój jp2 i jest gotowa do przetworzenia. W przypadku obliczania np. Wskaźnika wegetacji należy to zrobić z „oryginalnymi” wartościami współczynnika odbicia, a nie z przeskalowanymi wartościami. Biorąc to pod uwagę, oto kilka kroków, aby stworzyć wizualnie ulepszony obraz 8-bitowy.
@ben dał ci ogólną metodę przeskalowania współczynnika odbicia od 0-1 (pomnożonego przez 10000 przez ten produkt) do 0-255. Jest to bezpieczne (bez wyjątku), ale tylko chmury i niektóre gołe gleby mają naprawdę wysokie współczynniki odbicia, więc nie widać dużo na lądzie (z wyjątkiem gołych gleb) i niczego w wodzie. Dlatego ulepszenia kontrastu powszechnie stosowane na zdjęciach polegają na przyjęciu tylko podzbioru pełnego zakresu. Po bezpiecznej stronie możesz wykorzystać wiedzę, że maksymalny współczynnik odbicia wspólnego materiału powierzchni Ziemi wynosi zwykle poniżej 0,5 / 0,6 (patrz tutajdla niektórych przykładów). Oczywiście zakłada to, że twój obraz został poprawiony pod względem atmosferycznym (obrazy L2A). Jednak zakres odbicia różni się w każdym paśmie widmowym i nie zawsze masz najjaśniejsze powierzchnie Ziemi w swoim obszarze zainteresowania. Oto jak wygląda „bezpieczna” metoda (z maksymalnym współczynnikiem odbicia wynoszącym 0,4, jak 4096 sugerowany przez @RoVo)
Z drugiej strony kontrast można zoptymalizować dla każdego pasma. Możesz zdefiniować ten zakres ręcznie (np. Interesuje Cię kolor wody i znasz maksymalną oczekiwaną wartość współczynnika odbicia wody) lub na podstawie statystyk obrazu. Powszechnie stosowana metoda polega na utrzymywaniu około 95% wartości i „odrzucaniu” (zbyt ciemnych -> 0 lub zbyt jasnych -> 255) pozostałych, co jest podobne do definiowania zakresu na podstawie wartości średniej +/- 1,96 * odchylenie standardowe. Oczywiście jest to tylko przybliżenie, ponieważ zakłada rozkład normalny, ale działa całkiem dobrze w praktyce (z wyjątkiem sytuacji, gdy masz za dużo chmur lub jeśli statystyki wykorzystują pewne wartości NoData).
Weźmy twój pierwszy zespół jako przykład:
średnia = 320
standardowe = 536
95% przedział ufności = [-731: 1372]
ale oczywiście współczynnik odbicia jest zawsze większy od zera, dlatego należy ustawić minimum na 0.
gdal_translate -scale 0 1372 0 255 -ot Byte B01.jp2 B01-scaled.tif
A jeśli masz najnowszą wersję gdal, możesz użyć opcji -scale_ {band #} (0 255 to wyjście domyślne, więc nie powtarzam tego), abyś nie musiał dzielić pojedynczych pasm. Użyłem również vrt zamiast tif jako pliku pośredniego (nie trzeba pisać pełnego obrazu: wystarczy wirtualny)
gdalbuildvrt -separate stack.vrt B04.jp2 B03.jp2 B02.jp2
gdal_translate -scale_1 0 1372 -scale_2 0 1397 -scale_3 0 1430 -ot Byte stack.vrt im_rescaled.tif
Zwróć uwagę, że na twoje statystyki silnie wpływają „artefakty”, takie jak chmury i NoData. Z jednej strony wariancja jest przeszacowana, gdy masz ekstremalne wartości. Z drugiej strony, Twoja średnia jest zaniżona, gdy występuje duża liczba wartości „zerowych” (co sprawia, że automatycznie kontrastowany obraz jest zbyt jasny, jak na przykładzie) i byłby zawyżony, gdyby była większość chmur (co spowodowałoby, że obraz za ciemny). Na tym etapie wyniki nie byłyby zatem najlepsze, jakie można uzyskać.
Zautomatyzowanym rozwiązaniem byłoby ustawienie wartości tła i chmury na „nodata” i obliczenie statystyk bez NoData (zobacz ten post, aby uzyskać szczegółowe informacje na temat obliczania statystyk bez NoData, a ten przykład, aby ustawić wartości większe niż 4000 na NoData, a także ). W przypadku pojedynczego obrazu zwykle obliczam statystyki dotyczące największego możliwego podzbioru wolnego od chmury. W przypadku statystyk z podzbioru, w którym nie ma „NoData” (w lewym górnym rogu obrazu), daje to końcowy wynik. Widać, że zasięg stanowi mniej więcej połowę „bezpiecznego” zakresu, co oznacza, że masz dwa razy większy kontrast:
gdal_translate -scale_1 38 2225 -scale_2 553 1858 -scale_3 714 1745 -ot Byte stack.vrt im_rescaled.tif
Na koniec uwaga: gdal_constrast_stretch wygląda dobrze, ale nie testowałem
gdalinfo -hist merged.tif