前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >光和颜色

光和颜色

作者头像
Peter Lu
发布2019-05-31 17:35:35
1.5K0
发布2019-05-31 17:35:35
举报
文章被收录于专栏:LET

从光到颜色

光波的本质就是电磁波(electromagnetic),由波长(wavelength)和强度(intensity)两部分构成。其中,intensity用来度量电流强度,而不同的波长呈现不同的颜色。我们也可以用频率(frequency)来描述波长,因为wavelength*frequency=光速。

而光则是由一系列强度各不相同的光波的组合,如下图,依次为白炽灯,白日光,汞灯,低高压钠灯以及那个什么金属灯所对应的波长和强度的映射关系。这样,我们就有了一个强度和光波之间的函数,我们记作f(v)

当然,多数情况下,我们所看到的颜色并不是光本身的颜色,而是光打在物体上的效果,这就是我们常见的光的反射和折射,而物体对应不同的材质,会吸收不同的光波,而吸收不了的就反射,因此,不同的材质会有一个不同的反射函数,我们记作g(v),而最终的结果就是两者之间的相互作用(乘法),示意如下:

至此,我们就可以理解光和颜色之间的关系:在可见光的范围内,不同的波长和强度的映射函数对应一种颜色。

感光器

在了解了光和颜色的关系后,我们先关心一下我们的眼睛是如何看到光和颜色的。这要归功于两类Cell:Cone & Rod. 前者可以在光线充足的情况下感受到R,G,B三种光谱,分别对应可见光范围内的长波(Large),中波(Medium)和短波(Short),后者在光线较弱的环境下感知强度,这也是夜晚我们能分别明暗但无法辨识颜色的原因。

这里要强调一下,理论上,准确的颜色对应是frequency-intensity函数的积分,但我们的眼睛只能感受到SML三种波段,假如把这三个分量作为3D空间的三个轴,我们就可以建立一个SML-Color的映射关系。第二,基于这个映射关系,存在一种可能,不同的SML分量,可能会产生相同的Color,这就产生了很多可能,材质上微妙的不同,则会产生特别的颜色,但也可能用其他的材质模拟这个颜色,也就是真钞和假钞。当然,还有一种无法分辨颜色的可能,如下图,是色盲示意图:

正是因为人眼的这种构造,我们制作的感光器,在原理上和眼睛并无区别,如下是CCD感光器的示意图:

这里有一个有意思的细节,感光器中更侧重于对绿色的识别,难道设计感光器的工程师是男性,所以针对这个颜色重点识别?这里,就有一个灰度的概念,当一个RGB转为灰度图时,绿色部分占了一半以上的比重(58.7%),而眼球中有六百万个ConeCell,1亿个Rod Cell,换句话说,人眼对光的Intensity,也就是亮度更敏感,而绿色最能表示其变化。

另外一个有意思的颜色是蓝色,最近在任正非的报道里,老人家说了一句“尼斯的海是蓝的,天是蓝的,数学家的公式为什么也是蓝的?”这里也有一个小段子,有人统计过中外古文中提到的颜色次数,发现,几乎在古文中没有提到过蓝色。基于这个统计,科学家甚至大胆的预测早期的人类是无法识别蓝色的。当然这个预测是无法证实的,但也说明一点,人眼对蓝色的噪音不敏感,不知道跟蓝色的波长最短有无关系。

当我们拍照时,无法避免噪音的产生,而如果噪音偏蓝,我们会视而不见,可见,跟任总说这个的工程师是一位图像学方面的专家。如上图对比,在光线追踪中,当我们采用blue noise和white noise采样时,不需额外操作,图像质量会有明显提升。

Color Model

当我们能够捕捉光线后,自然,我们会想到如何呈现它,这就涉及到一个模型的概念。基于感光器的原理,首先就会想到最熟悉的RGB模型。

于是,人们自然想要建立一个映射表,用三原色来模拟所有可见光的颜色,有了如下的实验,可见光中挑选一个颜色,调整三原色的值,模拟出相同的颜色:

基于该实验,我们得到了如下的映射关系,按照如下的配方,我们就可以渲染出所有的可见光。

当你心满意足的时候,是否发现一个问题,怎么红色的有负值呢?原来实验发现,不是所有的可见光都可以通过RGB合成的,于是,科学家找到了如下的解决方案来解决,这也是负值的问题:

毕竟负数在现实中并不实用,于是,人们又找到三个分量XYZ,并建立一个XYZ-RGB的映射关系(矩阵),但XYZ都大于零,于是便有了CIE-XYZ的颜色模型:

上图蓝色数字是对应的某一个可见光的波长,分别对应的是x y的分量值。这样,基于这个图,我们定义RGB三个点以及中心点(白色),就可以计算出RGB和XYZ之间的线性转换关系,如上是sRGB的定义,可见,该颜色模型并不能覆盖所有的可见光颜色。

当然,这里还有一个3D投影到2D的过程,也是为了方便使用,选取了Unit Plane,如下图不解释:

RGB模型有一个缺点,就是亮度分解到RGB三个变量,这点并不符合人眼的感光方式,人眼对明暗相比颜色要敏感。于是,便有了HSV颜色模型。

如下是HSV和RGB之间的对比,我们选择任意一个颜色,比如红色,右侧是该颜色的单色(monochromatic),我们上下滑动该控件,对比HSV和RGB的变化区别。在RGB模型中看上去差不多颜色在HSV中会发现色调相近,但亮度差别则会大一些,这更符合我们的感观,在很多视觉应用中更为有效,比如背景剔除。

SV针对每一个色调H都有一个L的色带,如果我们固定饱和度为0,则对应的是灰度色带,纯色的亮度变化,也是我们人类最擅长识别的。早期的黑白电视仅有灰度的区别,我们也是看的津津有味,我们在灰度图上增加UV两个分量,便有了彩色电视,这就是YUV颜色模型:

说到灰度图,也就是明暗的变化,从极致的暗到极致的亮之间的变化很大,不仅是人眼,任何感光元件都无法覆盖整个范围,这样,我们所感知的亮度和光的强度之间便会有一个线性关系,比如光线强度的累加就是对应颜色的强度,但人眼并不是线性关系的,如下图,这样的好处是在黑暗中更好的识别亮度的变化,因此,感光器捕捉的强度和人眼感知的强度之间就需要有一个校正,这就是gamma correction的原因之一。

前面讲到的颜色模型,都属于Additive Color Model,适用于显示器这类发光场景,但比如打印纸张对应的颜色,纸并不会发光,而是反射的原理,于是需要一种Subtractive ColorModel:

你或许会听过CMY或CMYK颜色模型,就属于这类,这时,CMY成为了三原色,引入K(黑色),大概是因为黑墨便宜吧。

个人有一个疑问,我们有时候绘制星云图时,或检测数据时不可见光时,如何确定不见光对应的颜色,是否有标准?

本文主要解释了光和颜色的关系以及感光原理,并讨论了主流的颜色模型的特点和各自的价值。

参考资料主要有:Stanford cs148 light and color, CMU cs color, Utrecht Advance Graphics & Computer Vision等

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LET 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从光到颜色
  • 感光器
  • Color Model
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档