Python / GDAL obtém valores exclusivos em varredura de valor discreto

8

Gostaria de obter alguns conselhos sobre a maneira mais eficiente de retornar uma lista de valores exclusivos de uma varredura de valor discreto usando Python e GDAL.

Eu pensava que a maneira mais óbvia seria examinar a tabela de atributos da varredura, mas se o fizer band.GetDefaultRAT()na banda de um conjunto de dados raster que contém uma tabela de atributos (a tabela é visível no ArcCatalog, de qualquer maneira), o resultado é sempre None:

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

Nesse caso, acabo tendo que varrer cada célula da varredura e criar uma lista de valores exclusivos manualmente. Essa é a única maneira de fazer isso?

Ou existe uma maneira de criar uma tabela de atributos com Python e GDAL e consultá-la para obter uma lista de valores exclusivos?

hendra
fonte
Qual versão do GDAL você está usando?
RK
pergunta estúpida, mas o que é RAT?
nickves 13/09/12
RAT significa Tabela de Atributos de Varredura.
Markus M.

Respostas:

10

Se bem entendi, você pode usar a função np.unique da numpy lib:

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)

ou você pode dar um tiro:

values = np.unique(np.array(ds.GetRasterBand(1).ReadAsArray()))
nickves
fonte
Por que encerrar band.ReadAsArray()uma np.arrayligação? Ele já não retorna uma matriz numpy?
jpmc26
1
Sim. O agrupamento em um np.array não tem desvantagens de desempenho, pois não é uma cópia, mas usa o mesmo endereço de memória e ajuda o IDE a identificar o objeto, para que você ative o preenchimento automático.
25418 nickves