[argyllcms] XYZ Y does not have clean gamma curve (has flat section at high end) while profiling EPSON EB-G5100 projector

  • From: Richard <richard.e.veale@xxxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Mon, 3 Aug 2020 07:46:47 +0900

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....

Other related posts: