颜色的前世今生21·Lab编码系统

Lab,是所有拾色器里最让人发晕的。

看起来好高大上啊,不知道该怎么下嘴啊有木有?!

 

很!正!常!

Lab是一种完全不直观的颜色空间!并且,Lab还很年轻,1976年才诞生,进入大众视野的时间就更加短暂。

前一篇我们已经介绍了,Lab是建立在人眼对颜色的二次编码原理上的,即:

1.       第一阶段:人眼里的RGB视觉细胞识别RGB信号;

2.       第二阶段:神经网络对RGB信号重新编码,形成--绿-三个新通道的信号,供大脑进行颜色识别;

3.       其中,黑-白通道被命名为L通道,取值范围:0~255;

4.       红-绿通道命名为a通道,取值范围-127~128;

5.       黄-蓝通道命名为b通道,取值范围-127~128;

 

直观一点看,Lab颜色空间是一个球形,见下图。

为了方便描述,把它视为一个地球仪。那么南极点就是最暗的黑色,北极点就是最亮的白色。亮度L沿着南极到北极的轴心线,从暗到亮变化。

沿着赤道把地球仪切开,切出来的圆就是色域最大、饱和度最高的颜色。

a轴和b轴分别是红-绿色黄-蓝色

A为正值的时候,是红色。B为正值的时候为黄色。

这样,一个圆形就被分为四个象限。第一象限是红色和黄色的过渡,第二象限是黄色和绿色的过渡。以此类推。

如果用极坐标的角度来看的话,色调就随着极角H的变化而变化,饱和度就随着极径C的变大而变大(这就是在Lab的基础上演变来的LCH色空间)。

 

当a和b为0的时候,就是理论上的中性灰。所谓中性灰,就意味着这个灰色既不偏黄,也不偏蓝,既不偏红,也不偏绿。

从图上可以看到,a、b通道的绝对值越大,颜色的饱和度就越大。越靠近中点,颜色饱和度越小,越接近灰色。并且,真正的中性灰其实范围是很小的,大量的灰色都是所谓的暖灰、冷灰等非中性灰(带一点颜色的灰色)。

 

在PS里,Lab色空间还有一些有趣的特点。

比如,在PS里用Lab的通道来观察图像,一幅图像如果是黑白的,那么a,b通道的数值就全是0。在通道界面里面,就完全是一片干干净净的灰色,没有内容。只有L通道是有图像的。

图片来自网络。处理了一下,原图是彩色的。

在a通道下查看,图像“消失”了。

 

同时,在a通道界面下,红色越鲜艳,图像越白。绿色越鲜艳,图像越黑。b通道以此类推。

这个特性很有意思,它可以有助于我们对图像的颜色进行观察和分析,方便我们修色。

而这也是上一章提到的一键“秋天变夏天”的秘密,因为简单的“反相”操作就可以使红色变绿色,让金黄色的叶子变成绿色。

 

另外需要特别注意的是,RGB的纯红色和纯绿色,并不完全等同于a通道的红色和绿色。Lab里面的红色更接近洋红,绿色更接近青色。也就是说,Lab里面的红色和绿色不是特别“正”。Lab里面的黄色和蓝色倒是比较“正”的,但它的“纯蓝色”(a: 0, b: -128)也不完全等同于RGB里的纯蓝色(R: 0, G:0, B: 255)。

b为0,而a为127和-128的时候的颜色

 

并且,L为0的时候,也不完全等同于黑色,一些红色和绿色也可以L为0。

这一点跟HSB略有不同。在HSB色空间里,B为0的时候就一定是黑色了。这是由它们各自不同的坐标算法决定的。

 

好了,以上,教科书上有的内容都讲完了。

纳尼?!是不是还是没感觉啊?没感觉就对了,有感觉之前,需要有感受。

以下讲讲楼主的个人感受。

 

Lab色大部分人很陌生。要想不陌生,就得经常用。

怎么用?用来修色,不要用来取色。

实话说,楼主自己从来不用Lab来取色。。。PS取色器里面的Lab色,取色的时候用来参考一下还行,真正用来取色就太不直观了(有没有大神直接用Lab取色的,教教我窍门。。。。

 

那为什么PS要采用这么样一个不直观的Lab色空间?

个人意见,Lab用来给照片修色校色(颜色管理)有它独特的优势。

 

1.关于照片修色:

 1)校准色温(b黄-蓝通道);

 2)改变季节(a红-绿通道);

 3)增加a、b通道的对比度,给一些颜色比较平淡的照片增添“活力”(在Lab模式下修改曲线,可以轻松实现让蓝天更蓝,绿树更绿,红花更红);

