Skip to content

色彩

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)。

Comments