Normalizar valores ráster a 0-255

8

Necesito normalizar los valores obtenidos de una relación de banda a 0-255. Estoy usando QGIS. ¿Cómo hago esto? ¿Algunas ideas?

vascobnunes
fuente
1
Porque es una relación, ¡cuidado! Por ejemplo, si es una proporción de dos imágenes de 0-255 con histogramas ecualizados, entonces la mitad de las proporciones estará entre 0 y 1, mientras que la otra mitad estará entre 1 y 255 (y algunas no estarán definidas): esa es una gran discrepancia en los rangos ! Dependiendo de su propósito, el logaritmo de la relación podría ser una mejor cantidad para calcular; mejor aún, calcule el registro ((1 + banda1) / (1 + banda2)) para evitar cantidades indefinidas. Como mínimo, esto producirá un mapa más legible.
whuber

Respuestas:

11

Puede usar la utilidad gdal_translate. Utilice la opción -scale [src_min src_max [dst_min dst_max]] con src_min y src_max como valores min / max actuales de sus datos y 0,255 como dst_min, dst_max. Sin los corchetes.

Si ha instalado QGIS con el paquete OSGeo4W, puede tener el programa de terminal llamado 'MSYS'. Abra eso y simplemente use el comando gdal_translate. Si no, desde QGIS elija Ráster -> Conversión -> Traducir. Elige tus archivos y opciones. En la parte inferior de la ventana se mostrará el comando completo gdal_translate. Haga clic en editar y agregue la opción de escala.

pensamientos espaciales
fuente
16

Lo siguiente extenderá sus datos a 8 bits (0-255).

smin=0; smax=255

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

Debería ser bastante fácil traducir esto a la sintaxis de álgebra ráster en el software que elija. Solo necesitará saber cuáles son los valores mínimo y máximo en su ráster. Si el ráster es el resultado de una relación de banda, entonces es seguro asumir -1 a 1 y la sintaxis debería verse así.

NewRaster = ( OldRaster - -1 ) * 255 / ( 1 - -1 ) + 0
Jeffrey Evans
fuente
1
+1: Las respuestas generales (sintaxis independiente) tienen una amplia aplicación. ¡Bienvenido a nuestro sitio, Jeffrey!
whuber
El primer smaxtérmino realmente debería ser smax - smin: en el ejemplo (0-255) no importa, ¡pero sí dónde smin! = 0
Simbamangu