A digital color printer, like other color output devices, defines the relationship between the device color space CMY and a device-independent color space, such as CIELAB. The process of printing can be viewed as a CMY-to-CIELAB transformation. This can be modeled with the device-specific physical model or an empirical lookup table method. However, we need an inverse transformation, i.e. CIELAB-to-CMY, to find CMY for a given CIELAB value in the image, and thus to reproduce the whole image.
Here we implemented this inverse transformation with a lookup table model using tetrohedral interpolation, as proposed in Francis Schmitt and Jon Yngve Hardeberg's papers[1][2]. This implementation can transform any point in CIELAB space into its corresponding CMY values.
An inevitable issue in CIELAB-to-CMY transformation is gamut mapping. The color gamut of a printer is the range of colors it can reproduce. Gamut mapping is needed here because printer cannot reproduce all the colors in CIELAB color space. Gamut mapping techniques may be divided into two categories, i) continuous methods applied to all the colors of an image, such as gamut compression and white point adaption, and ii) clipping methods applied only to colors that are out of gamut.
1.1) Overview
Firstly, we need to print a numerical color chart, i.e. series of sampled colors, covering the entire CMY space. Measure the CIELAB values for each sample patch using calibrated scanner or spectrophotometer, and thus obtain a lookup table from CMY to CIELAB. Using regular interpolation, we can model the CMY-to-CIELAB transformation with this lookup table. This lookup table covers only the space within the printer gamut.
The next step is to construct a partition of the CIELAB space. The partition should be complete and non-intersecting. We can do triangulation to the gamut and result in a tetrahedral partition of the space with in the gamut.
With the space triangulation above, we can do non-regular tetrahedral interpolation for any given CIELAB value, and find its corresponding CMY value to reproduce it.

Figure: The printer calibration process, providing a 3D lookup-table for the conversion from CIELAB to CMY.
1. 2) Triangulation of the color space
First of all, we divide the CIELAB space into two parts: space within and outside of the printer gamut. As described above, we then divide the space within printer gamut into complete and non-intersecting tetrahedra. For doing this, we first apply a triangulation to the cubic CMY space using the regular sample points as vertices. Then transport this structure into CIELAB space and result in a corresponding triangulation of the CIELAB space inside the printer gamut. The figure below showes how the triangulated cubic gamut in CMY space is transported into its deformed gamut in CIELAB space.

Figure: Triangulated CMY color gamut cube (left) and its corresponding geometrically deformed CIELAB color gamut (right).
1.3) CIELAB-to-CMY transformation
Using the above triangulation, we now can realize, by tetrahedral interpolation, the transformation from CIELAB to CMY values for any point belonging to the definition domain of CIELAB space.
For the given CIELAB point P, the transformation comprises two main steps: the localiztion of the tetrahedron enclosing the CIELAB point, and then the non-regular tetrahedral interpolation using vertices of this tetrahedron. A gamut mapping method will be included if P out of gamut.
Localization
We are using a so-called walking algorithm, as described below, to find the tetrahedron containing the CIELAB point P.
non-regular tetrahedral interpolation
When the inside-gamut tetrahedron with vertices
that encloses the point P(or revised P if original one is
out-of-gamut) is found, the resulting CMY values are calculated by weighted
summation of the CMY values corresponding to the four vertices. The weights
are found as follows:
P(or revised P) divided the enclosing tetrahedron into 4 sub-tetrahedrons, each having a volume determined by the following determinant:
![]()
where the indices are taken modulo 3, and finally, the weights
are defined by
, where
is the volume
of the tetrahedron
.
The final output values C, M, and Y are then calculated as follows:
![]()
where
,
and
are the CMY values
corresponding to the tetrahedron vertices
.
We create several matlab programs to simulate the calibration process described above.
Generating Samples(genesample.m)
We assume that the illumination is ideal white light and the printer inks have full-reflectance or zero-reflectance in their corresponding spectual range. To create numerial color chart, we sample the entire CMY space with interval of 0.1(C,M,Y values range from 0 to 1) and calculated the CIELAB values of the light reflected from each printed patch. The figure below showes roughly the printer gamut in CIELAB space(each red circle is a sample point in CMY space).

Construction of lookup table(structure_creation.m)
We define the triangulation using its adjacency graph whose nodes are the tetrahedra and whose edges are the pairs of adjacent tetrahedra. This graph is completed by associating to each node, which represents a tetrahedron, their 4 vertices and 4 neighboring tetrahedra.
Non-regular tetrahedral interpolation(lab2cmybytetr.m)
Using walking algorithm, we find the tetrahedron enclosing the CIELAB point, and then, using tetrahedral interpolation to calculate the CMY value.
To test our algorithm, we randomly choosed a point within the printer
gamut and thus have it exact CIELAB values. This point is the color to
be reproduced with printer. From its CIELAB values, we find CMY values
for printers. Using our assumed printer model above, we can calculate the
printed color' CIELAB value. We can see the
E
between the printed color and original color is very small(typically less
than 0.1).
The tetrahedral interpolation approach to lookup table model has certain advantages over conventional 3D interpolation where color space is partitioned into cubic sub-spaces. These advantages are in terms of accuracy, storage space. For tetrahedral interpolation, since every cubic sub-space is divided into 5 tetrahedral spaces, it can achieve more accuracy than conventional cubic interpolation with the same sample density in CMY space. In other words, to achieve certain accuracy, we need less samples for tetrahedral approach, and thus need less measuring work in the modeling process and less storage space for the adjacency graph representing the partition of the CIELAB space. Besides, this tetrahedral interpolation approach to lookup table can be also used in the forward printer model, i.e. CMY-to-CIELAB transformation, and moreover, can be used to model other color output devices.
In the method described in 1.1) overview, we should regularly sample the CMY space, print the sample colors and construct the lookup table using these sample CMY values and their corresponding measured CIELAB values. However, This involves lots of work. For example, if the sample interval is 0.1(CMY values ranges 0~1), which is not a fine sample, we have to print 11*11*11=1331 colors. So, we have to choose to test our algorithm using simulated data.
Reference:
[1] Francis Schmitt and Jon Yngve Hardeberg. Color Printer Characterization Using a Computational Geometry Approach. In Proceedings of IS&T and SID's 5th Color Imaging Conference, Pages 96-99, Scottsdale, Arizona, November 1997.
[2] Francis Schmitt and Jon Yngve Hardeberg. Color Printer Characterization by 3D Triangulation