更多细节推荐《Photoshop Lab 修色圣典》,很厚很厚一本。。。好吧,我也没看完╮(╯_╰)╭

 

2.关于校色,也就是所谓的颜色管理。它的目的主要是控制色差。

这个一定要多说两句!里面的玄机一两句话讲不清楚。

 

Lab作为RGB和CMYK之间的中转站,在颜色管理中起着重要的作用。

要想搞懂颜色管理,就一定要理解Lab的中转站工作原理。因为所谓的颜色管理,落实到具体的操作上,其实就是对Lab色和RGB色、CMYK色之间的映射关系进行管理。

之前我们说了,PS里把RGB色转换为CMYK色的时候,会先把RGB转换为Lab色,再从Lab色转换为CMYK色。反过来,CMYK色转换为RGB色的时候,也会在lab这里过一遍。Lab像一个中间桥梁一样,连接着两个不同的颜色空间。

为啥不直接转?为啥要搞得这么麻烦?

——好了,本篇的重头戏来了!

 

首先,RGB和CMYK色的色号,其实是一系列对物理系统的操作指令,只对“机器该怎么动”负责,并不对最后的颜色负责。

该怎么理解这句话?

举个极端点的例子,CMYK的(100,0,0,0),意思是青色印满,其他颜色不印,所以应该是饱和度最高的青色。但如果印刷机的油墨上错了,该用C的时候用成了K,那么实际印刷出来的(100,0,0,0)就是黑色而不是青色。而这样的错误,光靠检查CMYK色的色号是检查不出来的。

所以,光知道CMYK的色号,并不能确定最后印出来的颜色是什么样,还取决于印刷机、纸张的状态。RGB色同理。

 

打个比方,RGB、CMYK色仅仅是菜谱。最后炒出来的菜什么味道,其实跟很多其他因素相关。Lab色,则是给最后端上桌的菜进行评判,按“酸甜苦辣软糯香酥”等等不同方面用仪器进行严格的打分。如果Lab评分一致,菜的味道就一定是一样的。

 

有时候我开玩笑,把RGB和CMYK色称为“虚”的颜色。而Lab色,则是实实在在的颜色,跟实现的设备无关。它针对自然界所有存在的颜色进行的编码,1就是1,2就是2。知道Lab色的色坐标,就一定能确定到底是什么颜色。

 “虚”的颜色,必须落到“实”处,才能进行相互转换。也就是先确定印刷机的状态,把CMYK色在Lab色空间中标注出来。再确定显示器的状态,把RGB色在Lab色空间中标注出来,它们才能相互转换。颜色管理里后缀为ICC的文件,就是规定这个转换关系的特性文件。

当我要发海报给印厂印刷的时候,先要根据我的显示器的状态(色域、Gamma曲线、白点坐标),把我的电脑上的RGB色转换到Lab空间里。再根据印厂的具体情况,确定Lab色和印厂的CMYK色的对应关系,从而找到适合印刷海报的CMYK色。

如果事先没有准备好ICC文件,PS就会找一个默认的标准来用,比如RGB色就采用sRGB标准,CMYK色就采用Japan Color 2001 Coated。

 

用钱来打个比方!

我们兑换人民币和日元,但是它们自身的购买力是变动的,不同的情况下能买的东西不一样。于是采用购买力固定的美元作为结算中介(嗯,这只是一个比喻!比喻!),把(在特定情况下的)人民币和日元和美元的汇率分别算好,就可以实现人民币和日元的结算了。你可以根据自身设备的情况来定汇率,如果你不定,那就按官方汇率来算。我讲清楚了吗?

 

那么为什么需要一个Lab这样的中间桥梁呢?

之前介绍显示器色域的时候我说了,严格说来,根本没有色域一模一样的显示器。

不是同一个型号的就更别提了。CMYK也同理,换印厂换纸张调设备,印出来的颜色都不一样。

假设RGB和Lab的对应关系有M种,Lab和CMYK的对应关系有N种。如果RGB和CMYK直接转换,就会产生M*N种组合!计算机表示心好累。。。而如果采用Lab作为中介进行转换,就只需要处理M+N种情况,大大减轻了计算量。

 

不是很容易理解是吧?吼吼。来举个栗子。

我手上有手机、pad,还有一台笔记本,一台台式机,一共四个不同的显示屏。仔细一看,他们的颜色表现都是不一样的!那么这里M=4。

