热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

色彩学学习笔记

原标题:色彩学学习笔记色彩学学习笔记可见光可见光只占电磁波谱的一小部分

原标题:色彩学学习笔记

色彩学学习笔记

可见光

可见光只占电磁波谱的一小部分

image

一个物体反射的光如果在所有可见光波长范围内是平衡的,那么对观察者来说显示为白色。然而,一个物体反射有限的可见光谱, 则物体呈现某种颜色

颜色的属性

颜色有三种属性


  • 色相/色调(Hue)

    • 颜色的主色调,如红色、蓝色

    • 由占主要比例的波长决定



  • 亮度(Value/Lightness/Brightness)

    • 颜色的明暗程度

    • 无色光的属性只有亮度



  • 色度/饱和度(Saturation/Chroma/文章来源地址30978.htmlColor Purity)

    • 颜色的纯净程度



image

色彩空间


CIE

为什么需要 CIE 色彩空间?


  • 平时我们所说的 RGB 值实际上是设备相关的,它没规定用来混合的 R、G、B 究竟是什么颜色,造成的结果是同样的 RGB 值在不同设备上会展示出不同的颜色

  • CIE 色彩空间是设备独立的,设备可以将它们自己色彩空间里的值映射到 CIE 色彩空间上,这样就提供了规范的色彩空间,用来在不同设备之间传递信息


颜色匹配实验

定义三原色,再通过颜色叠加以得到其他颜色,如果混合色和待测色达成一致,那么三原色的分量被称为待测色的三色刺激值

CIE RGB

CIE 规定了红绿蓝三原色光为标准波长为 700 nm(红色)、546.1 nm(绿色)和 435.8 nm(蓝色),再通过颜色匹配实验得到颜色匹配函数


  • 有负半轴是因为,并不能通过直接混合三原色以得到待测光,只能在待测光中加入三原色使得颜色匹配

    • 说明选择的三原色所组成的空间并不能包含所有人类能感知到的颜色




\[C(C) \equiv R(R)+G(G)+B(B)
\]

image

如果 C = 1,也就是满足 \(C=\frac{R}{R+G+B}(R)+\frac{G}{R+G+B}(G)+\frac{B}{R+G+B}(B)(3)\)

SPD(Spectral Power Distribution)是指光源的光谱功率分布。SPD 是一个曲线图,显示了特定光源产生的每个波长的光的功率(强度)

格拉斯曼定律告诉我们人类对色彩的感知(大约)是线性的


  • 对于已知 SPD 曲线 \(I(\lambda)\) 的光源,可以对颜色匹配函数求积分以得到它的三色刺激值

  • 给定两个 SPD 曲线,如果算出来的三色刺激值是相同的,则感知到的颜色也是相同的


\[ \begin{aligned}
R & =\int_0^{\infty} I(\lambda) \bar{r}(\lambda) d \lambda \\
G & =\int_0^{\infty} I(\lambda) \bar{g}(\lambda) d \lambda \\
B &amwww.yii666.comp; =\int_0^{\infty} I(\lambda) \bar{b}(\lambda) d \lambda
\end{aligned} \]

色度图

我们称 \(r=\frac{R}{R+G+B}(R)\)\(g=\frac{G}{R+G+B}(R)\)\(b=\frac{B}{R+G+B}(R)\) 为色度坐标(chromaticity coordinates),我们只要知道任意两个坐标的值,就能算出第三个坐标的值

连接各个波长的色度坐标形成光谱轨迹,将光谱轨迹内的混合色绘制出来以得到色度图

image

CIE XYZ

通过对 CIE RGB 做线性变换的到 CIE XYZ 色彩空间,定义了三个新的颜色匹配函数 \(\bar{x}(\lambda)\)\(\bar{y}(\lambda)\)\(\bar{z}(\lambda)\)

image

它有如下性质


  • 新的颜色匹配函数在所有地方都大于等于零


  • \(\bar{y}(\lambda)\) 等于光度函数(luminosity function),是表示亮度的分量

CIE XYZ 的色度图(事实上,色度图是三维曲线,我们看到的是它在 xy 文章来源地址30978.html平面上的投影):

image


  • 色度图中 E 点是白光,它被定义为 x=1/3,y=1/3,z=1/3

  • 沿着光谱轨迹能得到各种色调

  • 远离 E 点颜色的饱和度变高


CIE LAB

CIE XYZ 并不是感知统一(perceptually uniform)的色彩空间,色度图上任何两种颜色之间的欧几里德距离不能用作感知色差的统一度量,从 520nm 到 560nm 看起来都是绿色的,但从 460 纳米到 500 纳米,包含了更广泛的颜色集

CIE LAB 是一种感知统一的色彩空间


  • L 分量基本符合人类对亮度的认知


YUV

常用于视频编码的色彩空间,基于人类对亮度更加敏感这个事实设计,Y 表示亮度,UV 表示色度,每个像素都有一个 Y 采样,但一组像素会共享 U,V 采样

YUV 并不是绝对色彩空间(absolute color space)


  • 绝对色彩空间是不依赖任何外部因素就可以准确表示颜色的色彩空间,比如 CIE LAB

  • YUV 只是对 RGB 信息的编码,具体的颜色取决于采用的 RGB 三原色


sRGB

尽管 CIE XYZ 是标准色彩空间(canonical color space),但图像和设备并不会直接使用它,CIE XYZ 衍生出了许多其他色彩空间,比如 sRGB、NTSC 等

1996 年,微软和 HP 定义了标准的 RGB 原语,且白点被定义为 D65 光源,这个色彩空间被称为 standard RGB(sRGB)


  • 定义了白点意味着 sRGB 是假设了观看条件的

  • sRGB 空间是 CIE XYZ 的子空间

