I’d like to revisit the topic of color correction circuits for a bit.
To refresh the memory of anyone who’s forgotten (or didn’t read the earlier posts), CRT televisions with out-of-spec phosphors (basically all of them), generally included a “color correction circuit” to compensate for the discrepancy. So, if we really want to get the colors correct, we need to first emulate the behavior of the CCC, then do a gamut conversion from “NTSCJ white point and P22 phosphors” to sRGB/BT709 used for modern PC monitors. The behavior of these circuits is not well documented, and varied across time periods and manufacturers. 1970s era CCCs were abominations; 2000s era CCCs looked vaguely like a proper gamut conversion with some effort to deal with the clipping problem; what came in between was in between. Recap over.
I’m happy to say that I’ve found a couple patents that really do tell you everything you need to know to reproduce the circuit. In both cases, I was able to work out the math in a spreadsheet.
This patent was filed by Chunghwa Picture Tubes, Ltd. in 2003. While specifically intended for plasma television sets, its approach is applicable to the “phosphors don’t match the spec” problem in general. Adjusted for the “NTSCJ-spec to NTSCJ-white with P22 phosphors” case, it reduces to: multiply this matrix by the linear RGB input, clipping output if needed:
1 | -0.042983396021096 | -0.006989606552852 |
---|---|---|
-0.374953732450873 | 1 | -0.050527229116143 |
-0.107808598004971 | 0.069276873840935 | 1 |
A major shortcoming of this approach is that it moves white noticeably towards pink. (I’ve got an idea for a kludge to fix that, at the expense of not faithfully reproducing the circuit.) If you worry about not infringing patents even if no one likely cares, this patent expires in June 2025.
This patent was filed by Sanyo Electric Co Ltd in 2004. Like the other one, this one was specifically intended for very early OLED televisions, but involves another general solution for the “phosphors don’t match the spec” problem. It’s a more advanced take on the same principles as the other one, trying to correct at 7 points instead of 3. This one also suffers from moving white (though towards a more believable light teal). This patent was deemed abandoned due to Sanyo’s failure to respond to the patent office, probably because their facilities got flattened by an earthquake later in 2004 and the company basically collapsed after that.
Moving into the realm of speculation:
There was probably a generation of TVs that just multiplied by the correct gamut conversion matrix and didn’t even try to solve the clipping problem.
I’ve conceived a “generic shitty CCC simulation” that does a weighted interpolation between the correct gamut conversion and no correction based on saturation. This is based on the notions that: (a) The simple matrix approach is dead easy and gives correct answers for non-saturated colors where clipping isn’t a problem. So I speculate manufacturers used it. (b) Manufacturers probably didn’t want to give up the best saturated colors their phosphors could produce, nor accept local saturation inversions due to compression. The only way not to do at least one of those things was to have no correction all the way out at the primaries. © It looks “right” on one game where a proper gamut conversion looks notably wrong.
My next step is to work on C++ implementations of these so I can generate some LUTs from them.
What I still really, really hope for is to find documentation on a CCC that was definitely used in late 90s Japanese consumer CRT television sets.