I have been bashing my head against getting a projector (EPSON EB-G5100)
to show some semblance of a normal image for about 4 weeks now.
Setup:
We are using the projector to rear-project onto a dark screen (it is in
an MRI bore for showing visual stimuli to patients while they get their
brains scanned).
I have used a Colordata SpyderX to do profiling/calibrations. I can buy
other equipment if needed. I bought a cheap Lux photometer for ambient
to double-check spyderX and they both report very low in range <40 Lux.
I'm using various versions of GNU/linux to run all my tests and will use
it to control stimulus presentation. Right now ubuntu 20.20 with
argyllcms (I tried DisplayCal GUI but he didn't port it to python 3 yet
so I'm using dispcal, which is great).
I'm sending the input from a laptop with an intel chip via HDMI (may be
relevant). I have tried with nvidia video card as well. I've tried a few
different laptops, and one windoze desktop machine.
1) If I set everything to "default" settings and set the projector in
sRGB mode, and take report on uncalibrated display, it returns a
correlated color temperature of white of 25000K (so...not sRGB, right?
Horrible). It is quite bright. It also reported an "effective gamma" of
about 1.0.
2) This seemed weird, so I ran some tests. To quickly check the gamma
curve, I used testgen etc. to generate some "achromatic" RGB values from
0 to 100, and then dispread with my SpyderX to profile the display's XYZ
response to those inputs.
3) If I plot X, Y, and Z, it looks like this:
Y increases in what looks like a normal gamma curve of 2.2 until near
the middle, and then "saturates" and stays flat through the highest
white values. (so, if you only took the minimum, middle, and maximum
achromatic, it would look like something like a straight line)
Horizontal axis is input RGB achromatic color (i.e. send 0,0,0, 7,7,7,
255,255,255 etc.). Vertical axis is Y coordinate in XYZ space reported
by spyderX.
xxxxxx
x
x
x
xx
XYZ's X looks similar to Y
XYZ's Z keeps increasing to the very highest white, following a roughly
2.2 gamma curve (I guess making it more blueish, if I convert the
outputs from XYZ to e.g. Lab).
I assume the weird flat parts are what cause "Failed to invert Jacobian"
when I run dispcal to let it automatically do its thing.
-------------------------------------------------
Any ideas at this point? Is this a "typical" response for a display?
Is my only option to basically just give my video card a look up table
that says "only send RGB values in the middle range"? This seems like it
should not be true, since the specs "say" that the projector can show
full color (i.e. 8x8x8 gradients), implying to me that I should get a
different color for every input.... (I guess, technically, I am...but in
very weird dimensions).
Or, am I doing something wrong already (i.e. do I have a "wrong" lookup
table loaded in the video card and that is what causes this weird
behavior?). I tried to "unload" whatever is in the video card in
different ways and it doesn't seem to change anything. Does dispread
correctly unload weird tweaks to how video card modifies my signals I'm
trying to send? So when I try to send a 0 byte, it sends a 0 byte to the
display, and when I try to send 255, it sends 255, without going through
any lookup table stuff?
[[Note, I tried projecting from a windoze machine too and it had exactly
the same issue, so it is not driver, I think...]]
I have a bunch of data, graphs, plots, and a 40 page technical paper I
wrote in LaTeX to summarize everything I've tried and failed at and the
measurements. What I'm really looking for is ideas of what could be
happening, other things to test, etc.. I can share them but it is really
a lot of data (can I add attachments? Or host on a server is best?)
========================
Current hypotheses:
a) Limited RGB range being input due to HDMI (checking that today). But
the range of "saturated" whites is too high to be the typical 16-235.
b) The projector is "cheating" to get very white whites by making them
more blue, without actually increasing luminance. However, the specs say
it should be able of producing 16.77 million colors (true color). Again,
I guess each input is giving me a "technically" different color, but not
in the expected directions.
c) The screen itself has some non-linearity due to different
refraction/flare rates or something, causing the issue? I tried placing
the colorimeter further away and got the same results. I tried different
areas of the screen, same results.
I tried various other settings e.g. reducing "brightness" (which does
not actually reduce the lamp brightness, but seems to shift the whole
gamma curve to the right, or increase the gamma, it is hard to tell
because of the saturation effect).
If I set the brightness too "low" then basically a "floor" effect
happens in the blacks. If I set brightness to minimum (which is still
very bright), the bottom 40% of input RGB values map to the minimum
black Y in XYZ space (about 4 cd/m2 -- max white is 920 cd/m2).
I guess a colorimeter such as the SpyderX is not great at measuring
absolute luminance, so maybe I should not be reading too much into the
(absolute) XYZ values. But it should still be capable of telling
relative values.
I tried setting the hardware lamp setting to "high" (there are only 2
options high/low), and actually it doesn't change the lamp brightness
either, but does something with the gamma curve similar to changing the
brightness in the software settings of the projector.
Other things I've tried:
1) messing with xrandr settings, setting gamma there (doesn't get rid of
saturation problem)
2) changing to "theatre" or "dynamic" mode of projector, which allows me
to set color temperature etc. This allowed me to "configure" to get a
nice balanced white that was 6500K, but still showed a saturation effect
of the XYZ Y luminance.
3) (My initial approach) Write some dirty hacky scripts (python) for
calculating/visualizing 3D gamut, calculating borders of gamut using
Gamut Border Descript in spherical coordinates, interpolating etc., and
then e.g. applying tone mapping and color gamut correction from Sikulova
et al. 2016 or Mantiuk et al 2008/2009. I was trying to move from XYZ
space measured on my "normal" laptop computer to get the same perceptual
representation of a stimulus (e.g. photo) on the MRI projector screen,
but found part way through that the profile of the screen was not
accurate (it had those dead zones at the top and bottom and may have
been messing up my conversions). You'd think that this kind of thing
would be a "solved problem" for vision scientists or something, but
noooooooooo....