从 XYZ 做线性变换可以得到线性 sRGB 空间

image

从线性 sRGB 空间到 sRGB 空间还需要做伽马编码

伽马编码

人眼对亮度的感知不是线性的,对较暗的光线更敏感,但对较强的光线不是那么敏感,如果不对图像做伽马编码,就会为人类无法区分的高亮度分配太多的比特,而为人类敏感的低亮度分配太少的比特

image

因此我们会对图像信息做如下的非线性变换,称为伽马编码

\[V_{out}=AV_{in}^{\frac{1}{\gamma}}
\]

其中 \({\gamma}\) 是伽马值,sRGB 的伽马值约等于 2.2

伽马编码会用更大的区间来表示低亮度,用更小的区间表示高亮度

CRT 显示器有一个电子特性是光强和电压并不是线性的,而且表现出的关系也符合伽马编码,只不过 \({\gamma}\) 的值是负数,利用这个特性 sRGB 图像可以不做解码直接在 CRT 显示器上输出

image

色感一致性

真实场景中,物体的 SPD 反映了物体的反射特性和场景光,我们的视觉系统会去适应场景光,比如同一个苹果,在白天和傍晚的 SPD 是不同的,但我们看来却都是红色,这种现象叫色感一致性(color constancy)

image

相机的传感器并没有这种功能,因此图像处理阶段需要做白平衡


  • 因为我们的眼睛没法适应照片里的光照,只能适应你观看照片时的场景光


色温

光源色温的定义为与此光源发出相似的光的黑体辐射体所具有的开尔文温度


  • 在热力学中,黑体是一个理想化的物体,它能够吸收外来的全部电磁辐射,并且不会有任何的反射与透射。随着温度上升,黑体所辐射出来的电磁波与光线则称做黑体辐射

  • 在实际应用中,只有当光源发出的光和黑体辐射的光类似时,色温才有定义。也就是,红-橙-黄-白-浅蓝这些颜色。当讨论色温时,讨论例如绿色、紫色的色温是没有意义的

我们常常用光源的色温来描述光源

image

下图在 CIE xy 色度图中标出了不同温度下黑体光源的色度

image

CIE 定义了一组标准光源,它们可以作为真实光源的参考

光源的 SPD 同样可以转换为三刺激值,并被正则化为色度坐标,这个坐标就白点

色彩适应(chromatic adaptation)的想法就是让不同场景里的白点看起来一样

色彩适应


von Kries 模型

von Kries 模型是一种色彩适应方法

人类三种视锥细胞的反应记作 L、M、S,对于给定的刺激 \(i_r(\lambda)\),我们可以这样来计算它们

\[\begin{array}{rcl} L &=& k\int_{\lambda} \bar{l}(\lambda) i_r(\lambda) d\lambda \nonumber \\ M &=& k\int_{\lambda} \bar{m}(\lambda) i_r(\lambda) d\lambda \nonumber \\ S &=& k\int_{\lambda} \bar{s}(\lambda) i_r(\lambda) d\lambda \end{array}
\]

其中,\(\bar{l}(\lambda)\)\(\bar{m}(\lambda)\)\(\bar{s}(\lambda)\) 是三种视锥细胞的光谱灵敏度函数(spectral sensitivity function)

\(i_r(\lambda)\) 来自于

\[i_r(\lambda) = i(\lambda) r(\lambda)
\]

其中,\(i(\lambda)\) 表示光源,\(r(\lambda)\) 表示给定平面的光谱反射率(spectral reflectivity)

von Kries 模型用来预测观测条件变化后,视锥细胞的反映,观测条件的变化主要指光源的变化,假设 \(i(\lambda)\) 被另一个光源 \(i_a(\lambda)\) 替换掉,此时锥细胞的反应我们记作 \(L_a\)\(M_a\)\(S_a\)

\[\left [ \begin{array}{@{}l@{}} L_{a} \\ M_{a} \\ S_{a} \\ \end{array} \right ] = \left [ \begin{array}{@{}lll@{}} k_L & 0 & 0 \\ 0 & k_M & 0 \\ 0 & 0 & k_S \\ \end{array} \right ] \left [ \begin{array}{@{}l@{}} L \\ M \\ S \\ \end{array} \right ]
\]

比例系数通常使用 \(k_L=L_{max}a/L_{max}\)\(k_M=M_{max}a/M_{max}\)\(k_S=S_{max}a/S_{max}\),带 max 下标的符号表示给定光源下 LMS 视锥细胞对白点刺激的最大反应

虽然 von Kries 模型是在 LMS 色彩空间中定义的,但可以做 3x3 的变换以放到 XYZ 色彩空间中使用

\[\left [ \begin{array}{@{}lwww.yii666.com@{}} L \\ M \\ S \\ \end{array} \right ] = \mathbf{M} \left [ \begin{array}{@{}l@{}} X \\ Y \\ Z \\ \end{array} \right ].
\]

参考材料



  • 色域马蹄图是怎么来的?——CIE 1931 XYZ 色彩空间详解

  • CIE RGB 转 XYZ

  • Gamma_correction

  • von Kries Hypothesis

  • Understanding the In-Camera Image Processing Pipeline for Computer文章来源站点https://www.yii666.com/ Vision

来源于:色彩学学习笔记


推荐阅读
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • java.lang.Class.getDeclaredMethod()方法java.lang.Class.getDeclaredMethod()方法用法实例教程-方法返回一个Met ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • clickhouse 二(springboot+mybatis配置clickhouse,实现插入查询)
    原标题:clickhouse二(springboot+mybatis配置clickhouse,实现插入查询)开发步骤 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
author-avatar
心灵de倾斜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有