是否可以从 RGB 表示中获得颜色的光频率?我找到了相反的过程[1],但我不知道这是否可能。
4 回答
AFAIK,没有直接的答案,因为多个波长可以组合产生相同的颜色,对吗?因此,您拥有映射到纯色的波长,然后它们的组合可以产生许多其他相同的颜色。并且有几种组合可以提供相同的颜色。这是因为干扰。所以你本质上是在要求一个一对多的映射。
回答你的问题:没有固定的公式。反向公式将为您提供一个范围。这是它所能得到的最好的。
也许Javascript - Sort rgb values可以帮助你。
但问题是波长光谱看起来像
您可以将 RGB 转换为 HSL,但 HSL 光谱看起来像
然后,由于波长光谱不具有所有颜色,例如粉红色,因此存在问题。
我想那是因为自然界中不存在粉红色,它是光谱中相反极端颜色的组合。但我们有它在 RGB 中。
- 从 RGB 转换为 XYZ
- 从 XYZ 转换为 Yxy
- 计算 xy 的主波长
- 计算频率
查看链接引用的 C 程序,只有 81 个不同频率的 color_match 值 - 这些似乎是链接中图 3 边缘周围的标记频率。因此,如果您知道您的 RGB 信息是针对一种频率的纯光,您可以计算出这些值中的每一个的 RGB 信息,并查看它最匹配的值 - 可能在缩放一个或另一个以使亮度匹配之后。
当然,问题在于您的 RGB 值可能来自不同频率的光的混合。在这种情况下,您将得到一个来自图 3 内部的点 - 它不会接近外部的任何值(因此至少您将能够判断存在问题)并且会有是可能产生它的大量可能的频率集 - 这些对应于图表外部点的加权平均值,这些点平均产生内部点。