[argyllcms] Difficulty profiling new iMac

  • From: Ben Goren <ben@xxxxxxxxxxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Thu, 13 Sep 2007 20:54:27 -0700

So, late last  week I broke the  piggy bank to get  myself a shiny
new  24" iMac. I'm  quite happy  with  the computer,  but I'll  be
damned if I can't seem to make a decent profile for the display!

First,  a bit  of  explanation. I've tried  all  sorts of  things,
including  tweaking  every knob  I'm  aware  of in  Argyll,  using
different test images, different  (ICC-aware) applications to view
the  test  images, etc. What  follows  is  simply an  illustrative

For  the easiest-to-use  test image  to illustrate  my troubles  I
created in Photoshop  a Lab file the same pixel  dimensions as the
display and used  the gradient tool to fill from  L=0, a=0, b=0 to
L=100, a=100,  b=100. (I get the  same results in  RGB, grayscale,
etc., and the  problems are visible in everything  from other test
images to movies in VLC.)

No matter  what I do,  the dark shadows,  from about L=2  to L=16,
have  a greenish,  maybe slightly  blue, cast  to them. (Sometimes
they're  yellowish instead  of  bluish.) The worst  is usually  at
about L=6. The exact area and peak have varied with the particular

However, if I select a color  space profile -- such as AdobeRGB or
sRGB -- in the Displays Preferences,  the entire gray ramp is very
neutral and even.

Here's the most recent attempt, complete with files:

First, I check the native response of the display with dispcal. It
tells me:

$ dispcal -v -y l -R

[. . .]

Uncalibrated response:
Black level = 0.35 cd/m^2
White level = 266.20 cd/m^2
Aprox. gamma = 2.19
Contrast ratio = 759:1
White chromaticity coordinates 0.3128, 0.3281
White    Correlated Color Temperature = 6507K, DE to locus =  3.9
White Correlated Daylight Temperature = 6507K, DE to locus =  0.8
White        Visual Color Temperature = 6367K, DE to locus =  3.8
White     Visual Daylight Temperature = 6535K, DE to locus =  0.8
The instrument can be removed from the screen.

That's close  enough to  gamma =  2.2 and  temperature =  D65 that
that's what I'll use for everything from here on out.

Next, I use dispcal to create the .cal file:

$ dispcal -v -y l -g 2.2 -e -H iMac\ 2007-09-13

[. . .]

Commencing device calibration
patch 6 of 6
Black = XYZ   0.41   0.39   0.74
Red   = XYZ 119.42  63.48   3.16
Green = XYZ  87.68 179.75  24.81
Blue  = XYZ  49.90  25.60 268.25
White = XYZ 255.43 267.28 293.63
patch 64 of 64
Initial native brightness target = 267.277738 cd/m^2
Target white value is XYZ 255.431672 267.277738 293.627647
Target black point = 0.415598 0.392467 0.713159
Current gamma curve offset = 0.068389, Gamma curve power = 2.432115
Total Iteration 3, Final Samples = 64 Final Repeat threshold = 0.800000
Creating initial calibration curves...
Doing iteration 1 with 16 sample points and repeat threshold of 3.200000 DE
patch 16 of 16
Brightness error = 0.000000 cd/m^2
White point error = 0.000000 deltaE
Maximum neutral error (@ 0.157165) = 1.594979 deltaE
Average neutral error = 0.687945 deltaE
Computing update to calibration curves...
Doing iteration 2 with 32 sample points and repeat threshold of 1.600000 DE
patch 32 of 32
Brightness error = 0.000000 cd/m^2
White point error = 0.000000 deltaE
Maximum neutral error (@ 0.077741) = 0.915395 deltaE
Average neutral error = 0.305202 deltaE
Computing update to calibration curves...
Doing iteration 3 with 64 sample points and repeat threshold of 0.800000 DE
patch 64 of 64
Brightness error = 0.000000 cd/m^2
White point error = 0.000000 deltaE
Maximum neutral error (@ 0.007987) = 0.758240 deltaE
Average neutral error = 0.249896 deltaE
Computing update to calibration curves...
Doing verify pass with 100 sample points
patch 100 of 100
Verification results:
Brightness error = 0.000000 cd/m^2
White point error = 0.000000 deltaE
Maximum neutral error (@ 0.000000) = 1.585869 deltaE
Average neutral error = 0.341614 deltaE
The instrument can be removed from the screen.

Here's the .cal file:

Next, I  create a  small test  chart to  use to  pre-condition the
``real'' one later:

$ targen -v -d 3 -f 50 iMac\ 2007-09-13\ small

Then, I read it:

$ dispread -v -y l -k iMac\ 2007-09-13.cal -s -H iMac\ 2007-09-13\ small

The .ti3 file:

And, of course, create the profile:

$ profile -v -A Apple -M iMac -D "iMac 2007-09-13 small" -C "Copyright (c) 2007 by Ben Goren" -i D65 -o Shaw iMac\ 2007-09-13\ small
No of test patches = 50
Estimating white point
Approximate White point XYZ = 2.416478 2.608524 2.769155, Lab = 143.682114 -9.120046 -24.150496
Creating optimised per channel curves
About to optimise temporary matrix
About to optimise input curves and matrix
About to optimise output curves and matrix........................
About to optimise input curves and matrix again.
About to optimise input, matrix and output together...............
About to adjust a and b output curves for white point
Creating fast inverse input lookups
Compensate scattered data for input curves
Compensate scattered data for output curve
Create clut from scattered data
Find white & black points
White point XYZ = 2.431605 2.622663 2.770560, Lab = 143.970110 -8.947177 -23.704592 Black point XYZ = 0.004504 0.004745 0.007474, Lab = 4.286515 -0.288699 -6.717227
Fixup clut for white point
Check White point XYZ = 2.431605 2.622664 2.770560, Lab = 143.970113 -8.947177 -23.704592
Done A to B table creation
Creating B to A tables100%
Done B to A tables
profile check complete, peak err = 4.885327, avg err = 1.800126
Exectution time = 11.130000 seconds

Here's that profile:

I then feed that to targen for the ``real'' profile:

$ targen -v -d 3 -f 1000 -c iMac\ 2007-09-13\ small.icc iMac\ 2007-09-13

Here's the resulting .ti1 file:

Reading the chart:

$ dispread -v -y l -k iMac\ 2007-09-13.cal -s -H iMac\ 2007-09-13

Creates this .ti3 file:

Now,  at this  point...it really  doesn't matter  what I  do. If I
create a shaper profile:

$ profile -v -A Apple -M iMac -D "iMac 2007-09-13" -C "Copyright (c) 2007 by Ben Goren" -a s -i D65 -o Shaw iMac\ 2007-09-13

then  ``pure''  black  is  really   a  dark  green,  and  all  the
single-digit LAB values show a green to yellow color cast.

A LUT profile doesn't show as  much of a color cast, but ``black''
still is  noticeably lighter than  it should be, there's  not much
variation  up to  about  L=5 --  at which  point  there's a  sharp
transition to a lighter yellowish-greenish cast that gets yellower
up to about L=15, when it becomes more neutral up to about L=20.

The worst  part about this  is that, the more  I do, the  worse it
gets.  This latest LUT profile is  actually one of the better ones
of the lot.  A tens-of-thousands of patches profile I did (letting
it  run overnight)  was  unusable, and  adding  in thousands  more
neutral  patches  (in device  space,  reading  them, and  manually
adding them  back into  the original .ti3  file) only  made slight
improvements. If I use -q u,  it's a bit smoother (there's banding
in  all  the  profiles,  including  the  color  spaces  ones  like
sRGB), and  the exact location  and hue  of the color  casts might
change...but nothing  has made it  go away. A shaper  profile from
4000 patches  I did  this afternoon  is so far  off it's  not even
funny,  and the  LUT version  was worse  than this  1000-patch one
here. I've even  used displin from  the start instead  of dispcal,
again with no luck.




Other related posts: