2.1 色彩空间

image.png


色彩发送器
色彩认知:光源是出生点,光源发射出光线,光线通过直射反射折射等路径最终进入人眼。但是人眼接收到光线后,人眼的细胞产生了一系列化学反应。由此把产生的新号传入大脑,最终大脑对颜色产生了认知感知。
光的要素
如果没有光,我们就无法在黑暗中看到色彩,光的本质就是一种物理现象,光在没有进入我们眼睛前,我们对它的认知是一种波长与能量分布。
光源
光源就是产生光的物体。

 

image.png


波长
光理论上是无限大的,只是我们人眼可见光是局限的。


能量分布
我们讲光线是一种波,那么既然是真实存在的就会有能量,能量单位就是功率,我们认知的光就会有不同的功率。比如一个光是由多个波长组合起来的波形。
那么也就是说我们阐述色彩就用这个波长就可以了,但是这么做实在太反人类了,我们无法保证能简单描述色彩。于是人们发明了一个叫做分光光度计的东西。


分光光度计
分光光度计就是用于描述光线的具体能量强度,例如以前学到的棱镜分光。通过分光之后对区间波长进行了感应与测量,最后得知了光谱的分布,从而得知了光线额能量集中在了550nm附近(图中绿色的地方)。
于此获得了:1.混合波长组成光线,拆分光线,变成光线形成单一波长光
2.测量单一波长光的实际所含能量


光的传播
直射光:光源直射眼睛。
折射光:光源穿过物体进入眼睛。
反射光:官员经过物体表面反射进眼睛。
光线追踪:光线弹来弹去,然后我们根据权重确定光线最后进入眼睛中的颜色。
下图就是光线反射后,再能量上发生的变化,可以很明显看到少了一部分能量,因为这一部分的能量被物体吸收了,也就是说每次光经过反射或者投射都会或多或少对对光的分布产生一些影响。


简单通过能量分布图分析下图得出结论:物体吸收光功率的大部分在600nm左右,也就是说物体吸收的是黄色和绿色的光。


光源的接受者
人眼一些接收色彩特性:
1.相对亮度感知
2.人眼HDR
3.人眼感光细胞分布
4.人眼本质
5.完整微积分公式
相对亮度感知
在某些阴暗的环境下,点亮一盏灯,这时人眼就会觉得非常亮。如果同时点开1000盏灯,反而觉得只是10倍的亮度,对于亮度的认知相当于从0~1再从1~10.


人眼HDR
人眼既可以分辨出高亮度的云彩的不同层次区别,还可以分辨出阴影中不同物体的异同。
但是人眼的能力不能保证这两个功能同时生效。它可能会随着不同的环境,感知到不同的色彩,体验到不同的敏感效果,甚至可能会随着盯着某个点时间流逝而变化颜色。
人眼感光细胞分布
人眼简单可以把感知色彩的细胞分为两大类,杆状细胞和锥状细胞。
杆状细胞:负责感知亮度。对亮度特别敏感,只要有5~14个光子打到杆状细胞上就会产生神经信号,这也可以解释为什么闪光弹能让人致盲,一部分原因就是因为光实在太亮,直接干涉了人眼最敏感的感光细胞。
锥状细胞:负责感知色彩。这种细胞专门用于感知颜色,但他们还被区分为了L细胞,M细胞,S细胞,
这三种细胞负责感知的波长不一,如图所示,L感知红色区间,M感知绿色区间,S感知蓝色区间。


人眼本质
光的接受者,他的作用就是接受外部光线输入,输出神经电信号进入大脑。
完整微积分公式
○C是人眼这个函数输出的神经电信号
○S(λ)表示LMS这三个感官细胞的感知分布
○I(λ)表示光源的功率谱分布
○R(λ)表示反射物体的吸收功率分布


色彩空间的历史
1800色彩的猜想
人们在18xx年有多种猜想,其中有3种:
1人们有100多种感受颜色的细胞
2人们有三种,分别是RGB三种感色细胞
3人们有三种,分别是黑白,红绿,黄蓝感色细胞
其中2和3这两种猜想都成为了我们当下的色彩视觉模型,也称之色彩模型。
1905Munsell色彩系统
美国艺术家Albert Henry Munsell利用自己的艺术特长,最早提出了一个色彩系统,后来在1930年被优化改良。
Munsell通过很多色卡来描述色彩,下面旋转角度是色相,Munsell垂直的是亮度,从圆心到外部是Munsell饱和度。人们凭借自我主观意识认知与区分色彩就是HSL(色相饱和亮度),这套系统没有过多的物理科学在其中,更多的是一种艺术家的理解与归纳总结。


用了这个色彩系统后一个颜色可以通过:H=1.6YR,V=6.3,C=3.9来描述而且也不会有任何的描述有理解偏差。
于是我们为了方便期间就为一些常用色彩制作了色卡,一个个色卡描述色彩就非常方便。
1931 CIE 1931 RGB Color Specification System
一个叫CIE的机构在1031年建立了一套科学的色彩系统,希望完全客观物理的量化色彩。


