Delbert Franz wrote:
> I have been working to display an image of a USGS 7.5 minute quad sheet.
> These are provided at various locations about the Web. Since the
> range of colors on these maps is limited, the *.tif files appear to
> use an indexed color map wherein each pixel has a value 0 to 255 and
> the color is found from a table with 256 entries having triplets of
> the RGB in the range of 0-255. I have not been able to sort out
> how to get the gdal package to give me the color map from within python, so I
> dumped it
> from the image file using gdalinfo and then cut and pasted to get
> the following script:
>
> ---------------------------------------------------------------------------------
> import numpy as np
> import matplotlib.pyplot as plt
> import matplotlib.cm as cm
> from matplotlib.colors import ListedColormap
from matplotlib.colors import NoNorm
>
> import osgeo.gdal as gdal
> from osgeo.gdalconst import *
>
> gd = gdal.Open('o37122d1.tif')
>
> #Setup to compute the colormap from the RGB triplets from the geotif file
> div = np.zeros( (256,3), np.float32)
>
> div = 255.0
> ctab = np.array([
> [ 255,255,255],
> [ 0,0,0],
> [ 255,255,255],
> [ 91,159,230],
> [ 230,45,30],
> [ 162,96,71],
> [ 210,255,177],
> [ 197,101,197],
> [ 255,240,0],
> [ 202,225,245],
>
> ...snip.... (deleted many lines:)
> [ 250,202,250],
> [ 230,230,230],
> [ 222,167,146],
> [ 255,255,255],
> [ 255,255,255] ], dtype=np.uint8)
>
> #Compute colors in range 0.0 to 1.0.
> fctab= ctab/div
>
> usgscm = ListedColormap(fctab, name='usgs',N=None)
>
>
> doq = gd.ReadAsArray()
> # doq proves to be a uint8 array: 8802 rows and 7066 columns
>
> # Cut out a subset from the main array--to large to display and
> # slow as 'molasses in January' to process:)
> suba = doq[0:1101 ,0:1801 ]
>
> fig = plt.figure()
> ax = fig.add_subplot(111)
> ax.imshow(suba, cmap=usgscm, origin='upper')
Instead, try:
ax.imshow(suba, cmap=usgscm, norm=NoNorm(), origin='upper')
>
> plt.show()
> ---------------------------------------------------------------------------------
> This script does give me an image--but in badly wrong colors:( The script
> does
> properly display gray-scaled Digital Ortho-quadrangles using cm.gray as the
> color
> map in imshow. Consequently something is not quite correct with respect to
> the
> definition or the use of the color map. It appears that each map, and there
> are about 56,000 of them available on one site, could have its own color map.
> Thus my application must be able to compute a color map unique to each of the
> topographic maps.
>
> Questions:
>
> 1. What am I missing to get imshow to pick out the correct colors from the
> color map?
The default norm will scale your inputs; specifying the norm as a NoNorm
instance will pass the integers through directly, so they will be used
as indices into the colormap.
>
> 2. Should I be using the name, usgs, given in the ListedColormap instance
> someplace?
> Not clear to me what role that name plays.
>
None, really. I can imagine ways in which it could be useful, but
unless you know you need it, consider it optional.
> 3. Is there a way to use ctab directly in the ListedColormap instance? Class
> Colormap
> has a bytes argument, False by default, but I am not yet sure if it has any
> bearing
> on my problem.
No, sorry, but the bytes argument is only in the __call__ method, where
it is used to improve efficiency within mpl. There is no facility for
using ints in the lookup table, and no recognition of 0-255 ints within
mpl colorspecs, hence no way to feed your ctab in directly. Even if
there were, though, I don't think it would make much difference in
plotting time.
Eric
>
> I am using Matplotlib 0.98 with the latest numpy, and gdal. I am not using
> Basemap, after some study, because it contains far more "horsepower" than my
> simple topographic-map viewer application requires. Also, this is my first
> foray into "image processing". I am finding the learning curve a bit steep,
> as usual, with multiple names for the same thing popping up in descriptions
> from various sources--business as usual in the computer business:)
>
> Thanks from a happy matplotlib user in California!
>
> Delbert
>
>
> -------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://sourceforge.net/services/buy/index.php
> _______________________________________________
> Matplotlib-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users