11

在 RGB 模型中,每个像素由 3 个字节定义,分别用于 R、G 和 B。这给出了总共 2 24种颜色,包括 256色调的灰色。

float用s(不是bytes)来表示 HSV/HSB/HSL 模型是很常见的。大多数描述将色调描述为圆锥中的“角度”,因此将其视为实数是明智的。

但这与 2 24种总颜色的实际限制有什么关系……?有多少种不同的色调可供选择?此外,在我看来,这个数字应该取决于其他参数——例如饱和度。


有趣的阅​​读:http ://www.dig.cs.gc.cuny.edu/manuals/Gimp2/Grokking-the-GIMP-v1.0/node52.html

4

3 回答 3

8

在 HSV 中,色调定义为

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

链接)。在六个扇区(RY、YG ...)中的每一个中,都有同样多的色调。此外,区域之间的边界有六种色调。所以,6 + 6 * huesRY

在红黄色区域,R > G > B,所以 atan2 的两个参数都是正数。

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

因为我们可以对 [x,y] 的集合应用任何线性变换而不改变其比率的计数,x / (x+2y) == x / y

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

如果我们从所有 R,G,B 中减去相同的值,则比率不会改变,因此假设 B=0

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

因此,色调是两个小于 2^8(假设每个通道 8 位)的正整数之间的比率的六倍,还有六个。有多少对互质的正整数就有多少比率。下面n与互质的正整数的个数n称为欧拉函数。OEIS 列出 了它的 部分金额。正好有 19948 对互质的小于 256 的正整数。

6 * 19948 + 6 = 119 694

HSV 模型中有 119 694 种不同的色调对应于 8 位 RGB 模型中的一种颜色。请注意,它们的间距不均匀。

如果在 HSV 模型中使用每通道 8 位,那么与每通道 8 位的 RGB 模型相比,颜色会更少,因为一些 HSV 三元组映射到相同的颜色,而每个 RGB 三元组定义不同的颜色。

于 2012-11-24T09:11:36.977 回答
0

在 RGB 颜色中,可以从 (2^3*depth-2^depth/Luminance)/3= 计算色调,因此 15 位颜色具有 341 种不同的色调

24 位颜色有 21845 种不同的色调

如果有 119000 种色调剩余的颜色所有色调 - 红色色调的红色色调将是 256,X,Y 大约 2^16,这意味着绿色和蓝色色调比红色少?

于 2016-09-20T19:14:25.447 回答
-1

'RGB 中有 1,530 种色调(256,256,256),这真的很简单。'这有效地揭示了 RGB 的“分辨率”,因为要成为一种独特的色调,一个 rgb 必须是 255,另一个必须是 0,第三个有 256 个值要递增,在极端情况下重复更少。其他一切都是色调、色调或阴影。所以,让我们把它们加到 0 和 255 的六种组合中,然后把它们也算作我,边走边说:

Dim I As Integer
Dim R, G, B As Byte
Dim Spectrum(0 to 1529) as Long
I = -1       'Incremented before each use
R = 255: B = 0   'G inc  RED
For G = 0 To 255         '256
    I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
G = 255: B = 0   'R dec  YELLOW
For R = 254 To 0 Step -1 '255
    I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
R = 0: G = 255   'B inc  GREEN
For B = 1 To 255         '255
    I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
R = 0: B = 255   'G dec  CYAN
For G = 254 To 0 Step -1 '255
    I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
G = 0: B = 255   'R inc  BLUE
For R = 1 To 255         '255
    I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
R = 255: G = 0   'B dec  MAGENTA
For B = 254 To 1 Step -1 '254
    I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
'I = 1,529 = 256+255+255+255+255+254 No duplicates
'Hue = I * 0.23529411764705882353°
'0° is Red at I = 0, so I=0 counts as 1 so, 1 + 1,529 = 1530
于 2021-12-16T20:48:21.480 回答