对照实验,测试光与三基色一样时通过测试
色彩匹配方案
CIE把所有可视波长的光线作为测试光挨个测试了一个遍,最终的到了三条曲线
我们发现435.8~546.1 nm这段波长中的红色基色强度是负数。这虽然物理正确,但是一点也没有科学的美感,于是我们进行了归一化,保证色彩在-1~1之间。
最终通过计算出rgb的基色的强度在当前混色强度的所占比例
这样计算后, r'g'b'都是在-1~1之间, 那么我们发现r'+g'+b'=1,那么就可以通过其中两个已知数计算出另一个的强度。


在对数值归一化之后,两个变量就可以代表色彩了,于是我们就通过r' g'这两个参数画图。
于是画出了一个二维空间,x轴是r',y轴是g' 那么我们就可以成功的在色彩科学上真正科学的描述一个颜色。
我们可以把任何可见光通过图标的一个点的坐标来表示说明。


上文的CIE1931RGB色彩系统已经不错了,但是存在负数,这在计算上非常的麻烦,比如写个乘法,得先计算是正数还是负数。
于是人们就用数学的方式做了一个新的色彩空间。所以XYZ色彩空间就是一个中转站,主要目的就是简化计算。


这里简单描述下如何转换的,因为是空间转换所以我们用矩阵的方式进行。注: 这里的RGB是CIE 1931RGB 不是sRGB中的RGB数值。


这个xyz矩阵也不太美,于是人们为了计算方便有把xyz矩阵进行了归一化。


那么最终效果就是这张大家应该会比较熟悉的图, 人称色域马蹄图。也就是人眼可见范围表示, 但是我们发现图像上面好像没有亮度于是我们就在归一化的基础上,把XYZ中的Y单独拿出来与xy一起组成了Yxy色彩空间 其中的Y表示亮度 xy表示色度。
注:这里提一下 这里是Yxy色彩空间 Yxy是由XYZ色彩空间衍生



不足与补充
上述的XYZ色彩空间也不错,但是也有问题,就是色彩的分布不均匀,他们的分布色彩一些地方紧一些地方又很松,举个例子这个图的偏向绿色部分就非常平滑,然后左下角部分坐标变化小,但是色彩变化就很快。

image.png


色彩空间的定义
色彩空间至少需要满足三项重要指标
a色域(三个基色的坐标,由此形成三角形)
b白点(色域三角形中心)
cGamma(如何对三角形进行切分)
色域


白点


Gamma


首先理解下gamma并不是色彩空间,它其实只是如何对色彩进行采样的一种方式。
每次对比顶点切割,就会发现切割的方式不同会导致每次对应的色彩不一样,大家通常理解的gamma=1的情况就是指代上图这样的均匀切分,这样的好处就是方便计算。
而非均匀切割的方式就是gamma≠1。
比如我们有个常用的空间sRGB,那么sRGB的构成:
色域:sRGB首先设定了RGB三个基色的坐标
白点:sRGB也规定的白点的位置
gamma:sRGB的gamma设定≈2.2也就是说从外箱内切,先切得很细,然后逐渐变粗
Gamma详解
大家知道线性的好处也就是gamma=1的时候,可方便计算,计算机效率搞,方便理解,但是计算机存储与显示器硬件因为早期性能问题,采用的基本大部分都是gamma≈2.2的情况,但是我们目前大部分的机器都已经不是远古版本了,所以PC上的大部分游戏都会推荐使用线性空间,包括很多VFX人员都喜欢勇Linear线性空间。
于是我们根据色彩空间的定义确定,它们是由三个指标制作而成,但是它又不是定死的,我们可以自定义色彩空间。
换一个色域,换一个白点位置,换一个gamma值其实就是一个新的色彩空间了。
所以也可以存在sRGB D65 linear这类空间,所以任何色彩空间都是linear线性的,但linear本身并不是一个色彩空间。
常用色彩模型与色彩空间
色彩模型:
使用一定规则魔术(排列)颜色的方法
举例:
RGB、CMYK、LAB
色彩空间:
至少满足三个指标:色域、白点、gamma
举例:
CIE XYZ、Adobe RGB、sRGB、Japan Color 2001 Uncoated、US web Coated(后两个是基于CMYK模型建立的)


色彩空间转换
RGB2HSV:


HSV2RGB:



 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一百一十六天学习记录:C++提高:STL-string(黑马教学视频)

string基本概念 string是C风格的字符串,而string本质上是一个类 string和char区别 1、char是一个指针 2、string是一个类,类内部封装了char*,管理这个字符串,是一个char型的容器。 特点: string类内部封装了很多成员方…

PostMan+Jmeter工具介绍及安装

目录 一、PostMan介绍​编辑 二、下载安装 三、Postman与Jmeter的区别 一、开发语言区别: 二、使用范围区别: 三、使用区别: 四、Jmeter安装 附一个详细的Jmeter按照新手使用教程,感谢作者,亲测有效。 五、Jme…

