[argyllcms] Re: interpolation reversibility

  • From: Roberto Michelena <colorsync@xxxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Fri, 4 Nov 2005 20:03:34 -0500

> That's what I'd expect (and what experience shows.)
> It's one of the reasons iterative improvement doesn't
> seem to buy much in Argyll.

But the way you're approaching iteration (with an abstract profile),
it throws away the previous data in each round. IOW, when building
"iteration 2" of the profile, what it is using is the INTERPOLATED
(B2A grid) values of the profile, plus the abstract profile.
Even if "refine" is compatible with linking "-G" (is it?), the
abstract profile will affect the original data points which we assume
to need no correction because they come from actual readings. And
anyway, if restricted to linking then you can't "refine" an individual
profile standalone.

My take would be different:

- you build a profile (first round, let's call it p1) the standard
way; for simplicity let's say you use a 1000-patch chart and build
with 21 gridpoints per axis in the B2A table. Total 9261 gridpoints of
which probably over 70% are wasted space. (am I right?); so about
2000-3000 in-gamut gridpoints.

- you make a chart consisting of those B2A gridpoints, converted to
device space (abscol) through p1. Of course only those B2A gridpoints
that fall in gamut, and then only a sampling of them, so maybe 1000
new patches. This second chart will have 'weird' device values, so to
say, not ordered or anything, because they're sampling PCS space not
device space.

- you output and measure that chart, and append it to the first
measurement file. So now you have a measurements file that is 2000
patches, of which 1000 are the original testchart and 1000 are the
"select pcs gridpoints".
And then you build a new profile from scratch with this file.

I'd repeat in all printed testcharts a set of values as control
points; for example in chart2, add 200 patches from chart1 so that we
can track measurement/device tolerance; furthermore, we could even map
the tolerance by region, not a single averaged one.
Then as soon as our measured "pcs grid testchart" values fall within
the tolerance, we remove that point from the next iteration.

It seems to me that this method would make a very accurate B2A table,
for in-gamut gridpoints.

Then we could even go further trying to refine the gamut boundary: we
have already the Lab values of the gamut boundary, given by the first
testchart. If we map these through B2A, we'll have device values
interpolated from both the in-gamut gridpoints (which we already
refined) and the out-of-gamut ones. We test these values by printing a
chart comprised exclusively of gamut-boundary Lab values, converted to
device via B2A. Measure it, won't match; again we append these to the
previous measurements, we build a new profile, but then we replace the
in-gamut points of the new profile by the ones we already had "locked"
as good. So effectively we're only editing the out-of-gamut gridpoints
in a way that they will affect the interpolation of the gamut boundary
to achieve a greater precision.

Mmm... too far fetched?

-- Roberto Michelena
   Infinitek
   Lima, Peru

Other related posts: