I’m starting a little project: making a python function to apply a color scheme to a gray level image.

For that we need: to read the image (job done by gdal), read a color scheme, get image min an max excluding no data values, interpolate the color scheme, and last but not least, transform the single band gray level into an rgb image.

For today, let’s start with the color interpolation function. Color can be interpolated in rgb, hsv, etc. Let’s write something for rgb, easily portable to other color space.

The idea is to consider separately the 3 color axis and interpolate along them:

def interpolateColor(rgbMin, rgbMax, maxDepth, depth):
if depth <= 0:
return rgbMin
if depth >= maxDepth:
return rgbMax
rgb=rgbMin
for iTriplet in range(3):
minVal=rgbMin[iTriplet]
maxVal=rgbMax[iTriplet]
rgb[iTriplet] = int(minVal + (maxVal-minVal)*(depth/float(maxDepth)))
return rgb
def test():
rgbMin=[128, 0 ,34]
rgbMax=[255, 56, 0]
niter=10
for ii in range(niter):
print ii, interpolateColor(rgbMin, rgbMax, niter, ii)

To test it:

import interpolateColor
interpolateColor.test()

You should get the 9 intermediate colors.