[argyllcms] Re: Printer Profiling Patch Count and Profiling Generation Quality

  • From: Graeme Gill <graeme@xxxxxxxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Tue, 05 Jan 2010 11:42:35 +1100

Pascal de Bruijn wrote:
Now I read my first 210 patch target (which worked excellently), and
I'm wondering whether it has any merit to use -q m?

The way I tend to view it is that there's not a lot of harm in using
a higher "quality" setting with a small number of patches (although
there will be differences, good or bad), but that it's a waste of time
using a very high setting with a small number of patches.

-qm is a pretty reasonable compromise for "well behaved" devices
(ie. devices that have a native response that it reasonably perceptually
linear), and -qh if you're using a lot of patches and/or have a less
well behaved device (you probably need more patches if it's a less well
behaved device, or calibration may help), and -qu is something you
use in desperation when nothing seems to be helping, just to prove
that it doesn't solve your problem either.

-ql is mainly to save time when doing simple checks, or making
preliminary profiles with small numbers of patches.

And what if I do a 420 patch target, or 630 or 840? At what patch
counts are certain profile quality levels sensible?

It's hard to say. For an "RGB" device for a real profile I'd use
-qm as a minimum, and -qh if you crank the number of patches
up to 500 or more. Typically for an RGB device you wouldn't go much
beyond 1000-2000 patches unless you have a special purpose in mind
(ie. proofing, an inconsistent or badly behaved device, etc.)
For CMYK it's hard to have too many patches, with about 1000 being
a minimum for a good profile, and 3-5000 being not unreasonable for
a high quality profile. Some people have been known to run 10000 - 20000
patches with the right gear (and iSis say).

The idea of pre-conditioning the test chart with a preliminary
profile is really to wring out as much quality as possible given
the number of patches you are prepared to print and read. With an instrument
such as the ColorMunki it's reasonable to aim for a smaller number of patches
given the practicality of the situation.

After inspecting a generated profile with iccdump, I can't make much of it:

  Input Channels = 3          (PCS=LAB?)
  Output Channels = 3       (RGB?)
  CLUT resolution = 9
  Input Table entries = 512
  Output Table entries = 512

That leaves the CLUT resolution and table entries... How do these fit
together? Besides the interpolation between entries, how does a table
lookup actually work?

For ICCV2 it's pretty simple. First each channel goes through the per
channel input tables, then through the Multi-dimensional Color LUT,
then each channel goes through the per channel output table. In the
above example the per channel curves have 512 entries, the multi-dimensional
color lookup has 9 x 9 x 9 entries. For the A2B table the input is RGB and
output is PCS (usually Lab). For the B2A table the input is PCS and
the output is RGB.

Typically linear interpolation is used between entries, and Argyll profiles
will all be using 16 bit entry values. For the multidimensional lookup there
are many possible ways of interpolating within a cell. One is to use 
multi-linear
interpolation (which ironically isn't actually linear for more than 1 
dimension),
or to break the cell up into smaller geometric pieces such as simplexes,
which is often faster and uses linear interpolation.

How these pieces interact is somewhat up to the profile maker. The input tables
have the effect of both transforming the space in which the cLUT interpolation
is performed, and also changing the position of the entries. Juggled well, the
per channel curves can minimize the errors introduced by the relatively low
resolution of the cLUT and the interpolation within each cell.

Graeme Gill.

Other related posts: