前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【3000字扫盲】来搞"颜色"!RGB/HSV/HSI颜色模型

【3000字扫盲】来搞"颜色"!RGB/HSV/HSI颜色模型

作者头像
周旋
发布2020-07-16 10:08:23
1K0
发布2020-07-16 10:08:23
举报
文章被收录于专栏:行走的机械人行走的机械人

一:RGB三原色

RGB三原色是怎么来的呢?

当然,是因为他们三者可以调配出其他所有颜色。但为什么偏偏是这三个颜色呢?

人眼有四种感光细胞,分别是三种锥状感光细胞,分别感知红,绿,蓝三色,以及感知黑白的杆状细胞。

通过实验科学家们测量了三种锥状细胞的感光范围及其灵敏度:

那三原色是不是取的三种细胞感光最灵敏的三处颜色呢?不是,因为他们三个不满足格拉斯曼定律(视觉三基色假说)。

该假说内容如下:

  1. 所有颜色都可由相互独立的三基色得到
  2. 假如三基色的混合比相等,则色调和色饱和度也相等
  3. 任意两种颜色混合产生的新颜色与采用三基色分别合成这两种颜色的各自成分混合起来得到的结果相等
  4. 混合色的光亮度是原来各分量光亮度的总和

人眼的感受光谱范围约为380~780 nm,而使用三种细胞感光最灵敏的三处颜色,相互混合后不足以配出人眼所能看到的所有颜色,也就是不满足假说的第一条。

这就相当于一个三元求解函数F = a*R+b*G+c*B,a,b,c均大于等于零,R,G,B代表三种原色,然后要求函数值F覆盖380~780nm所有的数,这个函数的解自然有很多很多。

为标准化起见,1931年国际照明委员会(CIE)作了统一规定,选定波长为700nm、546.1nm和435.8nm的单色光作为红R、绿G、蓝B三原色,又称为物理三基色。

确定了三基色,就可以建立RGB颜色空间模型了:

二:HSV颜色模型

那为什么又有了一个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轴垂直于该平面,所以就可以得到一个圆柱形了:

但我们平时见到的都是锥形的,如下图:

两者的区别,网上的解释大多是一句话:

圆柱形是数学理论上的模型,而圆锥形是概念上的模型。

之后我在下面链接中看到了更为详细的解释:

代码语言:javascript
复制
https://www-kamilet-cn.mipcdn.com/c/s/www.kamilet.cn/about-hsv/mip/#&lid=11968506282765462076&srcid=1599&mipanchor=&eqid=a618ad0d64442a3c100000005f088052&searchFrom=1020712a&sids=148077_147891_146653_150083_150906_150800_149586_146549_147279_148194_148868_141744_149619_149718_150074_148402_150480_149540_131861_151263_148523_148724_127969_147546_151031_150165_150106_139882_144966_146732_151154_147679_100807_148754_151149_146396_148714_146958_107314_149253_150051_150647_138426_151116_150340_146574_146819_149761_150913_110086&mipservice=1&order=1&cambrian=%7B%22type%22%3A%22cambrian%22%2C%22logo%22%3A%22%5C%2F%5C%2Fcambrian-images.cdn.bcebos.com%5C%2F292b31939fa376d0f79861288fbf8fb1_1513750297939.jpeg%22%2C%22title%22%3A%22%5Cu8bbe%5Cu8ba1%5Cu5e08%5Cu5145%5Cu7535%5Cu7ad9%22%7D

原因如下:

按说,HS两者构成一个圆,V垂直于这个圆面,得到的是一个圆柱,但该圆柱颜色空间并不适用于作颜色模型,颜色模型应该满足正向反向都具有唯一性。

也就是我在模型上确定一个点,它的颜色是唯一的;而我在外界找到一种颜色,该颜色在模型上的点也是唯一的。

那再看圆柱模型,黑色在模型上是唯一的吗?

当明度V为零时,HS将没有意义,圆柱的整个底面都是一个颜色:黑色。所以我们将圆柱的底部挤压为一个点,变成圆锥模型,这时就符合颜色模型定义了。

仔细对照一下两者,会发现其实这两个模型在颜色量上是一样的,只是锥形具有了唯一性。

三:HSI颜色模型

我们再说一下除了HSV模型,还有一个HSI模型,两者类似,不同在于:I代表亮度,V代表明度。

亮度和明度的区别是:

一种纯色的明度等于白色的明度,而纯色的亮度等于中度灰的亮度。

换句话说,明度值是相对1处而言,亮度值是相对0.5处而言。

由此,两者的颜色模型也不同,HSI是双锥形,中间最粗处亮度为0.5;而HSV是倒锥形,最粗处明度为1:

稍微用心一些,应该就能理解两者的区别吧。

最后和大家分享一个在抖音上看到的色盲悖论:

假设有一个人,从出生开始就患有一种奇怪的色盲症,他会把绿色看成蓝色,把蓝色看成绿色,但是他并不知道自己跟别人不一样,别人看到的森林是绿色的,他看到的是蓝色的。

但是因为从小别人就告诉他森林是绿色的,所以尽管他和别人看到的颜色不一样,但是叫法都是一样的,都是绿色,我们眼中的天空是蓝色的,但是他看到的是绿色的,但是他把绿色叫做蓝色,所以他和我们都不知道他和我们不同。

那么问题来了,我们要怎么证明自己不是这个人呢?

其实这种情况,天空颜色的波长是恒定的,两人的叫法也是一样的都叫蓝色,只是俩人在自己心中看到的不一样,对人类文明的发展一点阻碍也没有,但活动下脑筋还是可以的,哈哈。

THE END

本文主要是以中科院“数字图像处理与分析”课程第二章为基础,结合自身思考的疑问并搜集的网上一些朋友的答案补充而写成的,所以未标原创,仅作分享,欢迎转发。

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

本文分享自 Opencv视觉实践 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档