Printing accurate colors not only depends on profile quality, but on the color engine used.
It's been known for some time that, in Photoshop, ACE has smaller conversion errors than ICM. See Jim Kason's
post. However, this was looking at errors in converting RGB matrix spaces.
I'm trying to nail down the cause of *very* small discrepancies when printing larger numbers of colors using I1Profiler and Argyll profiles.
From testing, there are 4 different color engines involved. For Photoshop there is Adobe ACE and Microsoft ICM. For MATLAB, there is LCMS. And I'm not sure what there is for Argyll but it's different from the other three.
To get a quantitative evaluation of these 4 CMEs, I made a set of 2,000 in-gamut LAB colors for the Pro1000 with MP101 paper. These were then converted to device RGB using each of the 4 CMEs. The small differences in rgb values differed, on average, from about .4 bits to 3.2 bits (geometric distance between triplets based on 0:255).
ACE and ICM values were obtained using a 16 bit Lab tif image in Photoshop and converting to the device profile.
The MATLAB LCMS values were obtained converting the Lab values using the Color Toolkit. The Argyll CME's values were obtained using the xicclu utility.
These are the differences:
ACE:MATLAB 0.39 dE00: 0.04
ACE:ARGYLL 0.89 dE00: 0.10
ACE:ICM 3.19 dE00: 0.40
ICM:MATLAB 3.20 dE00: 0.40
MATLAB:ARGYLL 0.75 dE00: 0.09
The ICC does not specify how algorithms interpret 3DLUTs. It's up to the color engine coders. And there is no ideal way to interpolate 3DLUTs. One possible approach to testing profile/cme accuracy is to create a synthetic patch rgb/lab set with zero noise and lots of patches then see how the profiles perform with each of the CMEs.
However, outside of ICM, these are all reasonably close but I start to see the effects of these different engines when comparing say, 1000 color patches and averaging the printed accuracy.
Anyone know of there is a way to use the ACE inside MATLAB or perhaps with C++ code?