[argyllcms] Re: using REFINE with ICCLINK to achieve -G results with -g parameter for original black generation

Roberto Michelena wrote:
I want to use ICCLINK to create a link from an RGB space (typically,
AdobeRGB) to an offset printer profile.
I'd naturally want to use -G for best accuracy and detail, but I do
have some fears about the quality of the black generation done by
Argyll. The offset profile is generated by Monaco, which is reputedly
one of the best black generations (at least better than ProfileMaker).
It'd be a shame to lose it.

My first reaction is that mixing an RGB source profile with "refine"
is probably not going to work very well, simply because of
the white point and gamut issues. "refine" is only really intended
to be used in an absolute colorimetric workflow, although
your scenario may avoid these issues.

My second reaction is that it's hard to separate out the black
generation from inverting the AtoB table, without changing some
code. The only thing that currently does this type of thing is revfix,
where you can use the existing separation to determine the black
for the new separation. The current release icclink -G doesn't provide
the same facility at the moment, although my current development version
now does.

My third reaction is that you might be best trying icclink's black
generation first, before going to huge efforts to work around it.
To get a reasonably nice curve is a bit of a fiddle, but the results
in many cases are perfectly usable.

So I was thinking... if I do the link using -g, and then pass a large
set of RGB equal-step values (ideally corresponding to the gridpoints
of the input side of the link) through it, and pass the resulting CMYK
values through the original offset profile in reverse (abscol), end up
with a set of Lab values.
Which are not going to match exactly the ones obtained by RGB->Lab on
the same set of points and the same RGB (input) profile ; so then I
use REFINE on those two sets of Lab values, and do the ICCLINK -g
again but this time with -p (and the results from REFINE)... and so
on...
After some iterations I might end up with results similar to -G, but
having the black generation of the original CMYK profile, right?

I'm not sure you will. I suspect that whatever artefacts are introduced in
the -g linking are not going to be taken out again by refine, simply
because it isn't really feasible to do a refine in enough detail (high
enough resolution) to have this effect. The major attributes that
link -G has is that the output lookup is done by inverting the A2B
table. Generally the A2B table is reasonable smooth and accurate, because
the domain exactly covers the gamut of the device, making good use of
every grid point, and hence it's inverse is smooth and accurate.
One of the reasons that output lookups using the B2A table are bumpy is
that the grid resolution is poorly used, since only a small proportion of
the PCS domain is in gamut. That bumpiness is at the order of the grid
resolution, so you'd need a refine grid even finer, and it's effect
would then be swamped by the very coarseness you are trying to remove
by the next icclink -g step. Also, refine only attempts to correct PCS errors,
and a lot of the bumpiness in the icclink -g is in the separation, which
refine won't see.

> Is there a better/shorter way?

If you're using MSWindows you can try out the current development
version of icclink at <http://argyllcms.com/icclink.zip>, and see
if it does what you want. You're looking for the -ke option.

Hey, furthermore, if I do all the conversions via another (target) CMM
such as for example the beta Adobe CMM, then refine will also
compensate for CMM differences and I'd end up with a link optimized
for that target CMM...! ?

Again, most of the differences between CMM's are very fine grained, and
refine isn't likely to be practical at correcting such errors. Refine
is likely to be better at correcting overall shifts and inaccuracies, than
any "texture" errors that arises from the color machinery. The
latter is best tackled by changing the algorithms (ie. different
types of interpolation), or the approach (ie. inverting the A2B
rather than pre-computing the B2A table).

Graeme Gill.

Other related posts: