从HSV中提取色度/相对色度

时间:2014-04-10 08:47:40

标签: c# javascript php colors

我试图弄清楚如何从HSV(替代RGB)中获得色度。问题是;我几乎不知道色度是多少。根据网上提供的小信息,通常指的是相对色度"这是色调和饱和度的组合。

来自http://www.huevaluechroma.com/012.php

  

相对于假定最大值的色度概念的另一个术语   是来自瑞典NCS系统的色度

我有一个RGB,我已经用PHP转换为HSV。我希望有人可以提供他们在这个问题上的专业知识,因为似乎记录的信息非常有限。我需要它来验证NCS代码。

到目前为止的色度计算:

   //$hsv is array(h, s, v), maximum considered to be 10000        
   $chroma = $hsv[1] * $hsv[2];
   $chromaticness = $chroma / 10000;

例如,颜色S 2065-B(#0073B0)使用上面的计算给出了69%的色度,当它应该是65%时。此外,颜色S 0580-Y(#FECB00)给我99%时它应该是80%?

我得到的这些例子中的HSV是:

#0073B0 {' H' => 200.79545454545,' S' => 100,' V' => 69.019607843137}

#FECB00 {' H' => 47.952755905512,' S' => 100,' V' => 99.607843137255}

这个解决方案在任何编程语言中都是受欢迎的,但是我在PHP编码所以它可能会被转换为。

2 个答案:

答案 0 :(得分:4)

色度是Munsell系统的第三个属性,超越了色调和亮度/亮度。

色度通常定义有问题的色调的色彩: 即,颜色的属性,表示颜色与相同亮度的灰色的偏离程度。来自Rolf G. Kuehni的色彩空间及其划分(可在谷歌书籍中找到)

  

色度和饱和度对于具有相同色调和亮度的两种颜色是相同的。无论亮度或亮度如何,饱和度都保持不变。另一方面,色度随着亮度的增加而增加。

Chroma 的编码公式为here

直到你考虑色域色度仍然是开放式数量 - 范围从0到无穷大。

NCS 色度是指定为百分比的色度 - 其中100%对应于某个有限上限see ISSN-03912051。您需要选择有限值才能在计算系统中获得良好的工作动态范围。

信任有帮助。

答案 1 :(得分:1)

我认为您遇到的问题与以下事实有关:NCS系统中的四种基色并非在HSV系统中都具有100%的值。

例如,NCS系统中的完全饱和且完全亮橙色将是NCS黄色和NCS红色之间的HSV弧的一半。 NCS黄色的HSV值为100%,但NCS红色的HSV值仅为77%,因此该橙色值的值约为88.5%。尽管如此,即使从HSV计算得到的色度为88.5%,NCS色度仍然是100%。 (还有一个问题是NCS红在HSV系统中只有99%饱和,但我忽略了这一点。)

NCS基色的HSV值如下:

white 100%
black 0%
green 63%
red 77%
yellow 100%
blue 74%

来源:https://en.wikipedia.org/wiki/Natural_Color_System

我认为您需要做的是,在您计算出NCS GY / GB / RY / RB" hue"之后,根据以下分数计算该NCS色调的最大HSV值。两个相关的NCS基色,然后将NCS色度计算为该最大HSV值的一部分(即,如果我们处理0和1之间的数字,则除以该最大值)。因此,我们给出饱和的Y50R橙色,HSV值为22.125%,色度为25%,因为22.525%是Y50R橙色的最大值88.5%的25%。

请注意,这意味着您必须处理超出NCS颜色最大值的RGB / HSV颜色。在这些情况下,我可能只是将HSV值缩放回具有相同色调的NCS颜色的最大值。