[gdal-dev] GetStatistics and signed 8-bit IMGs and GeoTIFFs
Jason Roberts
jason.roberts at duke.edu
Wed Sep 23 18:38:54 EDT 2009
Ok, here is how a GDAL caller can detect that a file is signed 8-bit:
>>> band.GetMetadata('IMAGE_STRUCTURE')
{'PIXELTYPE': 'SIGNEDBYTE'}
Thanks to Frank W for giving me a clue about this a week ago that I promptly
forgot about. Sorry about that.
So. does anyone know whether band.GetStatistics is supposed to work for
these signed 8-bit files? If not, I guess I will write a workaround so my
app will calculate statistics itself for signed 8-bit files.
Thanks,
Jason
From: Jason Roberts [mailto:jason.roberts at duke.edu]
Sent: Wednesday, September 23, 2009 4:18 PM
To: 'gdal-dev'
Subject: RE: [gdal-dev] GetStatistics and signed 8-bit IMGs and GeoTIFFs
Someone suggested that I try this with 1.6.2 without saying whether it might
be a bug or by design. The behavior is the same with 1.6.2, using binaries
produced by Tamas Szekeres (thanks Tamas, for providing those on your
website).
Back to the original question: is it a bug or by design? How does the GDAL
caller determine through GDAL that a given file is signed 8-bit or unsigned
8-bit?
Thanks again,
Jason
From: gdal-dev-bounces at lists.osgeo.org
[mailto:gdal-dev-bounces at lists.osgeo.org] On Behalf Of Jason Roberts
Sent: Wednesday, September 23, 2009 3:11 PM
To: 'gdal-dev'
Subject: [gdal-dev] GetStatistics and signed 8-bit IMGs and GeoTIFFs
Is band.GetStatistics() supposed to work with signed 8-bit integer rasters
with the HFA or GTiff driver?
With GDAL 1.6.0, I can successfully create a signed 8-bit raster with the
HFA or GTiff driver using the PIXELTYPE=SIGNEDBYTE option:
>>> a = numpy.array([[-128, -1, 0, 1, 127]], dtype='int8')
>>> a
array([[-128, -1, 0, 1, 127]], dtype=int8)
>>> b = numpy.cast['uint8'](a)
>>> print b
[[128 255 0 1 127]]
>>>
>>> gdal.UseExceptions()
>>> driver = gdal.GetDriverByName('HFA')
>>> dataset = driver.Create(r'C:\Temp\test_int8.img', 5, 1, 1,
gdal.GDT_Byte, ['PIXELTYPE=SIGNEDBYTE'])
>>> band = dataset.GetRasterBand(1)
>>> band.WriteArray(b)
0
>>> del band, dataset, driver
When I look at that raster with ArcGIS, it shows it is signed 8-bit integer
and the five values show up properly. But when I open it with GDAL and call
band.GetStatistics(), it looks like the calculation is performed using
unsigned 8-bit integers:
>>> dataset = gdal.Open(r'C:\Temp\test_int8.img', gdalconst.GA_ReadOnly)
>>> band = dataset.GetRasterBand(1)
>>> band.GetStatistics(False, True)
[0.0, 255.0, 102.2, 95.199579831005551]
I am wondering if this is a bug or by design. If by design, is there any way
my application can tell through GDAL that it is a signed 8-bit file rather
than an unsigned 8-bit file?
Thanks very much for your help,
Jason
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20090923/1320d5b5/attachment.html
More information about the gdal-dev
mailing list