Normalisieren Sie die Rasterwerte auf 0-255


8

Ich muss die erreichten Werte von einem Bandverhältnis auf 0-255 normalisieren. Ich benutze QGIS. Wie mache ich das? Irgendwelche Ideen?


1
Weil es ein Verhältnis ist, pass auf! Wenn es sich beispielsweise um ein Verhältnis von zwei 0-255 Bildern mit ausgeglichenen Histogrammen handelt, liegt die Hälfte der Verhältnisse zwischen 0 und 1, während die andere Hälfte zwischen 1 und 255 liegt (und einige sind undefiniert). Dies ist eine große Diskrepanz in den Bereichen ! Abhängig von Ihrem Zweck ist der Logarithmus des Verhältnisses möglicherweise eine bessere zu berechnende Größe. Besser noch, berechnen Sie log ((1 + band1) / (1 + band2)), um undefinierte Mengen zu vermeiden. Zumindest wird dadurch eine besser lesbare Karte erzeugt.
whuber

Antworten:


11

Sie können das Dienstprogramm gdal_translate verwenden. Verwenden Sie die Option -scale [src_min src_max [dst_min dst_max]] mit src_min und src_max als aktuellen min / max-Werten aus Ihren Daten und 0,255 als dst_min, dst_max. Ohne die eckigen Klammern.

Wenn Sie QGIS mit dem OSGeo4W-Paket installiert haben, haben Sie möglicherweise das Terminalprogramm 'MSYS'. Öffnen Sie das und verwenden Sie einfach den Befehl gdal_translate. Wenn nicht, wählen Sie in QGIS Raster -> Konvertierung -> Übersetzen. Wählen Sie Ihre Dateien und Optionen. Am unteren Rand des Fensters wird der vollständige Befehl gdal_translate angezeigt. Klicken Sie auf Bearbeiten und fügen Sie die Option -scale hinzu.


16

Im Folgenden werden Ihre Daten auf 8 Bit (0-255) erweitert.

smin=0; smax=255

( x - min(x) ) * (smax - smin) / ( max(x) - min(x) ) + smin

Es sollte ziemlich einfach sein, dies in die Rasteralgebra-Syntax in der Software Ihrer Wahl zu übersetzen. Sie müssen nur wissen, welche Min- und Max-Werte in Ihrem Raster enthalten sind. Wenn das Raster das Ergebnis eines Bandverhältnisses ist, kann man sicher -1 zu 1 annehmen, und die Syntax sollte ungefähr so ​​aussehen.

NewRaster = ( OldRaster - -1 ) * 255 / ( 1 - -1 ) + 0

1
+1: Allgemeine Antworten (syntaxunabhängig) finden breite Anwendung. Willkommen auf unserer Seite, Jeffrey!
whuber

Der erste smaxTerm sollte wirklich sein smax - smin- im Beispiel (0-255) spielt es keine Rolle, aber wo smin! = 0
Simbamangu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.