当我要发图给4个不同的印厂印刷的时候(比如是在报纸上做广告,不同的报纸用的印厂一般都不一样),N=4。

如果RGB和CMYK直接转换,理论上需要用到4*4=16个特性文件。但如果中途用Lab转换一次,就只需要4+4=8个特性文件了。

M和N的数量越大,节约的工作量就越大。

 

进一步。

当我出广告图给报社,报社跟我交接工作的人很有可能是广告部的,都不知道印厂的门朝哪边开啊!而印厂跟报社交接工作的人,有可能是销售部的,你问他“你家印厂的颜色特性怎么样啊”,他大概会蒙圈。。。所以整个信息传递的链条有可能是相当长的,如果直接RGB转CMYK,需要收集信息的时间和精力成本其实比一般预想的要高。

如果中间加一层Lab中转,工作就轻松多了。因为我并不需要知道印厂的工作状态,只需要干好我自己的事,把RGB到Lab的特性文件准备好就可以了。从Lab到CMYK这一步工作可以由印厂自己管控,理论上哪怕中途换印厂换设备也无所谓。当然,国内目前颜色管理的实际情况是。。。你懂的。。。还是去厂里蹲点靠谱!(实际上,哪怕是不存在色差问题的黑白稿,也最好能蹲点。。。印过同人本的各位大大肯定知道我想吐槽什么。。。)

此其一。

 

其次,Lab可以标注的颜色,比RGB和CMYK多很多很多很多!

这个“颜色多”,包含两个方面,一是色域大,二是精细度高。

关于色域大。

RGB和CMYK色空间有重叠的部分,也有不重叠的部分。它们相互转换用的中转站,必须比这两个空间都大,才能把它们都装下对不对?

实际上,Lab色空间基于CIE1931XYZ,包括了所有物理上能实现的所有颜色。我们可以把RGB和CMYK的颜色在Lab色空间中标注出来,两者的差异看起来就更直观了:

罕见的3D动图,不知道能不能正常浏览。。。

红色部分是sRGB,小一点的是SWOP(U.S.Web Coated,美式胶印标准),蓝色的点点点是需要校正的颜色。

从图上可以看到,光讨论2维方向的色差是不准确的。2维投影位置一致,不代表明度也一致。

图片来源:颜色管理软件CHROMiX官方网站。

 

关于精细度高。

Lab色是以实数为坐标的,可以简单的理解为坐标可以精确到无限小数。所以精细度特别高。Lab取色器里取整数的做法,是一种简化。一般来说,Lab色的计算会保留到小数点后两位(大家可以算算这样下来可以标定多少种颜色)。

有什么好处?

依然以钱来做比喻(楼主你是多爱钱?!):
RGB是一个以4毛钱为基本单位的货币系统(4毛?这么怪?没错就是这样任性╮(╯_╰)╭,因为它是二进制的)。

而CMYK是一个以1块钱为基本单位的货币系统。

那它们之间怎么兑换呢?怎么样都不凑整对不对?
Lab系统则是一个以1毛钱为基本单位的货币系统。
所以,先把RGB的钱换算成Lab的钱数,然后找一个最接近的CMYK的钱数,就可以把RGB换算成CMYK了。当然,是舍弃了很多误差的一个近似值,凑合用用也还行。

 

有学霸同学要问了,上面这些CIE XYZ也能做到,那么为什么要舍弃XYZ系统而采用Lab?

这是因为lab 是一个均匀的(相对而言)色空间。Lab诞生的初衷,就是为了解决xyz色差不均匀的问题。

 

什么叫色差不均匀?

还是以钱来打比方(对,我就是喜欢钱,哼!):

颜色A和颜色B差了2块钱,A和C相比也差了2块钱。但是C看起来差异却更大。

——色差的数值一样,但主观感受上的差异程度不同,就叫色差不均匀。

 

这会造成什么问题

当一个RGB色要往CMYK色转换的时候,如果有两个颜色可选,色差都是2块钱,选哪个?

进一步,有两个CMYK颜色可选,一个差了2块钱,一个差了3块钱,哪个色差更大?

——不知道!选哪个?更不知道!

 

这简直没法玩儿了有木有?

为了解决这个问题,CIE在CIE XYZ之后,开发了一系列傻傻分不清的表色体系:CIE 1960 UCS,CIE 1964 L*u*v*,CIE 1976 L*a*b*,CIE 2000。

为什么它们名字都这么像?因为它们多多少少都还有些问题,所以还在不停的打补丁升级中(类似于Windows XP、Windows 8、Windows 10)。。。实际上,直到现在,这个完善工作都还没有完全做完!完美的颜色系统还不存在!

PS:以上的功能,用其他的CIE均匀色空间也是可以完成的,比如Luv系统。

那么为什么PS舍弃了Luv而用了Lab?我觉得PS应该是从修色的角度考虑的。Luv色相分隔不清楚,又看不出补色关系,所以在修色功能上跟RGB、CMYK相比并没有什么优势。

 

最后的最后,再讨论一下为什么Lab系统要叫这个名字。

L好理解,a和b有什么意义呢?

我觉得答案是。。。没有什么意义!就是随便选的!

总得要起个名字对吧?对,就是辣么任性!!

 

等等,说随便选的其实也不完全。

按照楼主多年来(不充分不成熟不客观不中立)的观察,对于这种成对、成套出现参数,科学家最爱用一串一串的字母来命名。什么abc啊, mn啊, xyz啊,诸如此类。更何况L和a、b连在一起,还凑成了一个有意义的单词(Lab,实验室),比较容易记。

其中的b还能跟blue对应上,所以a是红-绿通道,b是黄-蓝通道。

 

但是呢,这里也有一个问题可能大家会比较困惑。那就是——PS取色器界面里面的b实在太多了!

RGB色空间有个B(Blue,注意是大写),HSB色空间里也有个B(明度Brightness,也是大写),现在Lab里面又来个b(黄-蓝通道,小写)。

——每一个的含义都不同!那为什么要用一样一样的字母啊摔!

 

这个问题是这样的,这些色空间一开始被定义的时候,并没有想过有一天竟然会被PS拉来排排坐。。。

所以,这些参数,就简单的采用了和自身概念有点关联的、大家都比较熟悉的字母来命名。

要是选了太有个性的名字,会给初学者带来很大的烦恼有木有。。。

 

当年楼主学高数的时候,有一个符号长这样:ζ。。。

扭来扭去的有木有?!写的时候不知道该怎么写有木有?!念的时候不知道该怎么念有木有?!(现在知道了,念:载塔)

而且还长得像条小虫子有木有?!每次强迫症的楼主看到都好想一巴掌拍死它!你说楼主的高数怎么能学得好啊啊啊啊~~~

你一定不想在PS里看到这种奇葩的选项,对不对?

 

实际上,更准确的说,Lab色空间应该叫L*a*b*才对,还要带星号呢。。。呢。。。呢。。。真正的Lab色已经很少有人用了,现在提到Lab,一般就是指L*a*b*。

同志们,知足吧,这个已经是简化版的了。。。

(带星跟不带星的区别我就不写了,你们也一定不想看,嗯哼~)

 

好了,以上,再见!

热门文章

暂无图片
编程学习 ·

那些年让我们目瞪口呆的bug

程序员一生与bug奋战,可谓是杀敌无数,见怪不怪了!在某知识社交平台中,一个“有哪些让程序员目瞪口呆的bug”的话题引来了6700多万的阅读,可见程序员们对一个话题的敏感度有多高。 1、麻省理工“只能发500英里的邮件” …
暂无图片
编程学习 ·

redis的下载与安装

下载redis wget http://download.redis.io/releases/redis-5.0.0.tar.gz解压redis tar -zxvf redis-5.0.0.tar.gz编译 make安装 make install快链方便进入redis ln -s redis-5.0.0 redis
暂无图片
编程学习 ·

《大话数据结构》第三章学习笔记--线性表(一)

线性表的定义 线性表:零个或多个数据元素的有限序列。 线性表元素的个数n定义为线性表的长度。n为0时,为空表。 在比较复杂的线性表中,一个数据元素可以由若干个数据项组成。 线性表的存储结构 顺序存储结构 可以用C语言中的一维数组来…
暂无图片
编程学习 ·

对象的扩展

文章目录对象的扩展属性的简洁表示法属性名表达式方法的name属性属性的可枚举性和遍历可枚举性属性的遍历super关键字对象的扩展运算符解构赋值扩展运算符AggregateError错误对象对象的扩展 属性的简洁表示法 const foo bar; const baz {foo}; baz // {foo: "bar"…
暂无图片
编程学习 ·

让程序员最头疼的5种编程语言

世界上的编程语言,按照其应用领域,可以粗略地分成三类。 有的语言是多面手,在很多不同的领域都能派上用场。大家学过的编程语言很多都属于这一类,比如说 C,Java, Python。 有的语言专注于某一特定的领域&…
暂无图片
编程学习 ·

