EOS 10D stuff

If you are reading this, you are probably looking for my EOS 10D profile (28 March 2009, linear version). This version is colorimetrically equivalent to the previous (8 april 2004) version, but fixes two encoding errors which caused it to be useless with newer versions of LittleCMS, as well as with the built-in CMS in MacOS.

An example workflow could be

dcraw -4 -c -w -m CRW_0123.CRW | pnmnorm -bpercent 0 -wpercent 0.1 -brightmax \
| pnmtotiff -truecolor >temp.tif
tifficc -w -i eos10d-linear.icc temp.tif CRW_0123.tif

The profile is intended to be applied after the white balancing performed by dcraw. This is probably not quite the right thing to do as it means that, in combination with e.g. the standard sRGB profile, we will first do a chromatic adaptation from the scene illuminant to the PCS white point (D50) using RGB scaling in camera space, and then another chromatic adaptation from D50 to the destination white point using a Bradford-style CAT.

Versions of LittleCMS earlier than 1.10 give strange results, so make sure you have 1.10 (or newer).

How the profile was created

The profiles from 2 February 2004 and earlier were created by comparing the RGB values from in-camera JPEG:s with RGB values in CRW files. This was tricky at best, as there are too many unknowns in the equation, and the results were never very good.

The 8 April 2004 profile was created using a GretagMacbeth ColorChecker, using the following procedure:

  1. Make a test shot of the ColorChecker.
  2. Estimate the colour temperature of the lighting (by making multiple runs through the Canon File Viewer Utility in the "kelvin" white balance mode, tweaking the value until the grey patches actually come out as R=G=B) and use that value to compute the light spectrum with Planck's blackbody radiation law.
  3. Use the illuminant spectrum from the last step together with reflectance spectra for the ColorChecker patches (obtained from Andrew Glassner's "Principles of Digital Image Synthesis") and the CIE XYZ matching functions (from the same book) to compute theoretical XYZ values for each ColorChecker patch under the illuminant.
  4. Find the matrix relating the actual measured RGB values from the CRW file to the computed XYZ values, by doing a least-squares fit of the data.

The test data from a sunlit shot (colour temperature = 5200K) were as follows.

Number of the patch on the ColorChecker (top-down, left-right, row major order).
Theor. xyY
Computed, theoretical xyY values, normalized so that Y=1 for the brightest patch.
Measured RGB values.
Res. xyY
Resulting xyY values from using the matrix computed, scaled so that Y=1 for the brightest patch.
Euclidean distance in CIEL*a*b* (1976) space between the theoretical and resulting colours.
Patch Theor. xyY RGB Res. xyY deltaE
20.41670.36360.44680.29000.37540.28420.40720.36290.4794 3.7
30.26870.28190.19770.09240.27170.31130.27860.28690.2310 4.2
40.35910.47640.11860.07210.16650.08800.35320.44100.1752 9.6
50.30760.27430.26980.14940.32080.38710.30990.28000.3009 3.2
60.27410.35790.43760.15590.57590.47620.27240.36220.4957 5.1
70.51730.42790.39080.31390.23450.08330.51300.41360.4253 8.5
80.23620.19880.11260.05980.20030.31940.24790.21000.1450 5.1
90.49880.33780.26340.24820.15050.12270.49440.34210.2959 3.4
100.35480.24370.06490.05580.08360.11120.34600.26790.0898 9.0
110.38240.49140.47010.22230.48750.18290.37770.49180.5377 5.2
120.48220.45270.52080.35040.35930.09610.48910.45620.5536 7.1
130.20850.14590.05710.02760.10880.21570.22510.15800.0661 3.8
140.29700.48960.24230.08170.28920.15020.29980.46600.2701 6.1
160.45810.47590.70960.42440.55470.15700.45810.47520.7596 2.8
170.43420.27800.25280.23900.18880.24920.42780.28460.2936 4.4
180.20610.25760.18160.05200.32500.38510.21270.27140.2268 6.4
190.34180.35031.00000.48580.95700.81690.34430.34911.0000 1.8
200.34000.34850.65950.32760.65810.57170.34070.34590.6804 1.9
210.33950.34870.39760.20460.41120.35680.34070.34610.4251 2.4
220.34150.34970.21840.11220.23240.20320.33640.34500.2373 2.7
230.34250.34980.09580.05090.10590.09310.33530.34380.1078 2.8
240.34090.34860.03360.01580.03300.02900.33520.34380.0336 1.0

The matrix thus obtained can be summarized as the following sensor properties:


These values are "absolute colorimetric", they do not take white balancing into account. The colour balancing code of dcraw will attempt to make neutrals come out as R=G=B. When building the ICC profile matrix, I used the values above but substituted the ICC PCS white point (D50) for the cameras white point values, thus making neutrals land at D50, which is more or less what we want.


Open-source colour management system.
A package of image-manipulation programs
A program to extract usable image data from Canon CRW files (and just about all other digital camera raw files in the known universe).

Old stuff

EOS10D profile (8 April 2004, linear)

Notice that the following three profiles all assume that data from the camera has been encoded with a gamma=1/2.2 transfer function!

EOS 10D profile (8 April 2004, gamma 2.2)
EOS 10D profile (2 February 2004)
EOS 10D profile (16 November 2003)

Ture Pålsson, Lysator. Last update 2009-03-30 07:09 UTC