1 votos

¿Cómo obtener la nanomedia de cada píxel en una imagen rasterizada múltiple?

Escribí un código basado en rasterio y numpy que obtiene la nanomedia de cada píxel de múltiples imágenes rasterizadas. Primero lo leo usando rasterio, luego convierto el array a float32 para poder poner los valores NaN (-32768) en np.nan. Luego agrego cada imagen a una lista.

Cuando la lista está llena. A continuación, la calculo utilizando np.nanmean de numpy. Lo suficientemente real como para que los valores NaN fueran ignorados en el cálculo de la imagen de salida. Sin embargo, no entiendo los valores de la imagen resultante. Las imágenes rasterizadas de entrada tienen un valor de 0 a 5. Mi salida tiene un valor de 0 a 20000.

Nota: Las imágenes de entrada son realmente Float32 en QGIS. No sé por qué se convirtió en Int16 en rasterio.

  1. ¿Por qué se ha convertido a Int16?
  2. ¿Cómo puedo corregir esto? Quiero una salida con nanomedia de las entradas. Los valores reales deben estar entre 0 - 5 también.

    import rasterio from glob import glob import numpy as np

    path = '/my/directory/*.nc' output = 'output/AOT_L2_Mean_MAM.tif' datasets = glob(path)

    rasters = [] for data in datasets: ds = rasterio.open(f'netcdf:{data}:AOT_L2_Mean') band = ds.read(1)

    print(band.dtype)

    band = band.astype('float32')
    band[band==-32768] = np.nan
    rasters.append(band)

    out = np.nanmean(rasters, axis=0)

    with rasterio.open( output, 'w', driver='GTiff', height=out.shape[0], width=out.shape[1], count=1, dtype=out.dtype, crs='EPSG:4326', # +proj=latlong ) as dst: dst.write(out, 1)

1voto

DEW Puntos 44

¿Lo has probado?

band = ds.read(1, masked=True)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X