写论文注意事项

参考链接 给研究生修改了一篇论文后,该985博导几近崩溃…… 重点分析 摘要与结论几乎重合 这一条是我见过研究生论文中最常出现的事情,很多情况下,他们论文中摘要部分与结论部分重复率超过70%。对于摘要而言,首先要用一小句话引…
暂无图片
编程学习 ·

安卓 串口开发

上图: 上码: 在APP grable添加 // 串口 需要配合在项目build.gradle中的repositories添加 maven {url "https://jitpack.io" }implementation com.github.licheedev.Android-SerialPort-API:serialport:1.0.1implementation com.jakewhart…
暂无图片
编程学习 ·

2021-2027年中国铪市场调研与发展趋势分析报告

2021-2027年中国铪市场调研与发展趋势分析报告 本报告研究中国市场铪的生产、消费及进出口情况,重点关注在中国市场扮演重要角色的全球及本土铪生产商,呈现这些厂商在中国市场的铪销量、收入、价格、毛利率、市场份额等关键指标。此外,针对…
暂无图片
编程学习 ·

Aggressive cows题目翻译

描述&#xff1a; Farmer John has built a new long barn, with N (2 < N < 100,000) stalls.&#xff08;John农民已经新建了一个长畜棚带有N&#xff08;2<N<100000&#xff09;个牛棚&#xff09; The stalls are located along a straight line at positions…
暂无图片
编程学习 ·

剖析组建PMO的6个大坑︱PMO深度实践

随着事业环境因素的不断纷繁演进&#xff0c;项目时代正在悄悄来临。设立项目经理转岗、要求PMP等项目管理证书已是基操&#xff0c;越来越多的组织开始组建PMO团队&#xff0c;大有曾经公司纷纷建造中台的气质&#xff08;当然两者的本质并不相同&#xff0c;只是说明这个趋势…
暂无图片
编程学习 ·

Flowable入门系列文章118 - 进程实例 07

1、获取流程实例的变量 GET运行时/进程实例/ {processInstanceId} /变量/ {变量名} 表1.获取流程实例的变量 - URL参数 参数需要值描述processInstanceId是串将流程实例的id添加到变量中。变量名是串要获取的变量的名称。 表2.获取流程实例的变量 - 响应代码 响应码描述200指…
暂无图片
编程学习 ·

微信每天自动给女[男]朋友发早安和土味情话

微信通知&#xff0c;每天给女朋友发早安、情话、诗句、天气信息等~ 前言 之前逛GitHub的时候发现了一个自动签到的小工具&#xff0c;b站、掘金等都可以&#xff0c;我看了下源码发现也是很简洁&#xff0c;也尝试用了一下&#xff0c;配置也都很简单&#xff0c;主要是他有一…
暂无图片
编程学习 ·

C语言二分查找详解

二分查找是一种知名度很高的查找算法&#xff0c;在对有序数列进行查找时效率远高于传统的顺序查找。 下面这张动图对比了二者的效率差距。 二分查找的基本思想就是通过把目标数和当前数列的中间数进行比较&#xff0c;从而确定目标数是在中间数的左边还是右边&#xff0c;将查…
暂无图片
编程学习 ·

项目经理,你有什么优势吗?

大侠被一个问题问住了&#xff1a;你和别人比&#xff0c;你的优势是什么呢? 大侠听到这个问题后&#xff0c;脱口而出道&#xff1a;“项目管理能力和经验啊。” 听者抬头看了一下大侠&#xff0c;显然听者对大侠的这个回答不是很满意&#xff0c;但也没有继续追问。 大侠回家…
暂无图片
编程学习 ·

nginx的负载均衡和故障转移

#注&#xff1a;proxy_temp_path和proxy_cache_path指定的路径必须在同一分区 proxy_temp_path /data0/proxy_temp_dir; #设置Web缓存区名称为cache_one&#xff0c;内存缓存空间大小为200MB&#xff0c;1天没有被访问的内容自动清除&#xff0c;硬盘缓存空间大小为30GB。 pro…
暂无图片
编程学习 ·

业务逻辑漏洞

身份认证安全 绕过身份认证的几种方法 暴力破解 测试方法∶在没有验证码限制或者一次验证码可以多次使用的地方&#xff0c;可以分为以下几种情况︰ (1)爆破用户名。当输入的用户名不存在时&#xff0c;会显示请输入正确用户名&#xff0c;或者用户名不存在 (2)已知用户名。…