This is the development area for IMDI, the Integer Multi-Dimensional Interpolation routines. They provide a flexible and high performance system for applying color transforms to typical raster pixel data. Because they provide a means of applying arbitrary combination dependent mappings of multi-channel pixel data, there are many other possible uses for these sorts of routines as well, including high quality matting/compositing. For instance, one could create a smooth, proportional "chroma key" type of matt for matting one RGB image onto another by creating a 6 channel to 3 dimensional transform, that its applied to each pair of pixels from the source images and produces one combined output pixel. Additional input or output alpha channels are easy to add by simply adding more input and/or output dimensions. The matting calculatons can be almost arbitrarily complex, and the imdi will apply them to the pixel data at very high speed. The system has two parts, one that generates taylored, optimised source code for the transformation kernels, and the run time code that matches a transform request to a compiled kernel, and initialises the appropriate run time lookup tables. The kernel source generator is intended to accomodate various optimisations, such as assembly code, vector instruction set (ie. MMX, AltiVec etc.) versions, but at present only generates the more portable 'C' code kernels. Both 8 bit per component and 16 bit per component pixel data is handled, up to 8 input and output dimensions (but this limit could be trivially raised). imdi_make.exe is the module that triggers the generation of optimised source code as configured for the color spaces and pixel formats selected. By default creates a single imdi_k.c and imdi_k.h file, but if given the -i flag, creates a separate file for each kernel variant. cgen.c C code generator module. itest.c regresion test routine. Normally runs speed and accuracy tests for all configured kernel variants. The -q flag makes it run quicker, but makes the benchmarking inacurate, the -s flag will cause it to stop if any routine has unexpectedly low accuracy. cctiff.c is the utility that takes an ICC device profile link, and converts a TIFF file from the input colorspace to the output space. Both 8 bit and 16 bit TIFF files are handled, as well as colorspaces up to 8 channels in and out. This accepts either a device link ICC profile, or links an input and output devce ICC profile to define the color transform. greytiff.c is a utility similar to cctiff, that is an example of how to colorimetrically convert an RGB file into a monochrome RGB file. Misc. Notes ----------- ITU-T Rec. T.42 specifies the ITULAB encoding in terms of a range and offset for each component, which are related to the minimum and maximum values as follows: minimum = - (range x offset) / 2^n - 1 maximum = minimum + range The Decode field default values depend on the color space. For the ITULAB color space encoding, the default values correspond to the base range and offset, as specified in ITU-T Rec. T.42 [T.42]. The following table gives the base range and offset values for BitsPerSample=8 and 12, and the corresponding default minimum and maximum default values for the Decode field, calculated using the equations above when PhotometricInterpetation=10. +-----------------------------------------------+ | ITU-T Rec. T.42 | Decode | +---------+-----------| base values | default values | | BitsPer + Component +------------------+----------------------------+ | -Sample | | Range | Offset | Min | Max | +---------+-----------+--------+---------+--------------+-------------+ | 8 | L* | 100 | 0 | 0 | 100 | | +-----------+--------+---------+--------------+-------------+ | | a* | 170 | 128 | -21760/255 | 21590/255 | | +-----------+--------+---------+--------------+-------------+ | | b* | 200 | 96 | -19200/255 | 31800/255 | +---------+-----------+--------+---------+--------------+-------------+ | 12 | L* | 100 | 0 | 0 | 100 | | +-----------+--------+---------+--------------+-------------+ | | a* | 170 | 2048 | -348160/4095 | 347990/4095 | | +-----------+--------+---------+--------------+-------------+ | | b* | 200 | 1536 | -307200/4095 | 511800/4095 | +---------+-----------+--------+---------+--------------+-------------+ For example, when PhotometricInterpretation=10 and BitsPerSample=8, the default value for Decode is (0, 100, -21760/255, 21590/255, -19200/255, 31800/255).