[argyllcms] Calculating profile from sensor spectral data?
- From: Per Baekgaard <baekgaard@xxxxxxxxxx>
- To: argyllcms@xxxxxxxxxxxxx
- Date: Mon, 17 Apr 2006 00:12:18 +0200
Having recently found this list, I'm hoping to get a little input from
some of the more seasoned colour guru's here...
I'm using argyll to build some profile data for a specific application,
and have also been discussing a bit off-list with Graeme on this a other
not related colour/argyll issues. Even though this is not directly
related to the way the code works, I thought I'd ask for advice on the
list here -- hope that is OK?
Anyway, I have spectral data for how the R, G and B sensors behaves for
a particular input device. This is probably a quite thorough
characterization of the device, and I figured I should be able to build
a profile based on this data.
I have a number of ideas how it could be done...
First approximation would be to find the "best fit" (least RMS) weights
giving coefficient of x-bar, y-bar and z-bar for each R, G and B
spectral curve. This would leave me with a 3x3 matrix mapping device RGB
into xyz, although I'm sure this will be quite "rough".
A better idea, I think, is to calculate, for a given set of theoretical
colours, the resulting RGB and XYZ coordinates, and use this data to
build a profile.
The key will then be in selecting the theoretical colours in a suitables
I assume that the more data the better, but I also guess that there is
not a guaranteed "good" mapping. By definition (since the sensors do not
directly measure xyz-bar), two metamers (identical looking but different
spectral distributions) will not give the same RGB response, even though
their XYZ values are the same.
One option is to calculate the expected corresponding RGB response and
XYZ coordinates for pure spectral colours, sweeping from 380nm to 780nm
in 2nm increments or some such. By then mixing this with the response of
the selected illuminant (D65), I can create a number of more or less
saturated colours, and by varying the luminance, I can at the end of the
day generate a pretty full set of colours and matching RGB->XYZ values
to feed to "profile".
However, I'm not sure if this will give me a good profile. I expect real
world colours are not too often purely spectral, and I guess that some
real world spectra would have been better to use. I have found the 24
Gretag spectra and can use those too, as a supplement. But I don't have
access to a large database of e.g. skin and paint spectra.
Any ideas on how the above would work?
Or any better ideas for how to do this?
Note that this profile will be used for further refinements and tweaks;
I just want to start out with as "accurate" a profile as possible.
Thanks in advance,
Other related posts: