Hacker News new | past | comments | ask | show | jobs | submit login
Why Should Engineers and Scientists Be Worried About Color? (1996) (ibm.com)
97 points by nvr219 on Nov 18, 2013 | hide | past | favorite | 20 comments



If you care about color, you should not miss "The importance of being linear" http://http.developer.nvidia.com/GPUGems3/gpugems3_ch24.html and corresponding discussion on wrong gamma in a variety of programs http://www.4p8.com/eric.brasseur/gamma.html

The prettiest gradients won't look good if the output color doesn't match the displays gamma.


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


Very interesting.

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.


I think both, side-by-side, convey more valuable information than either alone.


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.


>Hi could you please make an article about color that uses color figures, work for people that can't see all colors?

I hope you are joking. Maybe after they get done doing that we can have an article on smells with smells that people who can't smell can smell.


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?


Cynthia Brewer’s “Color Brewer” is a great tool. http://colorbrewer2.org

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.


There are libraries for matlab (and I think matplotlib too) that let you interpolate the ColorBrewer maps into gradients. Here's the matlab one: http://www.mathworks.com/matlabcentral/fileexchange/34087-cb...

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.


Cool editor, thanks for the link.

I wrote a library similar to what you describe for matlab in java: http://www.dishevelled.org/color-scheme/


Trivia: their perception rule-based system is called "PRAVDA", which means "The Truth" in Russian.


Actually "Pravda" means justice. Not only in Russian but in other Slavic languages as well.


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


My bad. Justice in Russian is actually "pravosudie" (if I got the romanization right).

Justice in Croatian, Serbian, Macedonian, Bosnian and some other Slavic languages is "pravda". Predominantly in the South Slavic group it seems.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: