|
I'm puzzled by how XYZ values are to be used as
input to transformations. In particular, I want to transform some XYZ values
into monitor RGB values.
(1) Suppose I have RGB values in, let's say, sRGB,
of (127, 127, 127). If I understand correctly, if I transform these into XYZ
using an sRGB -> XYZ transform, (that is, using the sRGB profile as input,
and XYZ profile as output), I'll get XYZ values referencing D50. Is that
correct? The values I get in this case are: X = 0.204712, Y = 0.212311, Z =
0.175171.
(2) Now, suppose I have a monitor profile and want
to convert those XYZ values into RGB values in the monitor space. So, I create
an XYZ -> monitor profile transform using perceptual intent. When I do this,
I get RGB values of 123, 123, 126. The visual appearance on the screen is a
bluish cast. Yet if I create a transformation from sRGB -> monitor profile
directly, (and using perceptual intent) I get RGB values of 126, 125, 126,
which appear neutral gray on my particular monitor. These are also the same
values that Photoshop gets as well. (That is, I read the values directly
off the Photoshop window with a third party pixel sampler.)
(3) The problem is more apparent if I transform
sRGB values of 255, 255, 255 to XYZ, and then to the monitor space. The
resulting RGB values are 250, 253, 253 with a very visible cyan cast. Yet if I
go direct from sRGB to monitor RGB, I get values of 255, 255, 255, which
matches what I get in photoshop as well.
So obviously, I'm doing something wrong when going from XYZ to monitor RGB. I'll bet it has to do with the assumed ref white of the monitor profile. Do I have to chromatically adapt the XYZ values from D50 to whatever the monitor profile ref white is first? And how do I even know the ref white of the monitor profile? A more general question, then, is what is the assumed ref white of XYZ values that are input to a profile? Help!
Bryan
|
