2.1 色彩空间

news2024/11/28 2:38:10

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.coloradmin.cn/o/793527.html

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

相关文章

Nacos开启权限认证

1.修改Nacos配置 配置文件在nacos目录的conf下 修改点: 注意:需要添加对应的数据库nacos,对应的SQL文件也是在conf目录下 2.修改bootstrap.yaml配置文件 spring:application:name: servernameprofiles:active: devcloud:nacos:username: na…

CISP-PTE与CISP-PTS:如何选择与利用

CISP-PTE和CISP-PTS是与软件测试相关的职业认证,它们在某些方面存在区别,但也有一定的联系。下面将详细介绍这两个认证的区别和联系。 区 别 CISP-PTE:培养「实际网络安全渗透测试能力」与「真实操作能力」为核心,注重所学知识的…

在nginx上部署nuxt项目

先安装Node.js 我安的18.17.0。 安装完成后,可以使用cmd,winr然cmd进入,测试是否安装成功。安装在哪个盘都可以测试。 测试 输入node -v 和 npm -v,(中间有空格)出现下图版本提示就是完成了NodeJS的安装…

Linux centos7.x系统 下没有ens33 网卡的解决方案

一、背景 安装完windows11 Centos7.9 版本的双系统之后 , 启动Centos7.9时发现没有网卡信息 , 只有ifcfg-lo网卡的信息 , 这个时候就证明没有网卡信息,或者网卡驱动不匹配(我这里是没有网卡),所以我们要重新安装 , 安装步骤如下 : 二、安装步骤 1.查…

21. MySQL基础知识

文章目录 一、索引B Tree 原理1. 数据结构2. 操作3. 与红黑树的比较 MySQL 索引1. BTree 索引2. 哈希索引3. 全文索引4. 空间数据索引 索引优化1. 独立的列2. 多列索引3. 索引列的顺序4. 前缀索引5. 覆盖索引 索引的优点索引的使用条件 二、查询性能优化使用 Explain 进行分析优…

无压力轻松使用Obsidian写newsletter

quail平台特点 拥有四大特点:开源,人工智能增强,web3和加密货币集成,超越电子邮件 开源 每个人都应该可以访问驱动其工具的代码。通过我们的服务,您可以放心地了解背后发生的事情。 人工智能增强 为了创建一个真正…

android 如何分析应用的内存(十二)——HWASan

android 如何分析应用的内存(十二) 上一篇介绍了ASan,这次介绍ASan的加强版HWASan HWASan的使用 从NDK r21和Android 10 开始,Android支持HWAsan。HWAsan仅仅支持arm64架构的设备。 系统级准备 HWASan需要系统的支持&#xf…

[C++] C++入门第二篇 -- 引用 -- 内联函数inline -- auto+for

目录 1、引用 -- & 1.1 引用的概念 1.2 引用特性 1.3 常引用 -- 权限问题 1.4 引用的使用场景 1.4.1 做参数 1.4.2 做返回值 注意 1.5 传值、传引用的效率比较 1.6 引用和指针的区别 2、内联函数 2.1 概念 转存失败重新上传取消​编辑转存失败重新上传取消​编…

“内卷之王”雪糕品牌,夏日营销如何花式出招?小红书数据分析!

酷夏已至,冰淇淋行业号称营销“内卷之王”,品牌们开始各显身手,掀起2023年的夏日冰淇淋大战。今年出现了哪些新的内容趋势?雪糕行业有哪些品牌营销趋势值得关注?笔者将通过小红书数据分析与内容洞察,带你一…

字典序排数(力扣)思维 JAVA

给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1: 输入:n 13 输出:[1,10,11,12,13,2,3,4,5,6,7,8,9] 示例 2: 输入:n 2 输…

CNNdebug尝试

这算是啥问题?? 接着根据群里大佬提供的指示,将train和validate中的nums_work改成0即可 此处因为数据已经打乱了,所以在这里就不用打乱数据,把shuffle True修改成为False 后面查看指定目录下,竟然没有这个…

HPC集群调度系统和计算系统

什么是计算云? 所谓的计算云指的是为计算业务优化的类云基础架构,它强调用云的方式解决计算问题,而不是将“计算”搬到现有的公有云或者容器云上。 目前公有云或者容器云(例如k8s)上的HPC解决方案本质上都是将现有的H…

postgres wal2json插件jsonb字段数据丢失问题解决

使用pgwal2jsondebezium进行数据同步时,发现偶尔会有jsonb字段数据丢失的问题 进行测试时发现: 1、发生数据丢失的jsonb字段长度都比较大(超过toast阈值,使用toast表存储) 2、针对发生jsonb字段丢失的数据,jsonb字段本身未发生修…

3 Linux基础篇-VMware和Linux的安装

3 Linux基础篇-VMware和Linux的安装 文章目录 3 Linux基础篇-VMware和Linux的安装3.1 安装VMware和CentOS3.1.1 VM安装3.1.2 Centos7.6的安装步骤 3.3 虚拟机基本操作3.4 安装VMtools3.5 设置共享文件夹 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。可能…

【Java】Java多线程编程基础

文章目录 1. 进程与线程1.1 进程与线程的基本认识1.1.1 进程(Process)1.1.2 线程(Thread) 1.2 为什么会有线程1.2.1 以看视频为例 2. 多线程实现2.1 Thread类实现多线程2.2 Runnable接口实现多线程2.3 Callable接口实现多线程2.3 …

C++笔记之使用普通指针和shared_ptr在堆上申请类对象的各种写法

C笔记之使用普通指针和shared_ptr在堆上申请类对象的各种写法 code review! 文章目录 C笔记之使用普通指针和shared_ptr在堆上申请类对象的各种写法1.几种不同的写法2.ChatGpt回答 1.几种不同的写法 注:使用普通指针申请堆内存,其实是应该有delete的&…

站在读者角度:10个技巧写出有价值的文章

站在读者的角度,以下是10个写出有价值的文章的技巧: 1.确定你的目标读者:在开始写作之前,确定你的目标读者是谁,这有助于你更好地针对他们的需求和兴趣来写作。 2.了解你的读者:通过调查、研究和互动&…

OA系统构建排座

目录 一.排座的介绍,作用 1.排座介绍 A.前端实现 B.数据库实现 C.后端实现 2.排座作用 A.座位预订 B.座位安排 C. 实时座位状态显示 二.利用Layui实现排座 1.基础版(通过htmlcssjs实现) A.基础版源码(html): 2.进阶版 …

flex盒子 center排布,有滚动条时,拖动滚动条无法完整显示内容

文章目录 问题示例代码解决问题改进后的效果 问题 最近在开发项目的过程中,发现了一个有趣的事情,与flex盒子有关,不知道算不算是一个bug,不过对于开发者来说,确实有些不方便,感兴趣的同学不妨也去试试。 …

算法通关村第一关-链表黄金挑战笔记|环的入口

解决链表环入口问题 文章目录 解决链表环入口问题前言链表中环的问题Hash和集合的解法:快慢指针实现解决: 解题思路:Hash或者使用集合的方式实现快慢指针(这里使用三次刚好解决) 总结 前言 提示:无论今天过…