¿Redefiniendo el valor de nodata a cero en QGIS?

7

Tengo una imagen que hice con un polígono AOI. El área de contorno se configuró en valor de píxel = 0 y tengo un valor de nodata de -32768. Quiero redefinir el valor de nodata en cero. Solía ​​hacer esto con ArcMap fácilmente en la calculadora ráster, pero en QGIS no veo cómo podría hacerlo. ¿Algunas ideas?

vascobnunes
fuente
2
¿Lo quiere solo para visualización o necesita establecerlo en nulo en el que realizará más cálculos de trama?
Maning

Respuestas:

13

En QGIS, puede usar la Calculadora ráster con el siguiente cálculo:

("your_raster" != -32768) * "your_raster"

Con este cálculo, si el valor de la celda es -32768, obtendrá un 0 en esa celda y si es diferente de -32768, la celda mantendrá el valor que tenía.

Egidi
fuente
1
Buena solución Solo una nota para otros que intentan esto: en QGIS, el valor de los nodos para una capa se puede encontrar en Propiedades de la capa, luego en Información (elemento superior), luego desplácese hacia abajo hasta Bandas.
John
Tenga en cuenta que esto no funciona para valores como -3.40282e + 38.
geordie
12

La solución más simple en un solo paso y, en mi opinión, más confiable para reclasificar NoData a cero es usar la herramienta Reclasificar valores de cuadrícula (SAGA) en la caja de herramientas de procesamiento.

Después de seleccionar el ráster para reclasificar, simplemente desplácese hasta la parte inferior del cuadro de diálogo y asegúrese de que la replace no data valuescasilla esté marcada. El valor predeterminado es cero (pero, por supuesto, puede sustituirlo por otro). Luego, desmarque la replace other valuescasilla y deje todos los demás campos solos (por lo que todo lo que está haciendo es asegurarse de que una casilla esté marcada y desmarcar otra, no se requieren otras configuraciones).

MappaGnosis
fuente
1
Estoy de acuerdo. Nada más realmente funcionó para mí (mi valor de nodata era algo así como -3.4e + 38).
ArMoraer
Tenía exactamente el mismo problema que @ArMoraer. Esta fue la solución más fácil, funcionó perfectamente.
Rauni
Solucioné el problema del valor de nodata a 0, pero por el momento aplicó pequeños cambios a mis otros valores ráster
ZKB
Desafortunadamente, este método ya no parece funcionar en QGIS 3.8. El formulario de procesamiento no se ejecutará sin modificar todas las demás configuraciones. Error: "Valor de parámetro incorrecto o faltante: ...."
geordie
11

Encontré una solución para esto. Primero convierto la imagen en una capa vrt (gdalbuildvrt) con -srcnodata 0, luego la traduzco nuevamente a un archivo tif con gdal_translate -a_nodata. Funcionó bien! :)

vascobnunes
fuente
8

Supongo que puedes hacer eso con la calculadora ráster .

Si no con la ayuda de GRASS plugin y r.null, lo hará fácilmente. Esa opción significa que primero tendrá que crear un conjunto de mapas GRASS para importar su ráster.

simo
fuente
55
¿podría explicar cómo hacer eso con la calculadora ráster?
rudivonstaden
1
r.nullLo hice por mí.
metasequoia
8

Al tener el mismo problema, al final utilicé Python directamente; es posible que tenga que ajustar numpy.where para su propósito específico. En el caso a continuación, los valores de los píxeles se mantienen como están si son> = 0, todos los demás píxeles, en este caso solo los que tienen el valor sin datos, se establecen en "0"

import gdal, gdalconst, numpy
maskfile = gdal.Open('C:\Users\max\Desktop\Baltic2.tif', gdalconst.GA_Update)
maskraster = maskfile.ReadAsArray()
maskraster = numpy.where((maskraster >= 0), maskraster, 0 ) 
maskband = maskfile.GetRasterBand(1)
maskband.WriteArray( maskraster )
maskband.FlushCache()
Max
fuente
1

He intentado usar el complemento rastercalc y la Calculadora ráster y ninguno funcionó: error de sintaxis. Lo que funcionó fue la herramienta Deformar y especificar los valores de nodatos de origen y destino (vea la respuesta de underdark a una pregunta similar ¿ Cómo excluir los valores faltantes de la capa ráster? )

Firenze
fuente
1

Lo que funcionó para mí fue exportar el ráster como archivo .asc, luego abrirlo en un editor de texto y usar buscar y reemplazar para reemplazar el antiguo valor NoData con el valor que quería.

Daniel Moraes
fuente
1

En mi caso, era una imagen satelital que necesitaba convertir a 8 bits y no mostraba valores de datos al usar -scale en gdal_translate.

Pude resolver el problema exportando el ráster (capa de clic derecho -> exportar -> guardar capa como ...) a un nuevo archivo como datos renderizados (casilla de verificación en la parte superior de la ventana de diálogo).

bartek2101
fuente
0

Para el script python, puede usar la siguiente línea antes de WriteArray.

maskband.SetNoDataValue(0)
Shiuli Pervin
fuente