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