RGB三原色是怎么来的呢?
当然,是因为他们三者可以调配出其他所有颜色。但为什么偏偏是这三个颜色呢?
人眼有四种感光细胞,分别是三种锥状感光细胞,分别感知红,绿,蓝三色,以及感知黑白的杆状细胞。
通过实验科学家们测量了三种锥状细胞的感光范围及其灵敏度:
那三原色是不是取的三种细胞感光最灵敏的三处颜色呢?不是,因为他们三个不满足格拉斯曼定律(视觉三基色假说)。
该假说内容如下:
人眼的感受光谱范围约为380~780 nm,而使用三种细胞感光最灵敏的三处颜色,相互混合后不足以配出人眼所能看到的所有颜色,也就是不满足假说的第一条。
这就相当于一个三元求解函数F = aR+bG+c*B,a,b,c均大于等于零,R,G,B代表三种原色,然后要求函数值F覆盖380~780nm所有的数,这个函数的解自然有很多很多。
为标准化起见,1931年国际照明委员会(CIE)作了统一规定,选定波长为700nm、546.1nm和435.8nm的单色光作为红R、绿G、蓝B三原色,又称为物理三基色。
确定了三基色,就可以建立RGB颜色空间模型了:
那为什么又有了一个HSV模型呢?
HSV模型的方便之处大家都知道,我想提取红色,但用RGB模型你可以用一个组合或者一个区间准确的描述红色吗?不能,因为用三原色调配出类红色有太多选择了。
但有HSV就可以用一个区间描述特定的颜色,H代表色度,S代表色饱和度,V代表明度。
而实际上自然世界是没有色度,色饱和度和明度这仨东西的,是人们抽象出来的概念,这套概念比RGB更符合人的视觉特性,虽然人眼是靠RGB三色感光细胞感知颜色的。且HSV可以大大简化图像分析与处理的工作量。
而实际上,HSV这套色彩空间与RGB色彩空间是同一个物理量的不同表示法,两者之间存在转换关系。
H表示色度,用角度表示(0-360°),反应了该颜色最接近什么样的光谱波长。规定0°为红色,120°为绿色,240°为蓝色。
S表示色饱和度,色饱和度参数是色环(上图)的原点到彩色点的半径长度,以上图红色线为例,红色线外端点为纯红色(R原色),其饱和度为1(100%),而红色线根部(原点处),饱和度为0(0%)。
V表示光照强度或明度,他确定了像素的整体亮度,而不管其颜色是什么,其亮度值由最亮1(100%)到最暗0(0%)。
三个变量,H,S处于同一平面,V轴垂直于该平面,所以就可以得到一个圆柱形了:
但我们平时见到的都是锥形的,如下图:
两者的区别,网上的解释大多是一句话:圆柱形是数学理论上的模型,而圆锥形是概念上的模型。
之后我在下面链接中看到了更为详细的解释:
关于HSV模型的探讨
原因如下:
按说,HS两者构成一个圆,V垂直于这个圆面,得到的是一个圆柱,但该圆柱颜色空间并不适用于作颜色模型,颜色模型应该满足正向反向都具有唯一性。
也就是我在模型上确定一个点,它的颜色是唯一的;而我在外界找到一种颜色,该颜色在模型上的点也是唯一的。
那再看圆柱模型,黑色在模型上是唯一的吗?
当明度V为零时,HS将没有意义,圆柱的整个底面都是一个颜色:黑色。所以我们将圆柱的底部挤压为一个点,变成圆锥模型,这时就符合颜色模型定义了。
仔细对照一下两者,会发现其实这两个模型在颜色量上是一样的,只是锥形具有了唯一性。
我们再说一下除了HSV模型,还有一个HSI模型,两者类似,不同在于:I代表亮度,V代表明度。
亮度和明度的区别是:
一种纯色的明度等于白色的明度,而纯色的亮度等于中度灰的亮度。
换句话说,明度值是相对1处而言,亮度值是相对0.5处而言。
由此,两者的颜色模型也不同,HSI是双锥形,中间最粗处亮度为0.5;而HSV是倒锥形,最粗处明度为1:
稍微用心一些,应该就能理解两者的区别吧。
最后和大家分享一个在抖音上看到的色盲悖论:
假设有一个人,从出生开始就患有一种奇怪的色盲症,他会把绿色看成蓝色,把蓝色看成绿色,但是他并不知道自己跟别人不一样,别人看到的森林是绿色的,他看到的是蓝色的。
但是因为从小别人就告诉他森林是绿色的,所以尽管他和别人看到的颜色不一样,但是叫法都是一样的,都是绿色,我们眼中的天空是蓝色的,但是他看到的是绿色的,但是他把绿色叫做蓝色,所以他和我们都不知道他和我们不同。
那么问题来了,我们要怎么证明自己不是这个人呢?
其实这种情况,天空颜色的波长是恒定的,两人的叫法也是一样的都叫蓝色,只是俩人在自己心中看到的不一样,对人类文明的发展一点阻碍也没有,但活动下脑筋还是可以的,哈哈。
本文主要是以中科院“数字图像处理与分析”课程第二章为基础,结合自身思考的疑问并搜集的网上一些朋友的答案补充而写成的,所以未标原创,仅作分享,欢迎转发。
关于数字图像处理,可能耳熟能详的就是《数字图像处理-冈萨雷斯》这本书了,但单纯啃书我觉得很枯燥,近期会在我的公众号的【学习资源】专栏里更新一篇我搜集的关于数字图像处理的学习资源。