Source code for db.style.false_colour

'''
 A collection of Python functions for creating false colour representations of objects
'''
import sys

[docs]def calculate_false_colour_num(val_flt, max_flt, min_flt, max_colours_flt): ''' Calculates a colour number via interpolation :param val_flt: value used to calculate colour number :param min_flt: lower bound of value :param max_flt: upper bound of value :param max_colours_flt: maximum number of colours :returns: integer colour number ''' # Floating point arithmetic fails if the numbers are at limits if max_flt == abs(sys.float_info.max) or min_flt == abs(sys.float_info.max) \ or val_flt == abs(sys.float_info.max): return 0 # Ensure denominator is not too large if (max_flt - min_flt) > 0.0000001: return int((max_colours_flt-1)*(val_flt - min_flt)/(max_flt - min_flt)) return 0
[docs]def interpolate(x_flt, xmin_flt, xmax_flt, ymin_flt, ymax_flt): ''' Given x, linearly interpolates a y-value :param x_flt: floating point number to be interpolated :param xmin_flt: minimum value within x_flt's range :param xmax_flt: maximum value within x_flt's range :param ymin_flt: minimum possible value to output :param ymax_flt: maximum possible value to output :returns: interpolated y-value, float ''' return (x_flt - xmin_flt) / (xmax_flt - xmin_flt) * (ymax_flt - ymin_flt) + ymin_flt
[docs]def make_false_colour_tup(i_flt, imin_flt, imax_flt): ''' This creates a false colour map, returns an RGBA tuple. Maps a floating point value that varies between a min and max value to an RGBA tuple :param i_flt: floating point value to be mapped :param imax_flt: maximum range of the floating point value :param imin_flt: minimum range of the floating point value :returns: returns an RGBA float tuple (R,G,B,A) ''' if i_flt < imin_flt or i_flt > imax_flt: return (0.0, 0.0, 0.0, 0.0) saturation = 0.8 hue_flt = (imax_flt - i_flt)/ (imax_flt - imin_flt) vmin_flt = saturation * (1 - saturation) pix = [0.0, 0.0, 0.0, 1.0] if hue_flt < 0.25: pix[0] = saturation pix[1] = interpolate(hue_flt, 0.0, 0.25, vmin_flt, saturation) pix[2] = vmin_flt elif hue_flt < 0.5: pix[0] = interpolate(hue_flt, 0.25, 0.5, saturation, vmin_flt) pix[1] = saturation pix[2] = vmin_flt elif hue_flt < 0.75: pix[0] = vmin_flt pix[1] = saturation pix[2] = interpolate(hue_flt, 0.5, 0.75, vmin_flt, saturation) else: pix[0] = vmin_flt pix[1] = interpolate(hue_flt, 0.75, 1.0, saturation, vmin_flt) pix[2] = saturation return tuple(pix)