UCS is a colour space derived from the CMC(1:1) equations. There is no easy
analytical conversion from UCS to Lab, so look-up tables are used. These have
to be built with a call to im_col_make_tables_UCS(). Once built, these
tables are shared by all UCS functions. You may call im_col_make_tables_UCS()
many times - tables are only built on the first call.

im_col_pythagoras() returns the pythagoran distance between two points in a
colour space. It can be used for finding CIELAB delta E's. im_col_dECMC()
returns the colour difference between two LAB points in CMC(1:1).

An im_col_display structure characterises a CRT screen (see <vips/colour.h>).
You can make up your own (if you can find a TV analyser), or use one of the
structures provied by VIPS in the NULL-terminated array im_col_displays[]. See
the source for disp2XYZ(1) for ideas on extracting a display struct from this
list.

im_make_tables_RGB(3) has a display type as argument, and returns a pointer
to the structure im_col_tab_RGB. This latter contains the matrices to go from
XYZ to luminances (and back), and the tables to go from the luminances (in r,
g, b) to the effective signal values to be applied to the monitor input (and
back). The function returns NULL on error. The IMAGE argument is passed on to
im_malloc() to make the space required for the tables. Pass either NULL (if
you need to free the memory yourself) or an IMAGE descriptor (if you want the
memory to be freed automatically when that descriptor is closed).

im_col_XYZ2rgb() takes a display, a look-up table and an XYZ coordinate are
returns three values in the range 0-255. The extra value oflow is set to 0 if
the specified XYZ position aflls within the display gamut, and to 1 if the
point lies outside the gamut. im_col_rgb2XYZ() is the reverse transformation.