如何判断颜色是虚构的/不可能的?

时间:2018-08-02 20:22:06

标签: colors color-theory

短版

如何确定颜色(例如XYZ)是否为不可能Wikipedia: Imposible color

例如,这种颜色是不可能的:

  • XYZ:(15.96,84.04,0)
  • xyY :( 0.1595、0.8404、0.8404)
  • 实验室 :( 93,-196、161)(D65白点)

这是不可能的,因为它位于色度图之外:

enter image description here

我怎么知道

代码错误

目标是让某人填写该功能:

Boolean IsImaginaryColor(Single X, Single Y, Single Z)
{
   //...TODO: Get someone to answer the question.
}

现在我们知道,如果对应的LMS颜色的任何分量为负,则该颜色为虚数。

这是使颜色真实的必要但不充分的条件。您可以让LMS的所有三个分量都为正,但仍然是虚构的颜色。

Boolean IsImaginaryColor(Single X, Single Y, Single Z)
{
   //If any component of LMS color is negative, 
   //then the color is definitely imaginary.
   LMSColor lms = XYZtoLMS(X, Y, Z);
   if ((lms.L < 0) or (lms.M < 0) or (lms.S < 0))
      return true;

   //The color may still be imaginary, 
   //but i don't know how to solve that problem
   //So as a first approximation i'll say it's real
   return false; 
}

LMSColor XYZtoLMS(Single X, Single Y, Single Z)
{
   //perform Matrix multiplication:
   //
   // LMS = M * XYZ
   //
   // Where M is the M_CAT02 transformation matrix from CIECAM02
   //
   //    0.7328, 0.4296, -0.1624
   //   -0.7036, 1.6975,  0.0061
   //    0.0030, 0.0136,  0.9834

   LMSColor result;

   result.L =  0.7328*X + 0.4296*Y + -0.1624*Z
   result.M = -0.7036*X + 1.6975*Y +  0.0061*Z
   result.S =  0.0030*X + 0.0136*Y +  0.9834*Z
}

xy颜色平面中,这给出了不可能的颜色的良好的第一近似值(以及很好的视觉指示):

enter image description here

但是计算仍然给出了色度图之外的颜色*(从技术上讲,它们不在“光谱轨迹”之内)。因此很显然,仅检查LMS中的不利成分是不完整的。

长版

我正在渲染颜色选择器。例如:

  • 选择一种实验室颜色
  • 您选择一种 ab 颜色
  • 对于给定的 L 飞机

这类似于您在Photoshop中已经可以执行的操作:

enter image description here

所以在这种情况下,我选择了颜色:

  • 实验室 :( 72,-58、119)

该颜色(假设D65白点)对应于 XYZ 颜色:

  • 实验室 :( 72,-58、119)
  • XYZ:(25.22,43.66,0.36)

您可以判断真实色彩是否在sRGB色域之外,如果其成分之一是:

  • 小于0
  • 大于255

XYZ 颜色位于sRGB色彩空间之外,因为其中一个成分是负数:

  • XYZ:(25.22,43.66,0.36)
  • 实验室:(72,-58,119)(D65)
  • RGB:(106.1、199.6,-234.7(sRGB)

Photoshop已经知道某种颜色是否在sRGB色域之外,并将显示 gumut 警告:

enter image description here

但我想再走一步

我已经知道一种颜色是否在sRGB色域之外。

但是现在我想知道一种颜色是否是虚构的,因此我可以继续显示色域,但隐藏完全不可能的颜色。概念模型可能是:

enter image description here

警告::我不知道哪些颜色实际上不可能。这只是概念的想法。

所以我需要知道的是颜色是否不可能

背景理论-什么是不可能的颜色的例子?

不可能的颜色上的Wikipedia页面指出,尽管sRGB颜色空间的原色都位于光谱轨迹内-所有的真实色也都位于光谱位点内:

enter image description here

ProPhotoRGB颜色空间确实使用了一些不可能的基色:

enter image description here

  

ProPhoto RGB color space使用虚拟的绿色和蓝色基色来获得比三个真实基色更大的色域(三角形内的空间)。但是,某些真实颜色仍然无法再现。

因此,现在我有一个具体示例说明不可能的颜色:ProPhoto RGB颜色空间的绿色主基色:

| Color | CIE x  | CIE y  |
|-------|--------|--------|
| red   | 0.7347 | 0.2653 |
| green | 0.1596 | 0.8404 | <--- this one
| blue  | 0.0366 | 0.0001 |
| white | 0.3457 | 0.3585 |

enter image description here

在给定不同颜色空间的情况下,这种不可能的颜色是:

  • xyY:(0.1596,0.8404,0.8404)
  • XYZ:(15.96,84.04,0)
  • LMS:(47.80、131.43、1.19)
  • 实验室:(93.4679,-195.9973、161.1515)
  • LCHab:(93.4679,253.7415,140.5725)

我怎么能分辨出这种颜色呢?

给出XYZ颜色,我怎么能说那是不可能的?例如:

  • XYZ: 15.9684.040

奖励聊天

请务必注意两者之间的区别

  • 为现有色域之外的颜色着色
  • 和虚构的颜色

一个快速的单图底漆将是:

enter image description here

  • 色域:一种颜色可能无法在显示器,打印机或电话上显示,但是仍然是真实颜色-您可以将各种波长和强度的电磁波组合在一起产生颜色
  • 虚构:在 L ong, M 中,任何强度,任何波长的EM波的组合都不会产生这种响应。 edium和 S 人类的圆锥体

我已经知道如何判断特定 色域 之外是否存在某种颜色。

我想知道光谱位点之外是否还存在一种颜色。

换句话说:我想知道它是否是虚构的。

Bruce Lindbloom上有一个漂亮的图形,当您随意选择将ab的分量值限制为+-128时,会引发Lab颜色空间之外的颜色问题:< / p>

enter image description here

奖金阅读

1 个答案:

答案 0 :(得分:1)

这是我在此处给出的答案的重复:Determine that a Luv Color is non-imaginaryhttps://stackoverflow.com/a/48396021/931625相关

我认为安全的方法是计算XYZ体积边界,并检查您在内部还是外部。