Monday 20 June 2016

Python/GDAL get unique values in discrete-valued raster


I would like to get some advice on the most efficient way to return a list of unique values of a discrete-valued raster using Python and GDAL.


I had thought that the most obvious way would be to examine the raster's attribute table, but if I do band.GetDefaultRAT() on the band of a raster dataset that contains an attribute table (the table is visible in ArcCatalog, anyway), the result is always None:


>>> rat = band.GetDefaultRAT()

>>> rat == None
True

In that case, I end up having to scan through each cell of the raster and build a list of unique values manually. Is this the only way to do it?


Or is there a way to build an attribute table with Python and GDAL, then query it for a list of unique values?



Answer



If I understood correctly, you can use np.unique function from 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)

or you can one-shot it:


values = np.unique(np.array(ds.GetRasterBand(1).ReadAsArray()))

No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...