颜色模型介绍
颜色模型介绍
在计算机中,颜色的处理主要通过不同的颜色模型来实现。这些颜色模型通过数学方法描述颜色的特征,以便在显示设备(如显示器、打印机)或软件中准确地表示和处理颜色。常见的颜色分类标准包括RGB、CMYK、HSV、LAB、HEX等。RGB和CMYK是最常见的颜色空间,分别用于显示器和打印机;HSV和LAB则提供了一种更接近人类视觉感知的颜色表示方式;HEX通过一个六位的十六进制数表示,适合网页设计。
RGB(Red-Green-Blue)
RGB是计算机最常用的颜色模型,可以表示的颜色总数为 256 × 256 × 256 = 16,777,216 种颜色,这被称为24位颜色或真彩色
原理:基于光的三原色原理,通过红、绿、蓝三种颜色光的混合来产生各种颜色。每种颜色光的强度可以用一个数值表示,范围通常是 0 到 255(8位,即256级灰度)
表示方法:颜色用三个分量表示,例如 (R, G, B)。例如,(255, 0, 0) 表示纯红色,(0, 255, 0) 表示纯绿色,(0, 0, 0) 表示黑色,(255, 255, 255) 表示白色
应用:主要用于电子显示设备,如显示器、电视、手机屏幕等,因为这些设备的像素点由红、绿、蓝三个子像素组成(LED屏幕或LCD液晶屏幕,原理一样,均是三原色RGB)
CMYK(Cyan-Magenta-Yellow-Black)
CMYK 是一种用于彩色印刷的颜色模型,通过青(C)、品(M)、黄(Y)三原色油墨的不同网点面积率的叠印来表现丰富多彩的颜色和阶调。
原理:基于减色原理,通过吸收特定波长的光来呈现颜色。青色(Cyan)、品红(Magenta)、黄色(Yellow)是三种基本墨水颜色,黑色(Black)用于增强对比度和细节。
为什么使用CMY三种颜色?而不是RGB三种颜色?
当红绿蓝三原色被混合时,会产生白色;但是当蓝绿色、紫红色和黄色三原色混合时会产生黑色。
红色颜料会吸收绿色和蓝色的光线并反射红色的光线,蓝绿色会吸收红色光线并反射蓝色和绿色的光线,同理类其他4中颜色。
在印刷过程中,颜料的混合遵循减色原理,通过不同的颜料吸收不同的光线,调配出所需的颜色,所以应该使用CMK三原色。
要注意的是,CMY无法调配出白色,因为白色需要反射所有光线,而CMY颜色会吸收固定颜色光线,所以无法调配出白色。
表示方法:颜色用四个分量表示,例如 (C, M, Y, K),每个分量的值通常在 0 到 100% 之间。例如,(0%, 0%, 0%, 100%) 表示纯黑色,(100%, 0%, 0%, 0%) 表示纯青色。
应用:主要用于印刷行业,如彩色印刷、喷墨打印机等。打印时,首先将计算机中RGB模型图像转化为CMYK模型(转换过程中可能会出现颜色偏差),准确控制墨水的使用,通过3原色油墨的不同网点面积率的叠印,实现彩色打印。
RGB与CMYK色域的对比
RGB色域:由于其加色原理和发光特性,RGB色域能够覆盖非常鲜艳的亮色和高对比度的颜色,色域范围更广。
CMYK色域:由于减色原理和物理限制,CMYK色域相对较窄,难以实现高饱和度的亮色,主要覆盖中低饱和度的颜色。原因是颜料的混合会导致吸收光线的变化,会导致无法实现亮度颜色饱和度。
HSV(Hue-Saturation-Value)
HSV 是一种基于人类视觉感知的颜色模型,更符合人类对颜色的理解,便于调整颜色的明暗和饱和度,可通过公式和RGB模型进行转换
原理:
- 色相(Hue):颜色的种类,如红、黄、绿等,用角度表示(0°到360°),对应于色轮上的位置。
- 饱和度(Saturation):颜色的纯度,范围从 0 到 1。饱和度为 0 时,颜色为灰色;饱和度为 1 时,颜色最鲜艳。
- 明度(Value):颜色的亮度,范围从 0 到 1。明度为 0 时,颜色为黑色;明度为 1 时,颜色最亮。
表示方法:颜色用三个分量表示,例如 (H, S, V)。例如,(0°, 1, 1) 表示纯红色,(120°, 1, 1) 表示纯绿色。具体在程序中的体现,H的范围位 0 ~ 360 或 归一化到 0 ~ 1 范围。
应用:广泛用于图像处理、图形设计和颜色选择工具,因为这种模型更直观地描述了颜色的视觉特性。
HSV颜色模型和RGB颜色模型转换
HSV ——(H,S,V)——0360 0 ~1 0 ~1255 0 ~255 0 ~255
RGB ——(R,G,B)——0
HSV转RGB
归一化色调值
如果色调值H的范围是0 ~ 360,则将其归一化到0 ~ 1:
H ′ = H 360 H'=\frac{H}{360}H′=360H如果S = 0 S = 0S=0,则有R = G = B = V R=G=B=VR=G=B=V;否则进行接下来的步骤
计算参数
i = f l o o r ( H 60 ) f = H 60 − i p = V ( 1 − S ) q = V ( 1 − f S ) t = V ( 1 − ( 1 − f ) S ) i=floor(\frac{H}{60}) \qquad f = \frac{H}{60}-i \ p = V(1-S) \qquad q = V(1-fS) \qquad t = V(1-(1-f)S)i=floor(60H )f=60H −ip=V(1−S)q=V(1−fS)t=V(1−(1−f)S)进行判断
{ if i = 0 R = V , G = t , B = p if i = 1 R = q , G = V , B = p if i = 2 R = p , G = V , B = t if i = 3 R = p , G = q , B = V if i = 4 R = t , G = p , B = V if i = 5 R = V , G = p , B = q \begin{cases} \text{if} \quad i = 0 \qquad & R = V, \quad G = t, \quad B = p \ \text{if} \quad i = 1 \qquad & R = q, \quad G = V, \quad B = p \ \text{if} \quad i = 2 \qquad & R = p, \quad G = V, \quad B = t \ \text{if} \quad i = 3 \qquad & R = p, \quad G = q, \quad B = V \ \text{if} \quad i = 4 \qquad & R = t, \quad G = p, \quad B = V \ \text{if} \quad i = 5 \qquad & R = V, \quad G = p, \quad B = q \end{cases}⎩⎨⎧ ifi=0ifi=1ifi=2ifi=3ifi=4ifi=5 R=V,G=t,B=pR=q,G=V,B=pR=p,G=V,B=tR=p,G=q,B=VR=t,G=p,B=VR=V,G=p,B=q反归一化
R = R ∗ 255 G = G ∗ 255 B = B ∗ 255 R = R255 \ G = G255 \ B = B*255R=R∗255G=G∗255B=B∗255
RGB转HSV
归一化RGB值
将RGB值从0,255范围归一化到0,1范围:
R ′ = R 255 G ′ = G 255 B ′ = B 255 R^′=\frac{R}{255} \qquad G^′=\frac{G}{255} \qquad B^′=\frac{B}{255} R′=255R G′=255G B′=255B计算最大值和最小值
M A X = max ( R ′ , G ′ , B ′ ) M I N = min ( R ′ , G ′ , B ′ ) MAX=\max(R^′,G^′,B^′)\ MIN =\min(R^′,G^′,B^′)MAX=max(R′,G′,B′)MIN =min(R′,G′,B′)计算亮度(Value)
亮度(V)是最大值:
V = M A X V = MAX V=MAX计算饱和度(Saturation)
饱和度(S)表示颜色的纯度,计算公式为:
S = { 0 if M A X = 0 M A X − M I N M A X otherwise S=\begin{cases} 0\qquad\qquad\quad & \text{if} \quad MAX=0 \ \frac{MAX-MIN}{MAX} & \text{otherwise} \end{cases}S={0MAXMAX−MIN ifMAX=0otherwise计算色调(Hue)
色调(H)表示颜色的种类,计算公式为:
H = { u n d i f i n e d if M A X = M I N 6 0 ∘ × G ′ − B ′ M A X − M I N + 0 ∘ if M A X = R ′ 6 0 ∘ × B ′ − R ′ M A X − M I N + 12 0 ∘ if M A X = G ′ 6 0 ∘ × R ′ − G ′ M A X − M I N + 24 0 ∘ if M A X = B ′ H = \begin{cases} undifined \qquad \qquad \qquad\qquad;;;\ &\text{if} \quad MAX=MIN \ 60^\circ \times \frac{G'-B'}{MAX-MIN} ; + ; 0^\circ & \text{if}\quad MAX = R' \ 60^\circ \times \frac{B'-R'}{MAX-MIN} ; + ; 120^\circ & \text{if}\quad MAX = G' \ 60^\circ \times \frac{R'-G'}{MAX-MIN} ; + ; 240^\circ & \text{if}\quad MAX = B' \ \end{cases}H=⎩⎨⎧ undifined 60∘×MAX−MING′−B′ +0∘60∘×MAX−MINB′−R′ +120∘60∘×MAX−MINR′−G′ +240∘ ifMAX=MINifMAX=R′ifMAX=G′ifMAX=B′
如果计算结果为负值,则加上360°,使其范围在0,360之间。如果M A X = M I N MAX=MINMAX=MIN,说明RGB三色比例相同,会形成“黑 ~ 灰 ~ 白”颜色,在HSV中当S = 0 S = 0S=0时才能表示“黑 ~ 灰 ~ 白”,而H不行。
RGB到HSV的MATLAB代码
% 转换为HSV图像
hsvImage = rgb2hsv(rgbImage);
% 转换为RGB图像
rgbImage = hsv2rgb(hsvImage);
参考:HSV-RGB转换
HSL(Hue-Saturation-Lightness)颜色模型
HSL 是另一种基于人类视觉的颜色模型,与 HSV 类似,但在某些方面有所不同
原理:
- 色相(Hue):与 HSV 中的色相相同,用角度表示(0°到360°)。
- 饱和度(Saturation):表示颜色的鲜艳程度,范围从 0 到 1。
- 明度(Lightness):表示颜色的明亮程度,范围从 0 到 1。与 HSV 的明度不同,HSL 的明度更接近于颜色的中间值(灰色)。
表示方法:颜色用三个分量表示,例如 (H, S, L)
应用:常用于图形设计和网页设计,因为 HSL 模型在调整颜色时更符合人类的视觉感知。
灰度(Grayscale)模型
灰度模型是一种特殊的颜色模型,只表示颜色的明暗程度
原理:通过一个单一的数值表示颜色的亮度,范围通常是 0 到 255(8位),其中 0 表示黑色,255 表示白色。
表示方法:颜色用一个分量表示,例如 (Gray)。例如,(0) 表示黑色,(255) 表示白色,(128) 表示中性灰色。
应用:用于黑白图像、文档扫描、医学成像等领域。
LAB(CIE Lab*)颜色模型
LAB 是一种基于人类视觉感知的色彩模型,用于精确描述颜色
原理:
- L:表示亮度,范围从 0(黑色)到 100(白色)
- a 和 b:表示颜色的两个轴,分别表示从绿色到红色(a轴)和从蓝色到黄色(b轴)
表示方法:颜色用三个分量表示,例如 (L, a, b)
应用:用于颜色管理、图像编辑和颜色校准,因为它能够更准确地描述颜色的视觉差异
优点:与人类视觉感知一致,能够更准确地表示颜色的差异。
缺点:计算复杂,与 RGB 和 CMYK 模型的转换较为困难。
HEX(Hexadecimal Color Space) 颜色模型
HEX 是一种基于 RGB 模型的编码方式,能与 RGB 模型直接对应,主要用于网页设计
原理:将 RGB 模型中的每个分量用十六进制表示,范围从 00 到 FF。
表示方法:颜色用一个六位的十六进制数表示,例如#RRGGBB。例如,#FF0000 表示纯红色,#000000 表示黑色,#FFFFFF 表示白色。
#RRGGBB = (RR, GG, BB)
应用:主要用于 HTML 和 CSS 中的颜色表示。