[argyllcms] Re: Inaccurate device links -- relevancy to practice?

  • From: Graeme Gill <graeme@xxxxxxxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Mon, 01 Feb 2010 21:22:19 +1100

Klaus Karcher wrote:
I admit that the following findings might be moot, but I was surprised by the fact two entirely accurate profiles can result in a very inaccurate device link and I wonder if this issue might have negative effects in practical applications.

When I build a device link with this profiles, I get warnings as the primaries of the XYZ profile are not representable in Lab:

collink -r33 -ir -or xyz.icc test5.icc xyz_test5_link.icc
collink: Warning - Colorant Tag Lab value was clipped
collink: Warning - Colorant Tag Lab value was clipped

Anyway, I'd expect that values inside the Lab encoding range should be tolerably accurate. But that's not the case:

icclu xyz_test5_link.icc
0.013713 0.022217 0.005603 [XYZ] -> Lut ->
0.116039 0.154045 0.079172 [RGB]

icclu -ir -ff -pl test5.icc
0.116039 0.154045 0.079172

0.116039 0.154045 0.079172 [RGB] -> MatrixFwd ->
10.613593 -6.702353 9.566141 [Lab]
# round-trip error (Delta E) = 16.4

Hi Klaus,
        the thing is that collink isn't smart enough to create
custom per channel curves during link. It uses the per
channel curves provided with the profiles, and at best modifies
the obviously linear light ones with an L* like curve (ie.
for matrix profiles).

So you give it an XYZ cLUT base profile (xyz.icc), and it
simply assumes that the curves that come with it are optimal
for indexing into the cLUT. In this particular case
they are not when the cLUT contains non-unity values.

[Note that the warning messages "collink: Warning - Colorant Tag Lab value was 
clipped"
 apply to the colorant tag, not the table data. The device link will cope
 with values outside the L*a*b* range.]

Now I can add a specific workaround to this to not trust XYZ cLUT per
channel curves and to substitute an L* like curve that changes the
scale as well to improve the cLUT table efficiency, and this
improves your particular example.

(I've uploaded it to <http://www.argyllcms.com/Argyll_dev_src.zip>
 if you wish to try it out.)

Graeme Gill.

Other related posts: