彩色图像的四种模型:RGB、HSL、HSV、HSI。(YUV)
RGB:Red(红)、Green(绿)、Blue(蓝)
HSL:Hue(色调)、Saturation(饱和度 )、Luminance(亮度 )
HSV:Hue(色调)、Saturation(饱和度 )、Value(亮度 )
HSI:Hue(色调)、Saturation(饱和度 )、Intensity(亮度 )
资料来源:百度百科(RGB\HSL\HSV\HSI)
HSL 与 RGB 转换
a) RGB→HSL 的算法描述。
步骤 1:把 RGB 值转成【0,1】中数值。
步骤 2:找出 R,G 和 B 中的最大值。
步骤 3:设 L=(maxcolor + mincolor)/2
步骤 4:如果最大和最小的颜色值相同,即表示灰色,那么 S 定义为 0,而 H 未定义并在程序中通常写成 0。
步骤 5:否则,测试 L:
If L<0.5, S=(maxcolor-mincolor)/(maxcolor + mincolor)
If L>=0.5, S=(maxcolor-mincolor)/(2.0-maxcolor-mincolor)
步骤 6: If R=maxcolor, H=(G-B)/(maxcolor-mincolor)
If G=maxcolor, H=2.0+(B-R)/(maxcolor-mincolor)
If B=maxcolor, H=4.0+(R-G)/(maxcolor-mincolor)
步骤 7:从第 6 步的计算看,H 分成 0 ~ 6 区域。RGB 颜色空间是一个立方体而 HSL 颜色空间是两个六角形锥体,其中的 L 是 RGB 立方体的主对角线。因此,RGB 立方体的顶点:红、黄、绿、青、蓝和品红就成为 HSL 六角形的顶点,而数值 0 ~ 6 就告诉我们 H 在哪个部分。H=H*60.0,如果 H 为负值,则加 360。
b) HSL→RGB 的算法描述。
步骤 1:If S=0,表示灰色,定义 R,G 和 B 都为 L.
步骤 2:否则,测试 L:
If L<0.5,temp2=L*(1.0+S)
If L>=0.5,temp2=L+S-L*S
步骤 3:temp1=2.0*-temp2
步骤 4:把 H 转换到 0 ~ 1。
步骤 5:对于 R,G,B,计算另外的临时值 temp3。方法如下:
for R, temp3=H+1.0/3.0
for G, temp3=H
for B, temp3=H-1.0/3.0
if temp3<0, temp3=temp3+1.0
if temp3>1, temp3=temp3-1.0
步骤 6:对于 R,G,B 做如下测试:
If 6.0*temp3<1,color=temp1+(temp2-temp1)6.0\temp3
Else if 2.0*temp3<1,color=temp2
Else if 3.0*temp3<2,
color=temp1+(temp2-temp1)*((2.0/3.0)-temp3)*6.0
Else color=temp1
HSV 与 RGB 转换
- RGB 转化到 HSV 的算法
1 |
|
- HSV 转化到 RGB 的算法
1 | if s = 0 |
HSI 与 RGB 转换
1、 球体变换公式:
令 M=max(R,G,B) m=min(R,G,B),其中 r g b 至少有一个为 0 或 1,则有:
(1)明度
I=(M+m)/2
(2)饱和度
当 M=m 时,S=0
当 M≠m 时,I≤0.5,则 S=(M-m)/(M+m)
当 M≠m 时,I>0.5,则 S=(M-m)/(2-M-m)
(3)色度
当 S=0 时,H=0;
当 S≠0,R=M,则 H=60(2+b-g),这时色度位于黄和品红之间;
当 S≠0,G=M,则 H=60(4+r-b),这时色度位于青和黄色之间;
当 S≠0,B=M,则 H=60(6+g-r),这时色度位于品红和青之间;
2、三角变换公式:
(1)明度
I=(R+G+B)/3
(2)色度
S=1-min{R+B+G}/I
(3)色度