In RGB model how many distinct hues are available?

colors, hsb, rgb

Solution

In HSV, the hue is defined as

H = atan2( sqrt(3)*(G-B), 2R-G-B )

(link). In each of the six sectors (R-Y, Y-G ...), there are equally many hues. Additionally, there are six hues at the boundary between the regions. So, `6 + 6 * huesRY`.

In the red-yellow sector, R > G > B, so both arguments to atan2 are positive.

 count sqrt(3) * (G-B) / (2R-G-B)
=count (G-B) / (2R-G-B)
=count (G-B) / ((G-B) + (2R-2G))

since we can apply any linear transformation to the sets of [x,y] and not change the count of its ratios, `x / (x+2y) == x / y`

=count (G-B) / (R-G)

if we subtract the same value from all R,G,B, the ratio does not change, so assume B=0

=count G / (R-G)
=count G / R

so, there are six times as many hues as there are ratios between two positive integers that are both below 2^8 (assuming 8 bits per channel), and six more. There are as many ratios as there are pairs of coprime positive integers. The number of positive integers below `n` that are coprime with `n` is called the Euler's totient function. OEIS lists its partial sums. There are exactly 19948 pairs of coprime positive integers below 256.

6 * 19948 + 6 = 119 694

There are exactly 119 694 different hues in the HSV model that correspond to a color in the 8-bit RGB model. Note that they are not spaced evenly.

If 8 bits per channel are used in the HSV model, then there are less colors than in the RGB model with 8 bits per channel simply because some HSV triples map to the same color while every RGB triple defines a different color.

Problem

In RGB model, each pixel is defined by 3 bytes, for R,G and B respectively. This gives a total of 224 colors, including 256 tones of grey. It is very common to represent HSV/HSB/HSL models with `float`s (not `byte`s). Most descriptions describe hue as the "angle" in a cone, so it's sensible to treat it as a real number. But how does this relate to the down-to-earth limit of 224 total colors..? How many distinct hues are available? More over, it seems to me that the number should depend on other parameters - saturation for instance.. Interesting reading: https://web.archive.org/web/20170622125306/http://www.dig.cs.gc.cuny.edu/manuals/Gimp2/Grokking-the-GIMP-v1.0/node52.html

Original source