Es gibt 2 Teile des Problems. Das erste ist, dass Sie von 16 Bit in 8 Bit konvertieren möchten, und die Option -scale von gdal_translate tut dies, wie in der vorherigen Antwort erwähnt.
-scale minOriginal maxOriginal minOutput maxOutput
Das zweite Problem ist ein Problem der Kontrastverbesserung: Wenn Sie neu skalieren, möchten Sie einen hohen Kontrast für die Pixel haben, an denen Sie interessiert sind. WARNUNG: Es gibt keinen "magischen" Kontrast, da Sie beim erneuten Skalieren normalerweise einige Informationen verlieren : Dies geschieht, um die Visualisierung der Daten zu verbessern, und professionelle Software erledigt dies im laufenden Betrieb, ohne eine neue Datei zu schreiben. Wenn Sie Ihre Daten weiterverarbeiten möchten, enthält Ihr "schwarzer" Geotiff dieselben Informationen wie Ihr jp2 und kann verarbeitet werden. Wenn Sie z. B. den Vegetationsindex berechnen, sollte dies mit den "ursprünglichen" Reflexionswerten erfolgen, nicht mit den neu skalierten. Abgesehen davon sind hier einige Schritte, um ein visuell verbessertes 8-Bit-Bild zu erstellen.
@ben gab Ihnen eine generische Methode, um das Reflexionsvermögen von 0-1 (multipliziert mit 10000 mit diesem Produkt) auf 0-255 neu zu skalieren. Dies ist sicher (kein Ausschluss), aber nur Wolken und einige kahle Böden haben ein wirklich hohes Reflexionsvermögen, sodass Sie an Land nicht viel sehen (außer kahlen Böden) und nichts im Wasser. Daher bestehen Kontrastverbesserungen, die üblicherweise auf Bilder angewendet werden, darin, nur eine Teilmenge des gesamten Bereichs zu erfassen. Auf der sicheren Seite können Sie das Wissen nutzen, dass das maximale Reflexionsvermögen von gewöhnlichem Erdoberflächenmaterial normalerweise unter 0,5 / 0,6 liegt (siehe hier)für einige Beispiele). Dies setzt natürlich voraus, dass Ihr Bild atmosphärisch korrigiert wurde (L2A-Bilder). Der Reflexionsgradbereich ist jedoch in jedem Spektralband unterschiedlich und Sie haben nicht immer die hellsten Erdoberflächen in Ihrem interessierenden Bereich. So sieht die "sichere" Methode aus (mit einem maximalen Reflexionsgrad von 0,4, wie der von @RoVo vorgeschlagene 4096)
Andererseits könnte der Kontrast für jedes Band optimiert werden. Sie können diesen Bereich manuell definieren (z. B. wenn Sie an Wasserfarben interessiert sind und den maximal erwarteten Reflexionsgrad von Wasser kennen) oder basierend auf Bildstatistiken. Eine häufig verwendete Methode besteht darin, ungefähr 95% der Werte beizubehalten und den Rest zu "verwerfen" (zu dunkel -> 0 oder zu hell -> 255), was der Definition des Bereichs basierend auf dem Mittelwert +/- 1,96 * ähnlich ist. Standardabweichung. Dies ist natürlich nur eine Annäherung, da es eine Normalverteilung voraussetzt, aber in der Praxis funktioniert es recht gut (außer wenn Sie zu viele Wolken haben oder wenn die Statistiken einige NoData-Werte verwenden).
Nehmen wir als Beispiel Ihre erste Band:
Mittelwert = 320
std = 536
95% -Konfidenzintervall = [-731: 1372]
Aber natürlich ist das Reflexionsvermögen immer größer als Null, daher müssen Sie das Minimum auf 0 setzen.
gdal_translate -scale 0 1372 0 255 -ot Byte B01.jp2 B01-scaled.tif
Und wenn Sie eine aktuelle Version von gdal haben, können Sie -scale_ {band #} verwenden (0 255 ist die Standardausgabe, ich wiederhole sie also nicht), damit Sie keine einzelnen Bänder teilen müssen. Außerdem habe ich vrt anstelle von tif als Zwischendatei verwendet (es ist nicht erforderlich, ein vollständiges Bild zu schreiben: ein virtuelles reicht aus)
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
Beachten Sie, dass Ihre Statistiken stark von "Artefakten" wie Clouds und NoData beeinflusst werden. Auf der einen Seite wird die Varianz überschätzt, wenn Sie Extremwerte haben. Auf der anderen Seite wird Ihr Durchschnitt unterschätzt, wenn es eine große Anzahl von "Null" -Werten gibt (wodurch das automatisch kontrastierte Bild wie im Beispiel zu hell wird), und es würde überschätzt, wenn es eine Mehrheit der Wolken gäbe (was die Bild zu dunkel). Zu diesem Zeitpunkt wären die Ergebnisse daher nicht die besten, die Sie erhalten könnten.
Eine automatisierte Lösung Set Hintergrund und Cloud - Werte auf „nodata“ sein würde und Ihre Statistiken berechnen , ohne den NoData (siehe diesen Beitrag für Details über die Berechnung der Statistiken ohne NoData, und dies für ein Beispiel , um Werte größer als 4000 bis NoData als auch ). Für ein einzelnes Bild berechne ich normalerweise die Statistiken für die größtmögliche wolkenfreie Teilmenge. Mit Statistiken aus einer Teilmenge, in der keine "NoData" (oben links in Ihrem Bild) vorhanden sind, erhalten Sie das Endergebnis. Sie können sehen, dass die Reichweite etwa die Hälfte der "sicheren" Reichweite beträgt, was bedeutet, dass Sie doppelt so viel Kontrast haben:
gdal_translate -scale_1 38 2225 -scale_2 553 1858 -scale_3 714 1745 -ot Byte stack.vrt im_rescaled.tif
Als letzte Bemerkung sieht gdal_constrast_stretch gut aus, aber ich habe es nicht getestet
gdalinfo -hist merged.tif