Jump to: navigation, search

Equidistinguishable colors

I'm not sure where I should put this note, so I'm adding it here. I hope it might be of interest to someone; if it is not appropriate, well, it can always be deleted.  :) Keep in mind that I am by no means a color expert but just did what I had to do to achieve my goal, which I will describe.

A problem with using CIELAB, Munsell, and other color schemes is that they are based on the range of colors distinguishable by the human eye. The range of colors that can be displayed on a typical LCD monitor is smaller. The result is that some colors that are located relatively far from each other on their color charts might be indistinguishable on a monitor.

I did some work for a specific case that may or may not be applicable to XO - indeed it may be the opposite, since I wanted equal lightness for all colors - but the method I used shows one way to obtain equidistant colors as perceived on an LCD monitor.

For my project (Metamath), I wanted colored number labels (say 1 to 10000) that (a) should approximately follow the rainbow spectrum, so the user could judge the rough size of a number by its color alone, (b) any two numbers should be equidistinguishable, regardless of color (i.e. if 100 and 200 are just distinguishable, so should 9100 and 9200), and (c) on a black-and-white printer, the colors should be 50% gray.

At first I tried to use the colors around the perimeter of a 50% luminance CIELAB chart, which is supposed to represent (I think) equidistant colors based on human color perception. However, it doesn't on an LCD monitor. For example, the transitions between colors are in smaller regions than the main colors themselves. (The image I used was Lab_color_at_neutral_luminance.png at Wikipedia, but it seems to have been deleted for copyright reasons. Google shows a couple of caches e.g. [1]) I think this has to do with the color gamut of the monitor. Nonetheless, an LCD monitor is what most users are looking at, and I couldn't find any color chart customized for LCD displays.

So, I wrote a small "computer game" (quick-and-dirty Javascript in a web page) that increased the distance between two colors (going around the neutral luminance CIELAB chart border, starting at red and stopping at purple-red) until they were just distinguishable. It asked the user to identity a word in one color written on the background in another color, and it recorded whether the user was correct or not, along with the color distance. I went through a couple of passes of this and also had my son do it (with the goal of maximizing a "score" of the most right answers).

The result is shown here: [2]. For comparison I put the CIELAB chart perimeter, stretched out linearly and widened to a ribbon, under it.

For reasons I don't understand, the "neutral luminance" CIELAB chart doesn't convert to uniform gray in Photoshop's convert-to-grayscale function, nor does it print a uniform gray on a black and white printer. So I made some additional adjustments to make that happen.

My final application was intended to help the user identify roughly, with a quick glance, how advanced a theorem is when referenced in a proof, so that trivial logic glue steps can be skipped to help get a quick proof overview. I'm sure the extreme extent I went to wasn't really necessary, but once I started I felt challenged to get it what I considered "right". An example showing the full spectrum of numbers in the final application is at the top of this page: [3]

I have a further discussion of this in the "(21-Aug-2006)" (search for that string) entry of [4], which describes where the final color-generation code is located for anyone interested.

This work and my image referenced above are public domain, and the software code is GPL. Norm Norm Megill 24 Dec 2007

Personal tools
  • Log in
  • Login with OpenID
About OLPC
About the laptop
About the tablet
OLPC wiki