What's wrong with ICCs?

The film & TV industry has, to the greater part, avoided the use of ICC profiles for display calibration and colour workflow management.

What is it about ICC profiles that make them unsuitable for film & TV use? Can any aspects of them, or calibration systems that employ ICC based workflows for hardware display calibration, be viable?

Why ICC Profiles?

The ICC profile was developed by a large number of companies and individuals, from a range of different industries, all with varying requirements and needs, resulting by necessity in a complex workflow solution that contains a large number of options, variations, and functions.

More importantly, the level of colour accuracy required for ICC profile operation for these companies and individuals doesn't match those of the film and TV industry, as the majority of the requirements have come from the print world, where colour accuracy is more subjective than absolute, due to the inexact nature of attempting to match different reflective print mediums while viewing source images on a direct display monitor.

The film and TV industry relies on a far higher level of colour matching accuracy, due to the similarity of all viewing mediums and environments. This enables far simpler, but far more accurate, colour management to be used, where the display device (display/monitor/projector) is calibrated to a given standard in isolation of any and all input sources.

As a result, understanding ICC profiles can be extremely difficult for those used to the far simpler, and far more accurate, 3D LUT based approach to colour and look management, as used within the film and TV industry.

By necessity, this page highlights the limitations and issues of ICC based 'display calibration' for use in the Film & TV industry. It makes no attempt to assess the suitability of ICC profiles for use in any other industry. However, after reading this page it should be apparent that better colour workflows can be attained for use in any industry if the display is self-calibrated to a highly accurate level using a 3D LUT, with the 'display' ICC profile reduced to a simple colour space definition, as is outlined at the end of the page.

Throughout this page we are also focused on the best possible display calibration, as is attained via a 3D LUT using ColourSpace. We do not consider a 1D grey scale/white point LUT combined with a 3x3 matrix to ever produce an acceptable level of calibration, due to a total lack of volumetric data.

ICC profiles do not in themselves calibrate anything. They contain measurement and information data, on which ICC compliant software acts via a CMM (Colour Management Module). It is the CMM within the graphics program that uses the data contained within a given ICC to perform image adjustments to attempt to correct for device/display calibration issues/inaccuracy.

ICC profiles perform an image adjustment, not a direct display calibration.

Different graphics programs using different CMMs will often produce different results/accuracy from the same ICC profile data.

By design, no ICC based display calibration can come close to the accuracy attained by 3D LUT direct hardware calibration.

Understanding ICC application & Workflow

One of the issues with ICC profiles is they use a distributed method for colour management, which includes display calibration via image manipulation. This means different aspects of display calibration are held within different 'locations', potentially including; within the display itself; within the ICC profile; and even within the graphics card.

It is vary rare, to the point of virtually being unheard of, for any display to actually be accurately calibrated in and of itself when used within an ICC based workflow.

With ICC based display calibration this is termed hardware vs. software calibration, as some of the display calibration is potentially held within the display, while other aspects of the calibration are held within the ICC profile, so are software based, and are in reality image manipulations, not display calibration.

Potentially all ICC based corrections aimed at 'display calibration' could be held within the ICC profile, but never are all corrections held within the display's own hardware. The display is never full calibrated.

The problem is that when an ICC based calibration system is used to attempt to directly 'hardware calibrate' a display (no software ICC profile involvement) it does so just with a 1D LUT for grey scale/white point management, and a simple 3x3 Matrix for gamut (colour). A 3x3 matrix can only manage gamut as a single entity, using the 6 flat plane sides of the matrix, without any volumetric information at all.

Further, the 1D LUT component may not even reside within the display, or may be 'supplemented' by 1D LUT data held within the video card's VCGT (Video Card Gamma Table), or even within the ICC its self, where the 'corrections' are applied as image manipulations.

Any volumetric gamut information (measurements that are within the gamut of the display - see Profiling Patch Count below), if there is any, will be held within the associated 'display' ICC profile for linked 'software calibration' via image manipulation. The ICC profile acts within any ICC aware graphics program used within the PC, effectively correcting the gamut of the image before it is displayed on the partially calibrated display. This means that any program that is not ICC aware will not use the ICC profile data for image correction, and so will display any image only partially correctly.

The term image correction is key here, as that is how ICC profiles work. They hold profile data that is used by the graphics program's CMM (Colour Management Module) to 'correct' the image, not calibrate the screen. As described already, this means the display is not actually fully calibrated itself, and due to processing restrictions (available processing power) the CMM cannot correct the image on the fly to the level required for true accuracy, as detailed below.

ICC Profile Display Calibration Workflow

The following describes the distributed colour management used with ICC profiles for display calibration.

  1. Source Image
    Source Image

    Source Image (May include Input ICC profile)

  2. ICC aware graphics program
    ICC aware graphics program

    ICC profile (Conversion into working colour space)

  3. ICC Working Colour Space
    Working Colour Space

    Working colour space (for example sRGB)

  4. Working Colour Space
    ICC aware graphics program

    ICC profile (Display profile data, used to correct the image gamut/colour to attempt to compensate for the display's inaccuracies)

  5. VCGT
    Graphics Card

    VGCT 1D LUT (May be used for grey scale/white point correction)

  6. Grading Display
    Display calibration

    1D LUT and 3x3 Matrix (May be used for limited display hardware calibration, if available)k

This image workflow is broadly generic, but will help understand how ICC profiles are used in distributed form for display calibration through the correction of the image, with the display itself not fully calibrated.

Note that the Display gamut profile data within the ICC is not being used to calibrate the display, but is used by the CMM to apply a correction to the image, which attempts to compensate for the inaccuracies of the inaccurately calibrated display. The level of this correction - its accuracy - is down to the CMM within the graphics program in use, and is a key part as to why no ICC based calibration can come close to true display based hardware 3D LUT calibration.

The ICC profile data is held in a table form, and is often referred to as a look-up table, but should not be confused with a true 3D LUT. The ICC profile table often contains just the original measurements, not processed correction data.

Conversion between the various colour space is via the PCS (Profile Connection Space), not shown in the above diagram.

In the above ICC based colour workflow the last three components all combine to 'adjust' the image being displayed as accurately as the original 'display profiling' and CMM allows, so it looks correct on the display.
Note: the use of the term 'to adjust the image being displayed', as the display itself is never fully calibrated.

And because of this, any graphics program that is not ICC aware, as with most Film & TV creative systems, will effectively see an uncalibrated display, making any creative colour decisions invalid!

Further potential issues can arise as the VCGT 1D LUT, if used, is not strictly a component of the ICC specification, and relies on third-party management programs to ensure the VCGT is loaded on PC start-up. It is unfortunately all to common for this load to fail, or for the VCGT LUT be overwritten without warning, further invalidating the display calibration.

And as mentioned above, the 1D LUT for grey scale/white point can potentially be held within the display; the VCGT; the ICC; or any combination of two or all three, making it very difficult to really know as to what level the display its self is actually grey scale/white point calibrated. It may just be grey scale calibrated, with no white point correction, or vice versa. Or not calibrated at all...

Profiling vs. Calibration

One thing that can be very confusing when talking about ICC profiles and calibration, compared to the use of 3D LUTs within a Film & TV colour workflow, is the use of the term Profile or Profiling, and Calibration.

Profiling is the measurement or characterisation of a display to record its actual response to known inputs. This is key to the accuracy of any final calibration, as the number of patches used, especially volumetric patches, defines the level of final accuracy that can be attained. And ICC profiling rarely uses many patches - see below.

In a direct display based calibration workflows, as with ColourSpace, the profile data can be immediately use to generate a direct 'hardware' calibration - a 3D LUT that is loaded directly into the display, as with professional grading monitors.

In such a direct display calibration workflow the profiling and calibration are directly linked.

Within an ICC based calibration, the display is first 'hardware calibrated', which may involve manual user adjustment, or may just be the 1D LUT and 3x3 matrix generated from the initial profiling.

Regardless, after the partial hardware calibration, the remaining volumetric profile data is held within the ICC profile for image correction, completing the calibration workflow as best it can.

As can be seen, within an ICC calibration workflow the concept of calibration and profile data are separate, which is the cause of a lot of confusion when comparing the two approaches.

Irrespective of the above issues, what level of accuracy can be expected from an ICC based display calibration, assuming a fully compliant ICC workflow?

Fundamentally, any ICC based display calibration result will unlikely be as accurate as using ColourSpace for one very simple reason. The colour processing (CMM) used within ICC based workflows is nothing like the advanced Colour Engine used within ColourSpace.

When performing a highly accurate display calibration via ColourSpace the procedure has two distinct steps. The first is the characterisation of the display, to attain its actual capabilities and underlying gamma and gamut, performed via measurement profiling using a large number colour patches. This display characterisation data is then used to generate a 3D LUT that will 'calibrate' the display as accurately as possible.

The initial characterisation takes as long as it takes the probe to read all the patches used in the profiling process, and will vary depending on the number of patches and the probe used. This is essentially the same as when using an ICC based calibration process, but nearly always via the use of a much larger number of colour patches with ColourSpace - for the reasons explained below.

The generation of the 3D LUT is the process we are actually more interested in, as this is where the final accuracy of the calibration is defined. With ColourSpace, this LUT generation process can take a few seconds, to minutes, depending of the level of 'calibration' a given display needs. And ColourSpace is very fast when compared to alternative 3D LUT based calibration systems, as its Colour Engine is the most advanced available, and is why ColourSpace calibrations do not introduce artefacts/banding as with alternative systems, and is why it produces the most accurate final calibration possible.

Now compare the above to the way an ICC works to generate a final image correction.

As stated above, ICC based 'calibration' is not actually a calibration in the same way as for ColourSpace, as the ICC contains the display's profile data, not an actual processed 'correction' for the display. The image is 'corrected' before it is displayed on the uncalibrated display, via the graphics program's CMM. This correction has to be performed using relatively simple colour processing algorithms, or there would be a noticeable delay in the image pipeline - potentially minutes.

Compare this to time taken for the advanced Colour Engine within ColourSpace to generate a highly accurate 3D calibration LUT. Such processing is just not possible via a graphics program's CMM.

Also, the ICC based image correction is defined by the CMM within the graphics program in use, not the ICC profiles themselves as they tend to hold the original measured (profile) data, so the result of the image correction will be different depending on the graphics/creative application being used. For example, within Photoshop it is possible to swap between Adobe ACE and Microsoft ICM - two different CMMs, that can generate different results.

From this it can readily be seen that the image correction performed by the CMM, using the ICC profile data, can never hope to match the accuracy of a ColourSpace generated 3D LUT. It basically isn't intended to, as the processing overheads would just be too great, with CMM processing usually being based on simple linear interpolation.

No ICC based colour workflow is capable of employing an advanced colour engine for image calibration, resulting in a relative low level of final colour accuracy when compared to a ColourSpace generated 3D calibration LUT.

Another factor is the ICC based calibration system used, as there are many, with most PC display manufacturers offering their own calibration system, such as EIZO's ColorNavigator; NEC's SpectraView; Dell's DUCCS, etc... What most have in common is they tend to use X-Rite's Publisher/Profiler system to perform the profiling and limited hardware calibration.

Such ICC based calibration systems will nearly always first take you through a manual calibration process, using the display's OSD or hardware control buttons to set the desired black and white levels, as well as possibly white point (colour temperature), etc. This is what most of these systems refer to as hardware calibration.

The second step may be to 'profile' the display with a limited number of patches, in order to define the display's grey scale and gamut, and potentially load a 1D grey scale/white point LUT and 3x3 matrix into the display for further hardware calibration, if available.

However, there may be no additional hardware calibration to the display at all, instead relying on the graphics card's VCGT for the grey scale/white point calibration, and the associated ICC's gamut profile data to allow the graphics program in use to manage the final image correction.

Or, there may be no 1D LUT and/or 3x3 matrix loaded into the display, and the VCGT may not be used at all, with all the display's captured profile data being held within the ICC, with total reliance on the graphics app in use to correct every gamma and colour aspect of the image when displayed.

What can be seen in all these scenarios is the display is never actually fully calibrated, and the restriction of having to use the graphics program's CMM to generate an image correction on the fly can never match the accuracy of a 3D LUT calibration.

Profiling Patch Count

As has been stated, the number of patches used when profiling a display for calibration defines the potential calibration accuracy for any given display. In general terms, the more patches the better the calibration result, as the generation of the 'correction' LUT has a better understanding of the display's volumetric irregularities.

With an offline calibration system, such as ColourSpace, many thousands of patches (10,000 easily) can be used as the processing time to generate the calibration LUT is irrelevant.

With on the fly image correction, as with ICC profiles and graphics program CMM, there is no processing time available, and an ICC with too much profile data can slow the graphics program down.

Because of this, many manufacturer calibration programs limit the number of patches to a few hundred maximum. X-Rite's Publisher/Profiler has a maximum of 6,000, but X-Rite's own operational information suggests using far less, and many of the manufacturer specific calibration systems are limited to 100's or even 10's of patches.

Further, just because a given ICC may contain a large amount of patch colour data, there is no guarantee the CMM in use will actually use all the data, or will interpret it correctly. Often, too much data will cause image artefacts, due to the limited colour processing the CMM is able to perform.

X-Rite based manufacturer Hardware Calibration

As an aside, manufacturer hardware calibration systems that are not ICC based, such as from Atomos and SmallHD, also use the X-Rite Publisher/Profiler system, and generated just 1D LUT and 3x3 matrix calibrations, and do not perform 3D LUT based calibrations.

Chromatic Adaptation

As ICC profile workflows have been developed for the print industry, all colourimetry is based on viewing prints in a D50 illuminated environment, and attempt to match the display to the same perceived colours.

Therefore, as the expected white point for all ICC profiles is specified as being D50, all colourimetry values need to be adapted from the display's default white point, which for for Rec709 and sRGB is D65. The issue with this is the adaptation transform is basically a best guess at modeling how the human eye adapts to varying white points. It is not a true mathematical conversion. Further, there are a number of different adaptation transforms in use, although the Bradford Transform is presently the most widely used, but is known to have problems that other transforms, such as Sharp, are trying to overcome.

The end result is the need to apply any form of chromatic adaptation will introduce unknown errors, as they are all approximations. The amount of error they introduce may be small enough to be irrelevant, but may not...

Having investigated a number of third party ICC profiles it is also evident the that actual transform matrix values used are not always the same, even if the same transform is reported as being used - such as Bradford.

Hexadecimal Rounding Errors

Another error that is inherent in all ICC profiles is the use of Hexadecimal values, rather then decimal. This causes rounding errors within the ICC profile, regardless of the original accuracy of the values used in the generation of the ICC.

Is my working colour space ICC actually correct?s

While not necessarily directly related to display calibration, there is a real problem with the different working colour space ICC profiles that are in general circulation. Few are actually accurate, and not just due to the issues outlined here.

As mentioned above, we have investigated a number of third party ICC profiles, including standard working colour space profiles, such as sRGB, Rec709, etc. Many had inherent errors, included incorrect values within the profile, such as wrongly specified colour and gamma values.

How many users actually verify the accuracy of the working space ICC they use?

Colour Accuracy vs. Pleasing Reproduction

In addition to the display 'profile' data, ICC profiles also contain additional information on how the data should managed by the CMM. As ICC profiles are really aimed at colour management in workflows where it is impossible to maintain accuracy throughout - with images moving from capture devices such as scanner and cameras, through to output devices such as inkjet printers, laser printers, litho printing, etc., via a monitor for creative input - attempting to maintain absolute colour accuracy throughout is impossible.

Therefore, additional information is held within the ICC profile to assist in generating a pleasing image.

Rendering intents are one such set of information, aimed at managing colours that cannot be displayed correctly due to gamut restrictions. Essentially, what to do about out-of-gamut colours. They define how out-of-gamut colours should be handled, with each of the four options generating different results based on the compromises they make.

The four Rendering intents are:

  • Perceptual: compresses the target colour space into the display's available colour space (gamut), resulting in all colour values being inaccurate throughout the whole range
  • Saturation: is broadly similar to Perceptual, with the same gamut compression, but with saturation being preserved at the expense of hue accuracy
  • Absolute Colourimetric: uses no colour compression, and instead clips out of gamut colours, maintaining accurate colourimetry for all colours the display can show
  • Relative Colourimetric: is the same as Absolute Colourimetric, except it makes no attempt to correct the white point, and will add a relative offset to all colours based on the white point variation

From the above information it should be apparent that Absolute Colourimetric is the only option that will provide expected results for display calibration. However, some ICC based calibration systems default to Perceptual, or with V4 ICC profiles can contain more than one rendering intent.

This can cause issues, as different graphics programs can default to using different rendering intents. For example, Lightroom uses Perceptual intent if the display ICC contains it, while Photoshop uses Colourimetric.

It should be noted that the ICC profile does not define how out-of-gamut colours should be handled when using Coloutimetric rendering intents, leaving the decision to the CMM in use, meaning variations in colour will be seem with different CMMs.

ICC Calibration Verification

One real issue with how ICC profiles are used is verifying the calibration.

The problem is you must verify using the CMM that is processing the ICC profile data, which for example means running a patch set through Photoshop, if that is the graphics program, and associated CMM, you are using.

To do this via Photoshop you need to use DIP mode (Display Independent Profiling) within ColourSpace, and run a patch set as an 'animation' within Photoshop, with each patch set to the duration required by the probe in use.

V4 ICCs and 3D LUTs

With the introduction of v4 ICC profiles (and the new iccMAX profiles), the ability to use LutAtoBType tags was added, which greatly improved the attainable accuracy for 3D LUT emulation. The ability to accurately emulate a 3D LUT removes the need for the CMM to process any corrections on the fly, effectively guaranteeing the colour accuracy of the image correction.

This is why SpaceMan ICC generates v4 ICC profiles, as it effectively embeds the full 3D LUT into the ICC profile, via the LutAtoBType tag. This can then be used for highly accurate display calibration, with the ICC associated to the display for which the 3D LUT was generated, for example via 'Windows Colour Management'.

A major benefit of the use of a v4 ICC profile with a ColourSpace 3D LUT loaded into it is the ability to maintain calibration accuracy, as ColourSpace has done all of the hard work in generating the calibration LUT, meaning the graphics program and associated CMM using the ICC has no processing to perform at all. It just passes the image through the 3D LUT data held within the ICC.

For further information on using SpaceMan ICC for display calibration see the SpaceMan ICC User Manual.

Unfortunately, not all ICC aware programs are v4 ICC (or iccMAX) compliant.

A Better Way to Display Calibrate for ICC Workflows?

For anyone who really cares about colour accuracy their display of choice should always have in-built 3D LUT capabilities. Without this, any colour accuracy will be limited for all the reasons outlined above, especially when using an ICC based workflow.

And with a 3D LUT capable display there is a much better, more accurate, and inherently simpler workflow that can be adopted.

The display should be accurately calibrated using ColourSpace, using a 3D LUT loaded directly into the display. This calibration can be to a given colour space standard, such as Rec709, P3, sRGB, Adobe RGB, etc. Or, the calibration can be targeted to the displays native gamut, for applications that are not for film & TV deliverables (i.e., for photographic workflows).

The associated Display ICC profile can then be a simple curve and matrix profile, or curve and colourant profile, simply defining the display's calibration.

For example, if the display has been 3D LUT calibrated to Rec709, the ICC profile would define the gamma as being 2.4, and the gamut as being, well, Rec709.

As the display is accurately calibrated there is no need for any additional information to be held within the Display ICC profile, and the graphics program CMM will only be asked to perform a simple colour space conversion, if needed!

Calibrating a Display to itself

In the above section it was suggested that for image workflows that are not tied to a set colour space standard, such as when performing photography work, with paper prints as the required final delivery, it could be advantageous to calibrate the display to its own native gamut.

This is exactly the same as calibrating to a given colour space, such as Rec709, except the 'target' colour space is a user defined one, based on the peak RGB values of the display.

Using ColourSpace, and with the display uncalibrated, use the Calibration Interface to measure 100% Red, Green, Blue, and white. Record the xy values, and use them to generate a new colour space via the 'Convert Colour Space' menu, with the addition of the displays target gamma - most likely 2.2 for photographic work.

This new colour space is now the colour space to which you will calibrate the display, using the normal ColourSpace process!

The same gamma and xy values can then be used to generate a new simple curve and matrix , or curve and colourant Display ICC profile.


There is one specific issues with many display calibration systems when attempting to calibrate to sRGB. The target gamma.

There is a misconception that the sRGB colour space standard has a compound gamma, with a linear portion close to black.

This is incorrect, as in reality this is the part of the image processing, not the target colour space standard for display calibration. For display calibration the target colour space should use a simple power law gamma, 2.2.

The reason for this is that sRGB was designed to work with CRT displays, and all CRT displays are power law gamma.
(For the sRGB specification it appears an assumption was made that CRT displays were natively 2.2 gamma - today we believed them to be 2.35.)

The formula for sRGB is: x <= 0.0031308 ? x * 12.92 : (1.055 * pow(x, 1/2.4)) - 0.055
And the formula for Rec709 is: x < 0.018 ? (x * 4.5) : 1.099 * pow( x, (0.45) ) - 0.099

Both have a linear portion close to black, with different overall system gamma.

For independent display calibration it is incorrect to use these standards, and pure power law gamma should be used, as are the standard colour space pre-sets within ColourSpace.