[argyllcms] Re: Best (smallest) profiling patch set


This is to use profile/mpprof to generate an mpp profile, and then use fakeread with 5000 test patches or so and the mpp profile, to generate a test set that can be fed into profile to generate a conventional icc profile.
I have done a test by resampling the USWebCoatedSWOP.icc profile, which describes a pretty well-behaved device with smooth device characteristics. From this profile, I have sampled a training set of 50 patches and a test set of 50000 patches.

Interestingly, from these 50 noise-free (pseudo) measurements, it seems to be possible to create a (non-parametric) ICC profile with "profile" which fits the test set of 50000 patches pretty well: peak = 4.796294, avg = 0.706745, rms = 0.881217. I had to choose a pretty low smoothness factor though, to obtain these numbers (I used -r 1.0 -rs 0.00003 for this profile, and btw., to make these numbers comparable, I'm already using rwf[] values of 1.0 in scat.c).

An mpp profile created from the 50 test patches seems not to give really better results, verified against the huge test set: avg err = 0.734959, max err = 9.429348.

It's also interesting, that an ICC profile re-fitted non-parametrically from 5000 points sampled from this MPP profile gives even a lower error than the MPP profile itself (with -r1.0 -rs1.0, which turned out to be an optimal smoothness factor for this particular data): peak = 3.851308, avg = 0.646701, rms = 0.775880


Without noise:

ICC: peak = 4.796294, avg = 0.706745, rms = 0.881217
MPP: avg err = 0.734959, max err = 9.429348
ICC from MPP: 3.851308, avg = 0.646701, rms = 0.775880


With noise:

fakeread -R 0.5:

ICC: peak = 12.481163, avg = 1.945920, rms = 2.233171
MPP: avg err = 2.100661, max err = 12.974311
ICC from MPP: peak = 9.925762, avg = 1.748951, rms = 1.972453

fakeread -R 1.0:

ICC: peak = 15.975544, avg = 2.626265, rms = 3.002383
MPP: avg err = 3.937223, max err = 31.624988
ICC from MPP: 20.960401, avg = 2.730346, rms = 3.324673

So I've the impression that at large noise levels with 50 data points, the MPP model behaves worse than the non-parametric model (with optimal smoothing factor), particularly the max. error of MPP is pretty large (31 dE!), although one would probably expect, that a parametric model would outperform a non-parametric model at higher noise levels. But it looks like the MPP model has still a pretty large number of parameters, and therefore likely still requires more samples to become more immune against noise.


Comparison with a larger number of patches:

From 5000 noisy patches (-R 1.0) I could create an ICC profile with peak = 6.254012, avg = 0.691324, rms = 0.850706 (verified against the huge test set), and an MPP profile with avg err = 0.866134, max err = 5.738640.


Conclusion:

For noise-free data, an astonishingly good profile could be generated from only 50 patches, for a device which behaves like USWebCoatedSWOP.icc. But if the data are "noisy" (measurement errors, reproduction error of the device, etc.), then the difference between a profile created from a small number of data points and a large number becomes clearly evident.


Regards, Gerhard


Other related posts: