Re: [gdal-dev] What Statistics Are Returned By GDAL.Dataset.GetRasterBand(...).GetStatistics(...) ?

2019-10-03 Thread Even Rouault
On jeudi 3 octobre 2019 10:21:58 CEST Peter Willis wrote:
> Hello,
> 
> I am using osgeo.gdal  python module  to load and get stats from image
> bands.
> 
> While working with the, python, 'GetStatistics(...)' function I noticed that
> the returned values seemed a bit off.
> A snippet of code is shown below.

GDAL statistics take into account the nodata value (more exactly pixel whose 
value equals the nodata value are ignored from the statistics). That might 
explain the differences regarding the min, if 0 was the nodata value. But you 
also get differences for the max value

Can you paste the output of gdalinfo on such a file ?

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com
___
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

[gdal-dev] What Statistics Are Returned By GDAL.Dataset.GetRasterBand(...).GetStatistics(...) ?

2019-10-03 Thread Peter Willis
Hello,

I am using osgeo.gdal  python module  to load and get stats from image
bands.

While working with the, python, 'GetStatistics(...)' function I noticed that
the returned values seemed a bit off.
A snippet of code is shown below.

I compared the statistics returned in python by the function to band
statistics in ENVI image processing package for the same input file.
The results are shown below.

I am wondering if I am missing information regarding some key data filtering
feature in GDAL GetStatistics.
What statistics are GDAL returning?


#
## PYTHON CODE
#

src_ds = gdal.Open(image_path )
 
for bnd in range(1, src_ds.RasterCount+1 ):
item = {}
print("[ GETTING BAND ]: ", bnd)
srcband=None
srcband = src_ds.GetRasterBand(bnd)
if srcband is None:
continue

bnddata=srcband.ReadAsArray()

stats = srcband.GetStatistics( 0, 1 )
if stats is None:
continue
else:
print('put the values in a dictionary')
##GDAL stats##
#item['min'] = stats[0]
#item['max'] = stats[1]
#item['mean'] = stats[2]
#item['stdev'] = stats[3]

##numpy array stats##
#item['min'] = bnddata.min()
#item['max'] = bnddata.max()
#item['mean'] = bnddata.mean()
#item['stdev'] = bnddata.std()

###
#END PYTHON CODE
###


/*..

..*/

ENVI Statistics test returns these vales for each channel

ChannelMinMax   MeanStdev
Band 1  0.00  0.441641  0.135938  0.095007
Band 2  0.00  0.42  0.134556  0.096385
Band 3  0.00  0.512614  0.143145  0.108702
Band 4  0.00  0.574203  0.159381  0.128212
Band 5  0.00  1.286870  0.190917  0.159562
Band 6  0.00  1.368695  0.218191  0.191100
Band 7  0.00  1.208142  0.179098  0.158407

/*..

..*/

GDAL GetStatistics in Python 3.0 Returns

[
{'min': 0.10543035715818, 'max': 0.35029646754265, 'mean': 0.19733288299107,
'stdev': 0.03141020073449}, 
{'min': 0.087364979088306, 'max': 0.36481207609177, 'mean':
0.19531263034662, 'stdev': 0.040193729911813}, 
{'min': 0.066563792526722, 'max': 0.40562310814857, 'mean':
0.20773722116063, 'stdev': 0.060965329408999}, 
{'min': 0.057971999049187, 'max': 0.49459338188171, 'mean':
0.23126556845189, 'stdev': 0.084854378172706}, 
{'min': 0.052771702408791, 'max': 0.57949388027191, 'mean':
0.27695694029464, 'stdev': 0.11419731959916}, 
{'min': 0.033055797219276, 'max': 0.67045384645462, 'mean':
0.31645853188616, 'stdev': 0.14756091787453}
]


/*..

..*/

Using NumPy Stats Functions in Python 3.0
np.min()
np.max()
np.mean()
np.std()

Return the following values after converting the previous GDAL bands to
'NumPy.Array' and using the NumPy functions
(Values look similar to ENVI)
[
{'min': 0.0, 'max': 0.44164082, 'mean': 0.13593808, 'stdev': 0.09500719}, 
{'min': 0.0, 'max': 0.4158, 'mean': 0.13455594, 'stdev': 0.09638489}, 
{'min': 0.0, 'max': 0.51261353, 'mean': 0.14314489, 'stdev': 0.108702265}, 
{'min': 0.0, 'max': 0.57420313, 'mean': 0.15938139, 'stdev': 0.12821245}, 
{'min': 0.0, 'max': 1.2868699, 'mean': 0.19091722, 'stdev': 0.15956147}, 
{'min': 0.0, 'max': 1.3686954, 'mean': 0.21819061, 'stdev': 0.1911003}
]



___
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev