I did some testing on my equipment and want to share my findings. TL;DR - I currently believe an XYZ LUT is the best ICC display profile type for darktable and other digital photo editing.
QUESTIONS
- Are LUT-based ICC display profiles only valid at one white level (i.e. backlight brightness)?
- Is the accuracy of matrix-based ICC display profiles more tolerant of white level changes than LUT-based profiles?
MY CONCLUSIONS
- A high quality LUT-based display profile does not show a significant change in accuracy when changing the display white level by ±70 nits and can therefore still be considered valid in that range. Average and max ΔE*00 remained at acceptably low levels (<2).
- The tolerance of matrix-based display profile accuracy to ±70 nits changes in display white level shows no significant improvement over a LUT-based profile, while having considerably worse overall accuracy, regardless of the display white level tested.
Absent convincing evidence to the contrary, I will continue using an XYZ LUT-based ICC display profile for use with darktable, since it gives better color accuracy, even at varied white levels. I see no downside on an SDR monitor. As mentioned before, according to DisplayCAL’s developer this is the recommended profile type for 99%+ of scenarios.
Caveats:
- To create my LUT profile, I used the “very large testchart” in DisplayCAL, which has nearly 5,000 color patches and takes about two hours to profile. Yes, it’s annoying to have to wait that long, but I think this is necessary to get a high-quality LUT profile. My conclusions may not be valid if you use DisplayCAL’s much smaller default set of only 175 patches.
- LUT-based display profiles have the potential to create color casts in dark greys and/or banding in a variety of dark tones. While both my LUT and matrix profiles introduce some minor color cast in dark greys on my display, I actually find the LUT profile to be more neutral in this regard. Banding was about equal between the two. This is highly specific to your display, so I suggest you observe a grey/brightness ramp and color ramp using both types of profiles to determine if the LUT profile introduces artifacts on your display you find unacceptable compared to a matrix.
- I have no idea what happens on an HDR monitor where you could potentially change the display brightness by ±500 or more nits.
TESTING METHODS
I created two ICC display profiles with DisplayCAL, an “XYZ LUT + matrix” profile and a “Single gamma + matrix” profile, both created with relative colorimetric rendering intent and with my display white level set to 160 nits and a target white point of D65. My understanding is that all matrix profiles must at least have a single gamma function for them to function properly. There is no “matrix only” profiling option offered in DisplayCAL. Also note that “XYZ LUT + matrix” is effectively a LUT profile with a separate matrix fallback profile, in case your software doesn’t support LUT’s; the LUT and matrix aren’t used simultaneously.
Based on the excellent information regarding ICC display profiles on ninedegreesbelow.com (big thank you to @Claes for providing the link), I used the “Very large testchart for LUT profiles” as my profiling testchart in DisplayCAL to create the XYZ LUT display profile, since LUT profiles apparently need lots of patches for the best results. For the single gamma + matrix profile, I left the testchart setting at the default “Auto-optimized.”
For each ICC display profile created I then used the verification tool in DisplayCAL with the “XXXL verification testchart” to measure the ΔE’s with my display set to 90 nits, 160 nits, and 230 nits (a control measurement and ±70 nits measurements, which captures most of the usable brightness range at which my display can maintain a white point reasonably close to D65).
My display is a VA type panel with a W-LED backlight. It provides about 120% coverage of sRGB and 90% coverage of DCI-P3.
RESULTS
XYZ LUT + matrix display profile @ 160 nits - control measurement
- Whitepoint ΔE*00 - 0.91
- Average ΔE*00 - 0.33
- Maximum ΔE*00 - 1.4
XYZ LUT + matrix display profile @ 90 nits
- Whitepoint ΔE*00 - 1.65 (0.74 increase versus control)
- Average ΔE*00 - 0.48 (0.15 increase versus control)
- Maximum ΔE*00 - 1.82 (0.42 increase versus control)
XYZ LUT + matrix display profile @ 230 nits
- Whitepoint ΔE*00 - 1.03 (0.12 increase versus control)
- Average ΔE*00 - 0.34 (0.01 increase versus control)
- Maximum ΔE*00 - 1.41(0.01 increase versus control)
Single gamma + matrix display profile @ 160 nits - control measurement
- Whitepoint ΔE*00 - 1.22
- Average ΔE*00 - 1.9
- Maximum ΔE*00 - 4.11
Single gamma + matrix display profile @ 90 nits
- Whitepoint ΔE*00 - 1.76 (0.54 increase versus control)
- Average ΔE*00 - 1.8 (0.1 decrease versus control)
- Maximum ΔE*00 - 4.14 (0.3 increase versus control)
Single gamma + matrix display profile @ 230 nits
- Whitepoint ΔE*00 - 1.25 (0.03 increase versus control)
- Average ΔE*00 - 1.99 (0.09 increase versus control)
- Maximum ΔE*00 - 4.13 (0.02 increase versus control)