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

  • From: Klaus Karcher <lists@xxxxxxxxxxxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Sun, 31 Jan 2010 16:54:31 +0100

Hi,

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.

I have a simple RGB matrix profile "test5.icc". When I convert in-gamut values with this profile, I get accurate round-trip results as expected:

icclu -ir -fb -pl test5.icc
16.610000 -19.420000 18.060000 [Lab] -> MatrixBwd ->
0.076230 0.220811 0.055097 [RGB]

icclu -ir -ff -pl test5.icc
0.076230 0.220811 0.055097 [RGB] -> MatrixFwd ->
16.609978 -19.419991 18.060005 [Lab]

or in XYZ:

icclu -ir -fb test5.icc
0.013713 0.022217 0.005603 [XYZ] -> MatrixBwd ->
0.076229 0.220811 0.055096 [RGB]

icclu -ir -ff test5.icc
0.076229 0.220811 0.055096 [RGB] -> MatrixFwd ->
0.013713 0.022217 0.005603 [XYZ]

Besides I have a XYZ ColorSpace Conversion profile that provides accurate round-trip results as well:

icclu -ir -ff xyz.icc
0.013713 0.022217 0.005603 [XYZ] -> Lut ->
0.013713 0.022217 0.005603 [XYZ]

icclu -ir -fb xyz.icc
0.013713 0.022217 0.005603 [XYZ] -> Lut ->
0.013713 0.022217 0.005603 [XYZ]

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

Even when I pump up the CLUT resolution to 99, the results are still very inaccurate:

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

icclu xyz_test5_link99.icc
0.013713 0.022217 0.005603 [XYZ] -> Lut ->
0.139126 0.213122 0.094798 [RGB]

icclu -ir -ff -pl test5.icc
0.139126 0.213122 0.094798 [RGB] -> MatrixFwd ->
17.211613 -11.483992 14.514113 [Lab]
# round-trip error (Delta E) = 8.7

I noticed that the CLUT of the device link profile is very inefficient and the input and output curves are linear. I'm sure that the precision and efficiency of the profile could be vastly improved with appropriate input/output curves -- but I have no idea if this example has any relevancy to practice.

Klaus

image/icon

Other related posts: