色彩
RGB
RGB 三种颜色,红绿蓝,每种颜色 0.0 到 1.0,或者 0 到 255。
RGB 8-bit limited range:每个分量只取到 16-235 的范围,而 0-255 就是 Full range。
HSL
HSL,H(Hue)色相,S(Saturation)饱和度,L(Lightness)亮度。
直观上,H 代表它颜色在色环上的位置,S 代表它“颜色有多鲜艳”、距离灰色(R=G=B)有多远,L 代表它“颜色有多亮”、在黑色(R=G=B=0)到白色(R=G=B=1)的轴线上的位置。
H 是 0 到 360 度,S 是 0.0 到 1.0,L 也是 0.0 到 1.0。
对于 H,0 度对应红色,120 度对应绿色,240 度对应蓝色。
L 等于 RGB 三个分量里最大值和最小值的平均值。
HSV
HSV,H(Hue)色相,S(Saturation)饱和度,V(Value)明度。
H 与 HSL 里的 H 一样。V 则是 RGB 三个分量里的最大值。S 的公式不同。
YPbPr
Y:对 RGB 加权平均,三个权重之和等于一,范围是 [0.0, 1.0]
Pb:B 分量减去 Y,再放缩到 [-0.5, 0.5] 区间
Pr:R 分量减去 Y,再放缩到 [-0.5, 0.5] 区间
ITU-R BT.601 标准下,三个权重分别是 KR=0.299、KG=0.587 和 KB=0.114。
ITU-R BT.709 标准下,三个权重分别是 KR=0.2126、KG=0.7152 和 KB=0.0722。
ITU-R BT.2020 标准下,三个权重分别是 KR=0.2627、KG=0.6780 和 KB=0.0593。
YCbCr
YCbCr 是把 YPbPr 转成数字。
此时考虑 8-bit limited range,例如把 Y 映射到 [16, 235],Cb 和 Cr 映射到 [16, 240]。
色彩空间
不同设备能展现的颜色不同,比如一个设备的纯红 (255,0,0) 与另一个设备的纯红 (255,0,0) 可能不是同一个红色。为了保证颜色的一致性,引入色彩空间,把各种设备的各种 rgb 颜色放到一个设备无关的坐标系里。
例如:sRGB 里的 (255,0,0),是 P3 的 (234,51,35)。
gamma correction
人眼对亮度的感知是非线性的,对低亮度的细节敏感。为了给低亮度部分更高的精度,做 gamma encoding:encoded = pow(linear, 1/2.2) 然后保存,然后显示之前,再进行 gamma decoding:linear = pow(encoded, 2.2)。