色彩空间RGB/CMYK/HSL/HSB/HSV/Lab/YUV基础理论及转换方法:RGB与YUV
之前做个设计,现在从事IT,脑子里面关于RGB,RGBA,CMY,CMYK,YUV,但是具体理论还是不扎实。若干年前之前写过《水煮RGB与CMYK色彩模型—色彩与光学相关物理理论浅叙》《三色视者与四色视者身后的理论基础:色彩原理》
光学三原色与印刷三间色
光学的三原色: 红(Red)、绿(Green)、蓝(Blue) (RGB)。
印刷的三原色: 青(Cyan)、品红(Magenta)、黄(Yellow) (CMYK)
印刷色是光照射在印刷物上, 然后折射到人眼的光的合成,所以印刷色会比光学暗淡,因为印刷色是经过印刷物过滤过光合成的,自然会比较相对暗淡。
C(100) +M(100) +Y(100) = 黑色(100,100,100)
可见黑色就是青色、品与黄色之和,但是这三种颜色混成的黑色不够纯,所以印刷学就引进了K(Black)黑色,因为B已经被Blue占用,所以黑色就只好用引文字母黑色的最后一个字母K,所以:
C(100) +M(100) +Y(100) + K(100) 等价于 C(0) +M(0) + Y(0) + K(100) = 黑色
光学三原色如何得到白色, 配色如下:
R(0) + G(0) + B(0)+A(255) = C(0) +M(0) + Y(0) + K(100) = 黑色
联想下,是不是可见黑色就是没有颜色(0,0,0)?
我们显示屏一般采用RGB,印刷采用CMY。RGB/CMY色彩模型是通过不同量的(红/绿/蓝)||(青/品红/黄)来描述一个颜色的,对人类来说很不直观,难以理解。他们对机器很友好的色彩模式,但并不够人性化,难以直观理解,因为我们对色彩的认识往往是:什么颜色?鲜艳不鲜艳?亮还是暗?
基于RGB改进的HSL/HSV色彩模型
HSL 模式和HSB(HSV) 都是基于 RGB 的,是作为一个更方便友好的方法创建出来的。HSB和HSV是是一样的,只是叫法不一样而已
HSL:色相H(Hue) ,饱和度S(Saturation),亮度L(Lightness)
HSB:色相H(Hue) ,饱和度S(Saturation),明度B(Brightness)
色相H(Hue)控制颜色种类,取值0-360°的圆心角。需要记住色相环上的六大主色:红黄绿青蓝洋红(即RGB夹CMY呈60°分布)用作基本参照
饱和度S(Saturation)控制颜色的纯度。取值0-100%。数值越大,颜色中的灰色越少,颜色越鲜艳,呈现一种从灰度到纯色的变化
亮度L(Lightness)和明度B(Brightness)控制色彩的明暗变化,取值0-100%。
HSB与HSB其中的S与L有着不同的表述。这里暂且忽略,推荐阅读:色彩空间中的 HSL、HSV、HSB 有什么区别- AK23的回答 - 知乎
Lab颜色模型
Lab颜色模型是由国际照明委员会(CIE:International Commission on illumination)制定的一种色彩模式。
L*代表明度,取值0~100
a*代表从绿色到红色的分量 ,取值-128~127
b*代表从蓝色到黄色的分量,取值-128~127
这样规定是根据人类的视觉原理,灵长类动物的视觉都有两条通道:红绿通道和蓝黄通道,大多数动物最多只有一条通道,如果有人缺失其中一条,就是我们所说的色盲。
其实,我们生活中所说的颜色和光谱中可见光的颜色并不是严格对等的。实际上,存在两种颜色的定义:
自然界真实存在的颜色:严格对应波长,实际上所谓的不同的颜色就是可见光电磁波的不同波长(或者能量不同)的光子。比如波长为550nm的光子、波长为700 nm的光子...
人眼感知的颜色:人眼对整个可见光谱的感知。因为人眼视网膜上,主要负责感知色彩的视锥细胞对不同波长的光子的感知并不相同,存在一个相应的范围
而人眼对不同波长的感知能力可以用下图中的白色曲线来表示。白线对应的值越高,表示人眼对此波段的光子的感知越灵敏。人眼把S那条线感受到的光子都认知为蓝色、把M那天线的认知为绿色、把L那天线对应的认知为红色。
实际上,上述的三种颜色:蓝、绿和红色(RGB)正是我们所知道的三原色。所以,事实上,你只能看到三种颜色:蓝绿红!等等……事实不是这样啊!我们的世界明明丰富多次啊??你怎么在这里瞎扯?其实,你看到的多种多样的颜色是这三种颜色组合在一起的结果。这三种颜色好比一个三维空间里的三个坐标,你把他们不同程度的组合起来,就可以形成各种各样的颜色。实际上,他们形成了一个3D的色彩空间,如下图,空间中每一个点都代表了一种颜色。
所以你看到的颜色其实就是人眼在对蓝绿红这三种光子的测量,然后线性的叠加而已!其实我们的RGB显示器就是运用了这个原理,显示出不同的色彩。所以,很多颜色并不是真正的一个颜色而已,它代表的是这个物体发出的光中,蓝绿红这三种光的相对强度的组合!!这些美丽的颜色中很大一部分其实只是你的脑补而已…… [不过,因为人眼视锥细胞的响应也存在饱和,也就是说蓝、绿和红不可能无限的亮,因此,人类的感知只是这个三维空间里的一个有限区域。这也是CIE定义出他们最有名的CIE色表的来源。因为人类对色彩的感知是有限的,且我们实际上对实际的光谱更感兴趣,所以,根据人眼对色彩的响应曲线,我们可以把上面的三维空间变换到二维(如下图)
而这二维的平面涵盖了人眼能看到的所有颜色(注意,实际上上述的三维色彩空间里有很大一部分是人眼无法识别的颜色,因为人眼视锥细胞的感光能力是有限的!),于是就形成了下面的CIE图,此图是1976年的修改标准,该图最早由1931年提出。
而,通过数学运算,不难算出真实光谱,比如450nm的光应该什么颜色的。你只需要把450nm处三种颜色的视锥细胞的响应叠加起来就行了。通过这样的方法,你就可以计算出一条曲线,它可以近似代表自然界中真实的色彩。此外,你还可以计算出色温曲线。如果你还记得黑体这个概念的话,不同温度会给出不同的能谱分布,如下图,不同的能谱分布中,蓝、绿和红色的相对强度不同。
那么同样通过数学的运算,你可以计算出不同温度黑体在人眼中所反映出的“颜色”。就是图中间的那条曲线。太阳的温度是~6000K,于是我们可以对应出来,太阳是白色(偏一点点黄)。]然而,还需要提到的是,上面说的是物体发出的光,比如太阳(黄白色),还有你的显示器。那么绿叶的颜色又是怎么回事?白纸呢?白种人为什么那么白?黑人为什么那么黑?因为他们不发光。所以,其实他们的颜色只是他们反射的光中蓝绿红这三种光的相对强度的组合!!因此,对于反光的物体来说,光源的颜色覆盖很重要。这也是为什么我们使用日光灯或者白光灯的原因。试想一下,如果你用绿光灯,你还能看到丰富多彩的衣服和图画吗?值得一提的是,汉语里的紫色其实是一个比较模糊的概念,既可以对英语英语里的violet,也可以是purple。严格来说,violet更接近比蓝波波长更短的颜色,也就是红和绿都很少,而蓝色也很弱的情形。相当于黑中加了点蓝的感觉。而紫色则是纯粹的脑补大红+大蓝而已。不管则样,紫色并不是真实的颜色。那么violet呢?其实它也并不是真实的,我们再来看一副更精确的视锥细胞响应曲线
或者为了更加严谨,我们来看看论文里实际的测量曲线:
注意到了吗?实际上在比蓝光中较短的波段红色视锥细胞的响应也比较突出,大概是0.1,而蓝色大概是0.7-0.8。因此,你看到的violet也是蓝+红组合的结果。
一句话总结,我们大致可以理解为,颜色是自然界的可见光波段的光谱在人眼中的一个线性投影。我们可以更具CIE,把人眼中看到的“颜色”,还原到自然界“真实的颜色”。
自然界中任何一点色都可以在Lab空间中表达出来,它的色彩空间比RGB空间还要大(有毛用?超过了RGB色域屏幕显示不了,超过了CMYK的色域打印不了,超过了视觉色域看都看不了!高精度下lab偶尔可以作为颜色模式的中间标尺,但是这和你一点关系都没有。这纯粹是数学公式定义的结果——色域很大纯粹是因为定义范围内有许多多余的颜色)。不过对PS用户来说:LAB最大的优势就是调色,最常用的也是调色。明度和色彩信息因为是分离的,可以允许做出更多的操作,更精准的调整。也可以通简单的调整就出做一些别的模式非常复杂的操作才能达到的效果。比如照片过暴导致高光细节丢失严重,就可以用LAB修补高光部分的色彩信息。
这种模式是以数字化方式来描述人的视觉感应, 与设备无关,所以它弥补了RGB和CMYK模式必须依赖于设备色彩特性的不足。由于Lab的色彩空间要比RGB模式和CMYK模式的色彩空间大。
注:
Catmull和Smith在1971至1972年间提出了这个不可或缺的alpha数值,使得alpha渲染和alpha合成变得可能。提出者以alpha来命名是源于经典的线性插值方程αA + (1-α)B所用的就是这个希腊字母。PNG是一种使用RGBA的图像格式。
注:一般两个色彩空间,找一个变换矩阵,可以快速转换。
原文链接:色彩空间RGB/CMYK/HSL/HSB/HSV/Lab/YUV基础理论及转换方法:RGB与YUV - 计算机视觉与计算机图形学的图像处理所涉及的基础理论知识 - 周陆军的个人网站,原文阅读体验可能更好,文章更新只在源站进行,如有不妥之处,请留言告知,多谢
参考文章:
色彩空间表示与转换 https://zhuanlan.zhihu.com/p/24281841
色彩空间RGB/CMYK/HSL/HSB/HSV/Lab/YUV基础理论及转换方法:RGB与YUV的更多相关文章
- 前端需要了解的颜色模型,RGB、HSL和HSV
颜色模型,是用来表示颜色的数学模型.比如最常见的 RGB模型,使用 红绿蓝 三色来表示颜色. 一般的颜色模型,可以按照如下分类: 面向硬件设备的颜色模型:RGB,CMYK,YCrCb. 面向视觉感知的 ...
- Atitit 从 RGB 到 HSL 或 HSV 的转换
Atitit 从 RGB 到 HSL 或 HSV 的转换 1.1. 从 RGB 到 HSL 或 HSV 的转换公式与原理1 1.2. public static HSV RGB2HSV(Color ...
- Wiki: HSL和HSV色彩空间
HSL 和 HSV(也叫做 HSB)是对RGB 色彩空间中点的两种有关系的表示,它们尝试描述比 RGB 更准确的感知颜色联系,并仍保持在计算上简单.HSL 表示 hue(色相).saturation( ...
- 关于HSL和HSV颜色空间的详细论述
目前在计算机视觉领域存在着较多类型的颜色空间(color space).HSL和HSV是两种最常见的圆柱坐标表示的颜色模型,它重新影射了RGB模型,从而能够视觉上比RGB模型更具有视觉直观性. HSV ...
- 图像处理术语解释:灰度、色相、饱和度、亮度、明度、阿尔法通道、HSL、HSV、RGBA、ARGB和PRGBA以及Premultiplied Alpha(Alpha预乘)等基础概念详解
☞ ░ 前往老猿Python博文目录 ░ 一.引言 由于老猿以前没接触过图像处理,在阅读moviepy代码时,对类的有些处理方法代码看不懂是什么含义,为此花了4天时间查阅了大量资料,并加以自己的理解和 ...
- 颜色空间模型(HSV\LAB\RGB\CMYK)
通过Photoshop的拾色器,我们知道表征颜色的模型的不止一种,本文将系统并且详细讨论这四种模型(HSV.LAB.RGB和CMYK)之间的联系以及应用.本文部分章节整合了多位优秀博主的博客(链接见本 ...
- 【转载】颜色空间-RGB、HSI、HSV、YUV、YCbCr的简介
转载自缘佳荟的博客. 颜色通常用三个相对独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.而颜色可以由不同的角度,用三个一组的不同属性加以描述,就产生了不同的颜色空间.但 ...
- RGB,CMYK,HSB各种颜色表示的转换 C#语言
Introduction Why an article on "colors"? It's the same question I asked myself before writ ...
- 【C#】RGB,CMYK,HSB各种颜色表示的转换(转)
[C#]RGB,CMYK,HSB各种颜色表示的转换 一.表示颜色的方式有很多种,如RGB,CMYK,HSB,Hex等等 1.RGB:这种表示颜色由三原色构成,通过红,绿,蓝三种颜色分量的不同,组合 ...
随机推荐
- Mysql历史版本下载地址
Mysql历史版本下载地址:http://downloads.mysql.com/archives/community/
- vue中点击按钮自动截图并下载图片
点击一个按钮,截取对应区域的界面,才对截取的界面进行裁切并下载 下载 html2canvas npm install html2canvas --save 引用 : import htm ...
- CSS3—HSL与HSLA属性
㈠HSL(H,S,L) ⑴通过对色相(H).饱和度(S).明度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色 ⑵取值 H:Hue(色调).0(或360)表示红色,120表示绿色,2 ...
- java上传视频文件
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
- 如何在VMware软件上安装Red hat(红帽)Linux6.9操作系统
本文介绍如何在VMware软件上安装Redhat(红帽)Linux6.9操作系统 首先需要准备 VMware软件和Redhat-Linux6.9操作系统的ISO系统镜像文件包(这里以linux6.9为 ...
- [sdoi 2010][bzoj 1925]地精部落(神仙dp)
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
- python随机生成库faker库api详解
# -*- coding: utf-8 -*- # @Author : FELIX # @Date : 2018/6/30 9:49 from faker import Factory # zh_CN ...
- 2019.12.12网页设计大赛&2019.12.13程序设计大赛观后感
有幸参加了一次网页设计大赛和程序设计大赛,其实在大一的时候就参加过一次程序设计大赛,那时候也没怎么听,现在又有了一次机会来听,这次就认真的听了这两次的比赛,也有很多的感悟. 1.要学习完成一个任务的多 ...
- [ML] Gradient Boost
参考链接: 1. https://medium.com/@cwchang/gradient-boosting-%E7%B0%A1%E4%BB%8B-f3a578ae7205 2. https://zh ...
- Taro 遇到的坑
1.createSelectorQuery无法获取节点宽高 业务场景: 列表需要在最后一页底部显示 ‘我是有底线的~’ 提示,但是如果数据只有一页且不占满屏幕的话,就不显示.需要判断 ‘我是有底线的~ ...