"The Importance of Being Linear" is an excellent article, but there is a caveat.
What do we mean by linear? A linear change in RGB equals a linear change in photons output? Let's call this physically-linear.
Or do we mean that if we sit 100 people down and show them rgb(32, 64, 16) and then rgb(64, 128, 32) that they agree that the second is "twice as bright"? Let's call this perceptually-linear.
Physical and perceptual linearity are not the same and have different use cases. Physical linearity is important when you are simulating lighting: shadows, shading, etc. etc.
Perceptual linearity is probably more important when it comes to scientific visualization, because we are trying to use colour as a form of transmission of information from the computer into our heads, so it makes sense to "spread" out the colour as much as possible (note: I do not have a background in visualization, just experience in CG. I welcome input from those who know the field better.)
Physical-linearity is as "easy" as calibrating to your monitor (gamma, etc.) Perceptual-linearity is... harder. You can start by investigating CIE-LAB colour spaces etc., but the story most definitely does not end there (for example, check out "Interaction of Color" by Josef Albers.)
Gamma is a very complicated subject. Also the "legacy" aspect as mentioned, CRT had it, LCDs don't BUT to be "backwards compatible" they add this nonlinearity.
Looks like the same discussion of why are we talking about PAL/NTSC and interlacing in digital video formats.
The "legacy" theory is attractive but unfair. Ultimately, image reproduction is about controlling perception and human brightness perception is non-linear.
You should do any calculations in linear space (and possibly with a temporarily higher bit depth) but a linear display would not be desirable.
Imagine having a room with 10 independently controlled LEDs of equivalent brightness to a 10-watt incandescent lightbulb. Try to visualize the difference from going from 0 (pitch black) to 1 light, to 2, and then imagine 9->10. If you try this IRL you will notice that human brightness perception is very non-linear. To get the most bang per light switch, we need to make the later lightbulbs brighter to get the same punch. This is what monitors do with their bit depth.
It makes good sense for human perception to be non-linear: Earth has a very wide range of brightnesses we need to live in, and the difference in information we can acquire from being out in the sun vs. in the shade is not commensurate with the difference in brightness.
If you are in a very, very dark place (not a city at night) you will experience a very distinct non-blackness. Your eyes (brain?) are turning up the gain to try and extract information. (I don't know if this happens in a perfectly dark place.)
Uh sorry this was rambling. I should read that article...
Oh yes, human vision is non-linear, also adapted to a wide variety of situations (just try using a digital camera and see how several adjustments are needed and the eye does this "automatically")
But it's hard enough considering human non-linearity without adding any other non-linearities along the way (like the CRT ones)
It's true: although human perception is nonlinear in a similar fashion (logarithmic/expt) the exact way CRTs (and LCDs) transform is not based strictly on human perception (as far as I know). It is interesting to think of how it could be improved but I don't have any answers right now.
I completely disagree with the first example - rainbow map vs. custom color map for height data on a geographic map. The custom color map is designed to show a step at 0, which highlights the coastline. Depending on what you want show, this is very misleading! Besides the water, there is nothing special about the coastline. The rainbow map, on the other hand, shows how shallow the slope of the coast is, and how sensitive the coastline is to changes of the ocean level.
I also don't share the author's concern that rainbow color maps can introduce "bands" in continuous data. Maybe it's because I had to read so many of them over time, but in all except one of the examples, the rainbow color maps gave me at least as much information as the alternative encodings.
If the goal is to merely map elevation to color in a way that best reveals slope, then both colorings are pretty terrible. What you’d want instead is to have uniform change in lightness [lightness differences are the most salient perceptually].
The big problem with “rainbow” gradients is that they typically have some sections with steep change in lightness, and other sections of nearly uniform lightness, mixed together with nonuniform (in terms of human perception) hue and chroma changes from one part of the gradient to another. It’s very difficult to compare the slopes of a rainbow-gradient-mapped function across different parts of the gradient, and in some sections of the gradient very difficult to visually distinguish salient details.
It would be much better to have uniform changes in lightness. The simplest such map just goes from black to white in a perceptually uniform way. But if more distinctions are needed, then another possible method is to make the lightness attribute sort of sawtooth (or can potentially use more of a triangle wave, in some cases), while keeping chroma relatively constant and letting hue change close to uniformly. This makes a few places where the perceived lightness has either a change of slope or a discontinuity, but since the rate of lightness change is otherwise constant, it is still fairly easy to make comparisons. [I really should make a proper article/essay about this at some point, with some demonstrative images / interactive widgets: it’s much easier to show visually than to describe in text]
In the case of the chart under discussion, if the goal is to show the slope across the shoreline boundary and compare it to the slope elsewhere, I would recommend having uniform lightness change from dark [low elevation] to light [high elevation], combined with a hue discontinuity at the shore boundary. Because lightness is the most perceptually salient color attribute for noticing object boundaries, textures, fine details, motion, etc., it would still be possible to have a good idea of the slope across the shoreline boundary, while being able to perceive the boundary when closely examining the image.
[Note: such schemes will also generally be helpful for colorblind users]
I think both maps are useful, it just depends on what information you are concerned about.
The first map only shows the earth crust, so it's useful if you're only concerned with that. The second map, with the step at 0, raises the perception of a "hidden" feature, which is the ocean level.
Being colorblind, the bottom row in Figure 5 is completely useless to me. I can also not distinguish +1000 from -1000 on the left side of Figure 1.
Publishers, please use color only when it's really neccessary, and then please have some colorblind person available for sanity checking! While it might be hard to find someone with the less common variants, you can at least cover red-green.
Rather interesting, but can anybody point to something more practical? Ie some application or website that, given a couple of colors or preferences or sample data, constructs some sort of optimal color scale, preferrably also usable for the most common form of color-blindness?
Though note, it’s not really ideal for making gradients, since its “sequential” schemes only go up to 9 distinct categories, and its “diverging” schemes only go up to 11 distinct categories. If you took the suggested colors and made them equally spaced control points in a photoshop/CSS/etc. gradient, you’d get a reasonable outcome.
Also for gradients, I wrote a pretty simple colormap editor here: http://colormap.org/. This maybe gives too much freedom, since it doesn't enforce any best practices as far as colorblindness is concerned. But if you make sure the brightness (the gray line) is monotonic, it's a step in the right direction.
"Pravda" never means justice in Russian (saying this as a native speaker), it means "truth". Btw there was a famous communist newspaper named Pravda, too: http://en.wikipedia.org/wiki/Pravda.
The prettiest gradients won't look good if the output color doesn't match the displays gamma.