像素的颜色频率

计算科学 算法
2021-12-08 17:10:22

是否可以计算像素的颜色频率?

我的意思是,我得到一个红色的像素,但是这个红色在赫兹光谱中的位置?

这甚至可能以有限的方式做到吗?

谢谢。

3个回答

是的,但答案比您可能希望的要复杂一些。

简而言之:一种颜色通常对应于不同频率或波长的分布。

你的眼睛里有三种视锥细胞[+一种视杆细胞]。色盲人的类型少于三种(或者他们的反应曲线更接近)。据信可能存在少数人,“四色人”,他们有四种类型。一些章鱼种类可以看到 11 个维度的颜色。

光谱灵敏度曲线

每种类型的视锥细胞都对某些波长敏感。如果您有两个激光器,您可以从激光器的频率到每个光谱响应曲线绘制一条垂直线,并将每个锥体类型的值相加以获得每种类型的总“刺激”。很明显,您可以拥有大量频率对组合,在 S、M 和 L 型细胞中的每一个中产生相同的刺激!这就是为什么计算机显示器可以使用红色和绿色子像素生成黄色的原因。这种相同的黄色可能出现在具有相同总刺激的一种波长的光子上。

所以颜色的现象并不像将每个颜色匹配到一个波长那么简单。事实上,人类可以看到的颜色与单一波长不对应!没有激光可以产生粉红色和紫色。

下面是色度图。我不会详细介绍它是如何构造的,但它大致对应于你能看到的所有颜色类型。您还可以改变图表的亮度(大致对应于 illy 定义的术语“亮度”)。

CIE 1931 色度图

无论如何,这个图表有一些有趣的属性。

  • 虽然它代表了您可以看到的所有颜色,但所有这些颜色实际上并未显示在您的屏幕上。这是因为对于多个光源,您只能再现在通过连接每个光源的相应色度形成的多边形的顶点内的颜色。大多数显示器使用三种原色(大约红色、绿色和蓝色),因此这些显示器只能再现三角形内的颜色。请注意,三角形的面积并不对应任何特别有意义的东西。该图并非旨在在可区分颜色之间提供相等的空间。
  • 真正重现人类可以看到的所有颜色的唯一方法是使用两个可调谐激光器。这可以通过使用棱镜分离来自黑体辐射源(例如太阳)的光,使光通过窄频滤光片,并将其与来自另一个不同波长的棱镜的光混合来实现。
  • 图的边缘(平滑曲线)对应于光的波长。

现在,有了这个背景,我可以更直接地回答你的问题。由于监视器每个像素使用三个光源,因此每个子像素的光的性质必须通过其自身的光谱功率分布来表征。对于大多数目的,这可以近似为单个波长。然后,您必须确定加权每个子像素的三个系数,使得它们的值之和乘以刺激响应曲线上的相应强度等于产生您想知道的任何颜色的相同。大多数原色数据都可以在线免费获得,但我会将数学问题留给其他人。

典型计算机显示器上的每个像素实际上由 3 个具有单个固定频率的子像素组成。显示器的控制电路调整这三个子像素的亮度,以便将光线输入您的眼睛,您的大脑将其解释为位于可见光谱的某个位置。

几乎相同问题的答案都可以在这里找到

只取维基百科关于颜色的文章中给出的频率范围并将它们与它们所施加的背景颜色的十六进制代码配对呢?这将是一个阶梯函数,但您始终可以将其设为分段线性,或者使用贝塞尔曲线或某种基函数展开来近似它。

此外,这肯定很难在显示器上均匀显示。也许更了解色域的人可以准确地解释我们意思FF0000Nick 给出的不同视锥细胞响应图中的峰值在 S 为 420-440 nm,M 为 530-540 nmf,L 为 560-580 nm(三刺激值),我认为 sRGB 然后以某种方式链接到红色、绿色和蓝色值通过一些幻数的 3x3 矩阵。

您也许可以使用这些峰值中心位置来得出与维基百科颜色频率列表中的不同的第一个近似值。然后对这两种方法做一个加权平均!这是真正的科学。

编辑:好的,看起来我忽略了真正的问题——我们需要将我们从 RGB 带到频率空间!显然,采用三个初选的线性组合不会削减它。f:R3R1

另一个问题是自然光不仅仅是一个单一的频率——它是一个光谱(你可以把它比作概率分布)。所以,我对早期的功能描述撒了谎。自然光并不是真正的 - 它实际上更像,用于 300 nm 范围的 5 nm 离散化。通过将这个离散的自然光光谱与三个 CIE 颜色匹配光谱参见等式 1)(即,取内积)进行卷积,将其转换为P(λ)R1R60XYZQi(λ)

然后,您可以将转换为 ,方法是通过它们的总和(等式 2)对其进行归一化,然后使用这些 sRGB 幻数(等式 3)将它们转换为 RGB。需要更多带有白点的恶作剧来表示(近似?)色域外的颜色。XYZxyz

这对于将已知光谱转换为特定的 RGB 三元组非常有用,但我不确定如何采用另一种方式。我猜你想创建一个正态分布,这样我刚才描述的过程就可以得到你想要的 RGB 三元组,你会通过某种优化问题那么“单一频率”将是这种分布的平均值吗?这很快就会变得非常昂贵。P(λ)P(λ)