HSI 颜色空间到 RGB 的双锥模型

问题描述 投票:0回答:1

我遇到过一种将颜色从 RGB 转换为 HSI 的三角函数实现。特别是,从 RGB 转换为“HSI 颜色空间,由双锥体给出”,我认为这是 HSLbi-hexcone 模型的另一个名称。

作者描述了 RGB-->HSI 的“他们首选的变换选择”的方程,我在 Python 中实现了如下所示。没有给出任何逆向变换,HSI-->RGB。

def rgb_to_hsi(r, g, b): # r, g, b in [0..1] x = min(r, g, b) y = max(r, g, b) I = (x + y) / 2.0 S = y - x c1 = r - (g + b) / 2.0 c2 = (np.sqrt(3) * (b - g)) / 2.0 H = np.arctan2(c2, c1) H = np.mod(-H, 2 * pi) # re-range to [0..2PI], rotating from red at 0 to green at 2/3PI, etc. return [H, S, I] # H in [0..2PI], S in [0..1], I in [0..1]
算法和我的实现似乎都是正确的,并且提供了与该图一致的结果(即红色(

rgb(1,0,0))给出[0.0, 1, 0.5]

):

enter image description here

但是我无法找到或导出这种转换的有效逆过程 -

hsi_to_rgb()

 方法。

我尝试了一些实现,但它们倾向于将

hsi(0.0, 1, 0.5)

 映射到 
rgb(0.5, 0, 0)
(半亮度红色,而不是全亮度)。

我怀疑这是因为大多数 HSL 实现都使用 HSL 的

圆柱形模型,而不是双锥模型 - 这是真的吗?

无论哪种方式,从 HSL 双锥模型转换为 RGB 的工作(理想情况下是三角)算法是什么?

algorithm colors rgb color-space hsl
1个回答
0
投票
给你:

def hsi_to_rgb(H, S, I): c2 = math.sin(-H) c1 = math.cos(-H) # (r,g,b) = A*c1*(1, -.5, -.5) + A*c2*(0, -1, 1) + B*(1,1,1) r = c1 g = c1*-0.5 - c2 b = c1*-0.5 + c2 # multiply to match S fac = S/(max(r,g,b)-min(r,g,b)) r *= fac g *= fac b *= fac # add white to match I x = I - (S / 2.0) w = x - min(r,g,b) r += w g += w b += w return [r, g, b]
    
© www.soinside.com 2019 - 2024. All rights reserved.