什么是Hue?

目录

1、HSV

[1.1 RGB转HSV](#1.1 RGB转HSV)

[1.2 HSV转RGB](#1.2 HSV转RGB)

2、HSL

[2.1 RGB转HSL](#2.1 RGB转HSL)

[2.2 HSL转RGB](#2.2 HSL转RGB)


Hue 与明度、饱和度并列,是色彩科学中定义颜色三大属性。Hue用于描述红、黄、绿、蓝、紫等颜色特性。 在HSL/HSV色彩空间中以角度(0°--360°)表示,H代表色相(Hue),以红色为0°(360°)沿色环顺时针划分角度,对应黄色60°、绿色120°、青色180°、蓝色240°、品红色300°等具体颜色。

|----------|--------------|--------|----------|
| 颜色名称 | 红绿蓝含量 | 角度 | 代表物体 |
| 红色 | R255,G0,B0 | 0° | 血液、草莓 |
| 橙色 | R255,G128,B0 | 30° | 火、橙子 |
| 黄色 | R255,G255,B0 | 60° | 香蕉、芒果 |
| 黄绿 | R128,G255,B0 | 90° | 柠檬 |
| 绿色 | R0,G255,B0 | 120° | 草、树叶 |
| 青绿 | R0,G255,B128 | 150° | 军装 |
| 青色 | R0,G255,B255 | 180° | 水面、天空 |
| 靛蓝 | R0,G128,B255 | 210° | 水面、天空 |
| 蓝色 | R0,G0,B255 | 240° | 海、墨水 |
| 紫色 | R128,G0,B255 | 270° | 葡萄、茄子 |
| 品红 | R255,G0,B255 | 300° | 火、桃子 |
| 紫红 | R255,G0,B128 | 330° | 墨水 |

1、HSV

HSV(Hue, Saturation, Value)模型对应于圆柱坐标系中的一个圆锥形子集 ,圆锥的顶面对应于V=1。它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于角度0° ,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180°。饱和度S取值从0到1,所以圆锥顶面的半径为1。

HSV的每一种颜色都是由色相(Hue,简H),饱和度(Saturation,简S)和色明度(Value,简V)所表示的。这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。

  • 色调H:表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,取值范围为0°~360°。若从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;
  • 饱和度S:取值范围为0.0~1.0
  • 亮度V:取值范围为0.0(黑色)~1.0(白色)

1.1 RGB转HSV

RGB 转 HSV 是计算机图形学中的基础颜色空间转换,‌核心是通过数学公式将红绿蓝三通道映射为色相、饱和度、明度‌。

**‌step1:**归一化 ,将 R、G、B 从 0-255 范围除以 255,映射到 0-1 区间;

**step2:**计算最大值与最小值‌

max=max(R,G,B)

min=min(R,G,B)

Δ=max−min‌‌

step3: 计算明度V

V=max‌‌

**step4:**计算饱和度 S‌

若 max = 0 ,则 S=0, 否则 S=Δ/max‌‌

**step5:**计算色相 H‌

若 Δ = 0 ,则H=0;

若 R=V, H=60×((G−B)/Δ);

若 G=V, H=60×((B−R)/Δ)+120;

若 B=V, H=60×((R−G)/Δ)+240‌‌;

如果 H<0,H+360;若H>360,H=H mod 360;

保证结果 0<=V<=1,0<=S<=1,0<=H<=360。

1.2 HSV转RGB

给定在HSV中 (h,s,v)值定义的一个颜色,带有如上的变化于0到360之间的h,和分别表示饱和度和明度的变化于0到1之间的s和v,在RGB空间中对应的 (r,g,b)三原色可以计算为(R,G,B变化于0到1之间):

HSV转RGB的核心公式基于色调(H)所在的六分之一色相区间,通过插值计算RGB分量‌。

**step1:**特殊情况处理:S = 0‌

当饱和度为0时,颜色为灰色,RGB三通道相等:R=G=B=V

**step2:**一般情况(S > 0)

将色相 H 归一化到六边形区间:

计算辅助变量p,q,t:

**step3:**根据 i 的值确定RGB分量:

**step3:**最终得到的R,G,B 值范围为 0 ~ 1,如需映射到 0~255,可乘以255并取整。

复制代码
def hsv_to_rgb(h, s, v):
    """
    将HSV颜色空间转换为RGB颜色空间
    参数:
        h: 色调 (0-360)
        s: 饱和度 (0-1)
        v: 明度 (0-1)
    返回:
        (r, g, b) RGB值 (0-1)
    """
    if s == 0:
        # 灰色情况
        return (v, v, v)
    
    # 将色调归一化到 [0, 1)
    h = h / 60.0
    i = int(h) % 6
    f = h - i
    
    # 计算分量
    p = v * (1 - s)
    q = v * (1 - s * f)
    t = v * (1 - s * (1 - f))
    
    # 根据色调区间选择对应的RGB分量
    if i == 0:
        r, g, b = v, t, p
    elif i == 1:
        r, g, b = q, v, p
    elif i == 2:
        r, g, b = p, v, t
    elif i == 3:
        r, g, b = p, q, v
    elif i == 4:
        r, g, b = t, p, v
    else:  # i == 5
        r, g, b = v, p, q
    
    return (r, g, b)

2、HSL

HSL(Hue色相, Saturation饱和度, Lightness亮度)是一种基于RGB色彩模型的圆柱坐标系颜色表示系统。其核心参数包括色相(0-360度对应不同颜色)、饱和度(0%-100%)和明度(0%-100%)。通过色相环角度、中心轴距离和垂直位置分别对应三个维度。

HSL和HSV这两种表示在目的上类似,但在方法上有区别。二者在数学上都是圆柱,但HSV(色相、饱和度、明度)在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心) ,HSL在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。HSL和HSV中"色相"指称相同的性质但它们的"饱和度"的定义是不同的 。 因为HSL和HSV是设备依赖的RGB的简单变换,(h,s,l)或 (h,s,v)三元组定义的颜色依赖于所使用的特定RGB"加法原色"。每个独特的RGB设备都伴随着一个独特的HSL和HSV空间。但是 (h,s,l)或 (h,s,v)三元组在被约束于特定RGB空间比如sRGB的时候就更明确了。

RGB 值范围通常为 ‌0--255‌,HSL 输出为: ‌

  • H(色相)‌:0°--360°(角度) ‌
  • S(饱和度)‌:0%--100%
  • ‌L(亮度/明度)‌:0%--100%

2.1 RGB转HSL

**step1:**归一化 RGB‌:将 R、G、B 除以 255,映射到 [0, 1] 区间。

**step2:**计算最大值与最小值‌

max=max(R,G,B)

min=min(R,G,B)

Δ=max−min‌‌

**step3:**计算亮度 L‌

L = (max + min)/2

**step4:**计算饱和度 S

若 Δ == 0(灰度),则 S = 0

否则:

若 L < 0.5,S = Δ /(max + min)

若 L ≥ 0.5,S = Δ / (2 - max - min)

**step5:**计算色相 H

若 Δ = 0 ,则H=0

若 R=V:

若G>=B,则H=60×((G−B)/Δ)

若G<B,则H=60×((G−B)/Δ)+360

若 G=V, H=60×((B−R)/Δ)+120

若 B=V, H=60×((R−G)/Δ)+240‌‌

H 的值通常规范化到位于0到360°之间。而 H= 0用于max=min的(定义为灰色)时候而不是留下H未定义。HSL和HSV有同样的色相定义,但是其他分量不同。

2.2 HSL转RGB

**step1:**归一化输入‌

若 S、L 为百分比,先转换为 0~1 区间(如 60%->0.6)

**step2:**若 S = 0,则 R = G = B = L

step3: 若 S≠ 0,计算临时变量q和p,

若 L < 0.5:

q = L × (1 + S)

否则:

q = L + S − (L × S)

p = 2 × L − q

**step4:**计算每个通道的偏移 H 值

**step5:**使用偏移 H 值,计算每个通道的颜色值,Color= (ColorR,ColorG,ColorB)

相关推荐
冒险家KL10 天前
STM32 ISP自动下载探索及官方STM32CubeProgrammer实现自动下载
stm32·嵌入式硬件·isp
AomanHao1 个月前
【阅读笔记】沙尘图像线性颜色校正A fusion-based enhancing approach for single sandstorm image
图像处理·笔记·isp·图像增强·沙尘图像·色偏·颜色校正
芯门1 个月前
FPGA商用级ISP(二):镜头阴影校正(LSC)的网格增益插值与并行硬件架构实现
图像处理·fpga开发·isp
芯门1 个月前
FPGA商用级ISP:动态坏点校正(DPCC)的滑窗架构与并行判决实现
图像处理·fpga开发·isp
CheungChunChiu2 个月前
模拟 GStreamer 获取帧率能力:CIF 与 ISP 的差异
linux·网络·接口隔离原则·isp·cif·gst
AndrewHZ2 个月前
【图像处理与ISP技术】图像格式与存储原理
图像处理·算法·isp·图像压缩·图像格式·图像存储·图像信号处理
aaaaalaode2 个月前
RKISP camera调试
isp
AomanHao2 个月前
【阅读笔记】Bayer阵列坏点校正-《Adaptive pixel defect correction》
图像处理·笔记·isp·坏点补偿
木 东3 个月前
《ISP调试实战课程》
图像处理·camera·isp