Python / GDAL obtiene valores únicos en ráster de valores discretos

8

Me gustaría obtener algunos consejos sobre la forma más eficiente de devolver una lista de valores únicos de un ráster de valor discreto utilizando Python y GDAL.

Pensé que la forma más obvia sería examinar la tabla de atributos del ráster, pero si lo hago band.GetDefaultRAT()en la banda de un dataset ráster que contiene una tabla de atributos (la tabla es visible en ArcCatalog, de todos modos), el resultado es siempre None:

>>> rat = band.GetDefaultRAT()
>>> rat == None
True

En ese caso, termino teniendo que escanear cada celda del ráster y crear una lista de valores únicos manualmente. ¿Es esta la única manera de hacerlo?

¿O hay una manera de construir una tabla de atributos con Python y GDAL, luego consultar una lista de valores únicos?

hendra
fuente
¿Qué versión de GDAL estás usando por cierto?
RK
pregunta estúpida pero ¿qué es RAT?
nickves
RAT significa tabla de atributos ráster.
Markus M.

Respuestas:

10

Si he entendido bien, puede utilizar np.unique función de lib numpy:

from osgeo import gdal
import numpy as np

ds = gdal.Open("myimg.ext")
band =  ds.GetRasterBand(1)
array = np.array(band.ReadAsArray())
values = np.unique(array)

o puedes hacerlo de una vez:

values = np.unique(np.array(ds.GetRasterBand(1).ReadAsArray()))
nickves
fuente
¿Por qué envolver band.ReadAsArray()en una np.arrayllamada? ¿Ya no devuelve una matriz numpy?
jpmc26
1
Si lo hace Envolverlo en un np.array no tiene inconvenientes de rendimiento, ya que no es una copia pero usa la misma dirección de memoria y ayuda a su IDE a identificar el objeto para que tenga habilitada la autocompletar.
nickves