[ Back to main ]
[ Back to colors page ]

Isoluminant Colors                                              


Isoluminant colors  are a set of colors with the same luminance,
or same level of grayness.  Here I provide full sets,  palettes,
and color pyramids for every gray level.                        

Full Set                                                        

I can use the color to gray conversion method  to collect colors
by gray level. In the RGB color space there are 256^3 = 16777216
colors and 256 levels of gray,  but the distribution has a large
deviation.  The number of colors per gray level  is in the range
of 10 to 125000.                                                

You can find the full set here. Colors are sorted by RGB values.

Isoluminant Color Pyramids                                      

For my color vision friendly palette project I have to deal with
the space of combinations of isoluminant colors  of several gray
levels. Taking only two gray levels with 100k colors, the number
of pairs is 100000^2, 10 billion.  I will go up to 14 levels, so
something must be done to make the problem space to a manageable

Pyramids can help with these kind of problems if carefully engi-
neered. I need a method that reduces the count of colors step by
step so that every color in the smaller set has a determined set
of connected colors in the larger set including itself. However,
in the same time, the smaller set should cover and represent the
original color range as good as possible. The usual quantization
methods fail these criteria as they produce colors which are not
in the input set and they are designed to be used common images,
not on palettes.                                                

I  find out that the key to that method is  a way of sorting the
isoluminant colors so that  the chain of colors  is more or less
continous and the neighbouring colors are visually similar. With
this special sets, luminance differences are not a problem. That
reduces the sorting problem from 3 to 2 dimensions.  Best candi-
dates for these two dimensions are coming from the HSV/HSL color
spaces, hue and saturation.                                     

After some trials, I found out that I should make even number of
clusters  by saturation for the  first order of sorting.  Second
order of sorting is done by hue with alternating order direction
between the clusters. The third and fourth orders of sorting are
saturation and value/luminance –  just to keep it deterministic.
With a good cluster size which ended up being 4, this produces a
nice chain of colors.                                           

I ended up with a small to large method, with a determined count
of initial colors.  The initial colors  are picked  so that they
differ from each other as much as possible.  CIELAB Delta-E 2000
has been used again for differentiation measurement.  As a first
step the two most different colors are picked from the full set.
If the initial number of colors are larger than tow,  subsequent
colors  are added one-by-one so that the appended color is being
the most distinct from all of the previously included colors. At
the end,  the initial colors are sorted  as mentioned earlier to
form the first level of the pyramid.  I found the initial colors
a nice palette for the given luminance.                         

Subsequent levels  are done by going over all neighbouring color
pairs of the smaller set,  including the pair of last  and first
colors. For every of these pairs, take all bracketed colors from
the full set, sorted, then  if possible, split  the range to six
evenly sized parts.  From part number 2,  sort the colors  by dE
value against  the first color of the pair,  take the one in the
middle and add to the larger set.  Similarly with part  number 5
and the second color of the pair. Less than 6 color brackets are
handled specially:  1 and 2 sizes are added instantly, #1 and #3
are added form 3 size,  while first and last two colors form the
parts to measure dE value on for sizes 4 and 5 the smaller being

Note that  going from larger set to the smaller,  the connection
lines would end up strictly vertical  without reflection  to the
peaks of different colors of the full set.  In other words, some
unique colors could be easily left out from smaller size levels,
crowded out by colors which are similar to others already in the

You can find the sets here.  Filename format is hexadecimal gray
level dash count of initial colors dash level.  Level 1  has the
initial colors, while the highest level has the full set of iso-
luminant colors. Colors are sorted like mentioned above.        


Fun Project                                                     

I was curious how an image would look if all pixels are replaced
by a random isoluminant color.                                  

You can find more test and demo images in the repository.       

You can find the GRAYSCALE and CVD palette projects on GitHub.