【数据结构】树状数组和线段树

树状数组和线段树 下文为自己的题解总结,参考其他题解写成,取其精华,做以笔记,如有描述不清楚或者错误麻烦指正,不胜感激,不喜勿喷! 树状数组 需求: 能够快速计算区间和保证在修改…

fastadmin采坑之接口分页处理

其实不算fastadmin的代码而是thinkphp自带的分页代码 paginate函数就是自带的分页函数,开始我以为这个只能用于渲染模板不能用于接口,后面看到源代码发现请求参数带page就可以 /*** ApiTitle (获取协会会员)* ApiSummary (获取协会会员)* ApiMethod …

excel 生成sql技巧

"update 表名 set 字段名"&A2&" where 字段名"&B2&";"

【C语言进阶】程序环境和预处理

🔥博客主页:小王又困了 📚系列专栏:C语言 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、程序的翻译环境和执行环境 二、详解编译和链接 2.1翻译环境 2.2编译的过…

现代控制理论

B站学习视频https://space.bilibili.com/230105574/channel/seriesdetail?sid1569601 一.引入状态-空间表达 (本质上是使用一组向量的线性组合来表示整个系统任意物理量,也就是一个特征分解的过程) 现代控制理论的基础是 状态-空间表达方…

Emacs之实现跨程序选中自动复制功能(一百一十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

贪心算法重点内容

贪心算法重点内容 4.1部分背包 按照单位重量的价值排序 4.2最小生成树 两种算法 4.3单源最短路径 4.4哈夫曼树

自守数 C语言实现

自守数 描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 625,76^2 5776,9376^2 87909376。请求出n(包括n)以内的自守数的个数 数据范围: 1≤n≤10000 输入描述: int型整数 输出描述&#xf…

【Leetcode】54.螺旋矩阵

一、题目 1、题目描述 给你一个 m m m 行 n n n 列的矩阵 matrix,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例1: 输入:matrix =

k8s: kubectl: logs: rotate 问题

https://kubernetes.io/docs/concepts/cluster-administration/logging/ 当kubenet存放container的日志满了的时候,会发生rotate,当rotate发生的时候,是由kubectl logs 这个命令可能会出现以下两个问题: https://github.com/kubernetes/kubernetes/issues/28369 这里说,当…

Git下载与安装

文章目录 一、Git下载二、Git安装1.双击下载好的安装包进行安装2.Next3.选择Git的安装目录(不要带有中文和空格)→Next4.Next5.Next6.Next7.Next8.Next9.Next10.Next11.Next12.Next13.Next14.Next15.Next16.Install17.等待安装18.Finish19.鼠标光标放到系统桌面右击看到如下图所…

DRS 迁移本地mysql 到华为云

准备工作: 源端的IP地址(公网),用户明和密码。如果通过公网迁移,需要在安全组放通drs访问源端数据库的3306端口。目标端的IP地址,用户名和密码。 创建DRS迁移任务 创建迁移任务 登录华为云控制台。单击管…

华为eNSP:路由引入

一、拓扑图 二、路由器的配置 1、配置路由器的IP AR1: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huaw…

K8S系统监控:使用Metrics Server和Prometheus

Kubernetes 也提供了类似的linux top的命令,就是 kubectl top,不过默认情况下这个命令不会生效,必须要安装一个插件 Metrics Server 才可以。 Metrics Server 是一个专门用来收集 Kubernetes 核心资源指标(metrics)的…

一文详解Spring Bean循环依赖

一、背景 有好几次线上发布老应用时,遭遇代码启动报错,具体错误如下: Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name xxxManageFacadeImpl: Bean with name xxxManageFa…

linux网卡命名规则与修改方法

一.前言: 在早期的的操作系统中例如fedora13或者ubuntu15之前网卡命名的方式为eth0,eth1,eth2,属于biosdevname 命名规范。当然这是针对intel网卡的命名规则,对于realtek类型的网卡会命名为ens33。但是这个编号往往不一…

elevation mapping学习笔记1之Ubuntu18.04+ROS-melodic编译安装elevation mapping高程图及示例运行

文章目录 0 引言1 安装依赖1.1 grid map1.2 Eigen1.3 kindr1.4 Point Cloud Library (PCL) 2 编译和问题解决3 运行示例3.1 turtlesim3_waffle_demo3.2 simple_demo 和 Ground Truth Demo 0 引言 苏黎世开源的elevation mapping指的是苏黎世联邦理工学院(ETH Zuric…

【iVX】构建新一代互联网研发体系

低代码开发平台作为一种快速、简化应用程序开发的方法,正在越来越受到关注。今天我们来了解下 iVX —— 首个通用无代码开发平台。 那么什么是iVX呢?下边的图就比较形象了。 文章目录 低代码未来的发展方向整合硬件和AI能力 编程真的很困难吗&#xff1…