## A Concise Introduction to Color Management and ICC profiles

[Note that there are many other, perhaps more comprehensive and expansive "introduction to Color Management" resources on the web. Google is your friend...]
Color management is a means of dealing with the fact that color capture and output devices such as Cameras, Scanners, Displays and Printers etc., all have different color capabilities and different native ways of communicating color. In the modern world each device is typically just part of a chain of devices and applications that deal with color, so it is essential that there be some means for each of these links in the chain to communicate with each other about what they mean by color.
Successful color management allows colors to be captured, interchanged and reproduced by different devices in a consistent manner, and in such a way as to minimize the impact of any technical limitation each device has in relation to color. It must also deal with the interaction of human vision and devices, allowing for such fundamental vision characteristics as white point adaptation and other phenomena. Ideally it also allows some influence of the human purposes behind the color, in dealing with the tradeoffs involved in practical devices.
The key means of implementing color management is to have a way of relating what we see, to the numbers that each device uses to represent color.
The human eye is known to have 3 type of receptors responsible for color vision, the long, medium and short wavelength receptors. Because there are 3 receptors, human color perception is a 3 dimensional phenomena, and therefore at least 3 channels are necessary when communicating color information. Any device capable of sensing or reproducing color must therefore have at least 3 channels, and any numerical representation of a full range of colors must have 3 components and hence may be interpreted as a point in a 3 dimensional space. Such a representation is referred to as a Color Space.
Typically color capture and output devices expose their native color spaces in their hardware interfaces. The native color space is usually related to the particular technology they employ to capture or reproduce color. Devices that emit light often choose Red Green and Blue (RGB) wavelengths, as these are particularly efficient at independently stimulating the human eye's receptors, and for capture devices R,G & B are roughly similar to the type of spectral sensitivity the eyes receptors have. Devices that work by taking a white background or illumination and filtering out (or subtracting) colors often use Cyan, Magenta, and Yellow (CMY) filters or colorants to manipulate the color, often augmented by a Black channel (CMYK). This is because a Cyan filter filters out Red wavelengths, Magenta filters out Green wavelengths, and Yellow filters out Blue wavelengths. Because it's impossible to make filters that perfectly block C, M or Y wavelengths without overlapping each other, C+M+Y filters together tend to let some light through, making for an imperfect black. Augmenting with an additional Black filter allows improving Black, but the extra channel greatly complicates the choice of values to create any particular color.
Many color devices have mechanisms for changing the way they respond to or reproduce color, and such features are called Adjustments, or Calibration. Such features can be very useful in adapting the device for use in a particular situation, or for matching different instances of the device, or for keeping its behavior constant in the face of component or environmental changes. Sometimes there may be internal transformations going on in the device so that it presents a more or less expected type of color space in its hardware interface. [ Some sophisticated devices have built in means of emulating the behavior of other devices, but we won't go into such details here, as this is really just a specialized implementation of color management. ]
To be able to communicate the way we see color, a common "language" is needed, and the scientific basis for such a language was laid down by the International Commission on Illumination (CIE) in 1931 with the establishment of the CIE 1931 XYZ color space. This provides a means of predicting what light spectra will match in color for a Standard Observer, who represents the typical response of the Human eye under given viewing conditions. Such a color space is said to be Device Independent since it is not related to a particular technological capture or reproduction device. There are also closely related color-spaces which are direct transformations of the XYZ space, such as the L* a* b* space which is a more perceptually uniform device independent colorspace.
As mentioined above, the key to managing color is to be able to relate different color spaces so that they can be compares and transformed between. The most practical approach to doing this is to relate all color spaces back to one common colorspace, and the CIE XYZ colorspace is the logical choice for this. A description of the relationship between a devices native color space and an XYZ based colorspace is commonly referred to as a Color Profile. As a practical issue when dealing with computers, it's important to have a common and widely understood means to communicate such profiles, and the ICC profile format standardized by the International Color Consortium is today's most widely supported color profile format.
The ICC profile format refers to it's common color space as the Profile Connection Space (PCS), which is closely based on the CIE XYZ space. ICC profile are based on a Tagged format, so they are very flexible, and may contain a variety of ways to represent profile information, and may also contain a lot of other optional information.
There are several fundamental types of ICC profiles:
Device
These primarily provide a translation between device space and PCS. They also typically provide a translation in the reverse direction, from PCS to device space. They are discussed in more detail below.
Device Link
A Device Link profile provides a transformation from one Device space to another. It is typically the result of linking two device profiles, ie. Device A -> PCS -> Device B, resulting in a Device A -> Device B transformation.
Abstract
An abstract profile contains a transformation define in PCS space, and typically represents some sort of adjustment in a device independent manner.
Named
A Named profile is analogous to a device Profile, but contains a list of named colors, and the equivalent PCS values.
Most of the time when people talk about "ICC profiles" they mean Device Profiles. Profiles rely on a set of mathematical models to define a transformation from one colorspace to another. The models represent a general framework, while a specific profile will define the scope of the model, as well as it's specific parameters, resulting an a concrete transformation. Profiles are typically used by CMMs (Color Management Modules), which is a piece of software (and possibly hardware) that knows how to read and interpret an ICC profile, and perform the transformation it contains.
Two basic models can be used by ICC profiles, a Matrix/shaper model and a cLUT (Color Lookup Table) model. Models often contain several optional processing elements that are applied one after the other in order to provide an overall transformation.
The Matrix/Shaper model consists of a set of per channel lookup curves followed by a 3x3 matrix. The curves may be defined as a single power value, or as a one dimensional lookup table or discretely represented curve (Lut). The matrix step can only transform between 3 dimensional to 3 dimensional color spaces.
The cLUT model consists of an optional 3x3 matrix, a set of per channel one dimensional LUTs, an N dimensional lookup table (cLUT) and a set of per channel one dimensional LUTs. It can transform from any dimension input to any dimension output.
All Lookup Tables are interpolated, so while they are defined by a specific set of point values, in-between values are filled in using (typically linear) interpolation.
For a one dimensional Lookup table, the number of points needed to define it is equal to its resolution.
For an n-dimensional cLUT, the number of points needed to define it is equal to it's resolution taken to the power of the number of input channels. Because of this, the number of entries climbs rapidly with resolution, and typical limited resolution tables are used to constrain profile file size and processing time.