[ISP] 人眼中的颜色

相机是如何记录颜色的,又是如何被显示器还原的? 相机通过记录RGB数值然后显示器显示RGB数值来实现颜色的记录和呈现。道理是这么个道理,但实际上各厂家生产的相机对光的响应各不相同,并且不同厂家显示器对三原色的显示也天差地别,因此要实现颜色的准确的的记录和还原需要经过一套转换和统一的过程。

颜色是人的所见所感,在整个颜色的记录和呈现的过程中,体现着以人为本的思想。

 

1. 颜色是什么

一束光中由不同波长的电磁波组成(光谱),而自然界存在各种各样的光谱(定义为集合Q)。

自然界中的光谱

人的眼睛中有三种视锥细胞(L,S,M),这三种视锥细胞对不同波长光的响应各不相同。

添加图片注释,不超过 140 字(可选)

人类通过视锥细胞响应比例的差异来识别不同光谱的"颜色"(集合S)。

添加图片注释,不超过 140 字(可选)

但是不同光谱到LSM响应的映射是个多对一的过程(Q->S是满射非单射),换言之存在不同的光谱产生一样颜色的情况(异谱同色)。

添加图片注释,不超过 140 字(可选)

因此颜色可以说是人眼中LMS的一个响应组合。(想象一下三维空间中每个点是一组LMS的响应组合代表一种颜色)

 

2. 颜色的三刺激值表示

使用不同的三元色刺激人眼可以产生各种LMS响应组合(颜色),这正是异谱同色的一个应用。而且三原色的刺激值跟LMS的影响组合存在线性一一对应的关系。

CIE从颜色匹配实验得到人眼的颜色匹配函数,使用XYZ三原色可以匹配不同的单色波长光。由于人眼对颜色感知的线性特性,对复杂的光谱可以看作是不同单波长光的叠加。

添加图片注释,不超过 140 字(可选)

忽略亮度因素,得到CIE XYZ色度图,每个颜色都可以用一个xyz刺激值来表示,色度图包含了人类所有可见颜色以及其对应的刺激值。

 

因此颜也可以使用XYZ刺激值来表示。(想象一下三维空间中的每个点是XYZ的组合代表一个颜色,它跟上面的LMS空间存在线性对应关系)

3. 相机眼中的颜色

相机在不同的感光元件上放置不同的滤光片来实现sensor对光谱差异响应,因此相机眼中的颜色是一个RGB的响应组合。

相机响应曲线

相机RGB响应跟人眼的LMS响应往往存在较大的区别,为了使其跟人眼中的颜色对应起来,需要建立一个相机RGB响应值到CIE XYZ刺激值的映射;这个过程涉及到相机颜色矫正和标定过程,且存在非线性转换关系(参见卢瑟条件)。

相机RGB与色彩校正后RGB

4. 显色呈现和还原

正如秦统一文字,CIE XYZ建立了一个人类世界中颜色的一个统一表示方法。其他一些标准颜色空间的例如sRGB,Rec2020使用了不同的三原色来表示颜色,但他们的RGB三原色刺激值都可以跟XYZ进行线性转换。

显示器拿到三原色刺激值以及其对应的色彩空间后,就可以确定这是人类眼中的哪种颜色,然后使用三种不同的光去产生一个光谱,使其可以模拟对应颜色在人眼中的响应。

 

至此一束光的"颜色"从记录再到呈现给人类的过程就结束了。

杂谈:

其实人类对颜色的识别是一个大脑高度参与的过程,大脑可能会帮你自动做白平衡操作,例如黑金/蓝白裙子心理实验。

 

参考资料:

光线与数学的魔法:相机拍到的照片颜色是怎么和人眼看到的结果吻合的? - 知乎 (zhihu.com)

CIE 1931 color space - Wikipedia

色彩理论普及 | 从十六进制编码到RGB色彩呈现 - 25学堂 (25xt.com)

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

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

相关文章

InfiniBand可靠连接(RC)模式:设计原理、核心机制与应用实践

引言 InfiniBand作为一种高性能网络互连技术,广泛应用于超算集群、分布式存储和金融交易系统等领域。其可靠连接(Reliable Connection, RC)模式以硬件级的有序性、可靠性和低延迟特性成为关键场景的首选。本文结合技术原理、机制对比和实际应…

【网络】Caddy 服务器如何提供 TLS(Transport Layer Security)(传输层安全协议)

这张图片介绍了 Caddy 服务器如何提供 TLS(传输层安全协议) 支持,确保通信的安全性。以下是对图片内容的详细分析 1. Caddy 是什么? Caddy 是一个现代化的 Web 服务器,以其简单易用和自动化的 HTTPS 支持而闻名。它内…

GHCTF web方向题解

upload?SSTI! import os import refrom flask import Flask, request, jsonify,render_template_string,send_from_directory, abort,redirect from werkzeug.utils import secure_filename import os from werkzeug.utils import secure_filenameapp Flask(__name__)# 配置…

《Python实战进阶》No21:数据存储:Redis 与 MongoDB 的使用场景

第21集:数据存储:Redis 与 MongoDB 的使用场景 摘要 在现代应用开发中,数据存储的选择直接影响系统的性能、扩展性和成本。Redis 和 MongoDB 是两种极具代表性的数据库技术,它们分别擅长解决不同场景下的问题。本文将深入探讨 Re…

【Agent】OpenManus-Prompt组件详细分析

1. 提示词架构概述 OpenManus 的提示词组件采用了模块化设计,为不同类型的智能体提供专门的提示词模板。每个提示词模块通常包含两种核心提示词:系统提示词(System Prompt)和下一步提示词(Next Step Prompt&#xff0…

蓝桥杯刷题周计划(第三周)

目录 前言题目一题目代码题解分析 题目二题目代码题解分析 题目三题目代码题解分析 题目四题目代码题解分析 题目五题目代码题解分析 题目六题目代码题解分析 题目七题目代码题解分析 题目八题目代码题解分析 题目九题目代码题解分析 题目十题目代码题解分析 前言 大家好&#…

mysql学习-常用sql语句

1、安装mysql参考网上链接,进入mysql数据库 mysql -u root -p 2、数据库操作 2.1、创建数据库 create database 数据库名 default character set utf8; 2.2、显示所有数据库 show databases; 2.3、选择数据库 use elementInfo; 2.4、删除数据库 drop database…

(全)2024下半年真题 系统架构设计师 综合知识 答案解析01

系统架构设计师第二版教程VIP课程https://edu.csdn.net/course/detail/40283 操作系统 下列选项中不能作为预防死锁措施的是 。 A. 破坏“循环等待"条件 B. 破坏“不可抢占”条件 C. 破坏“互斥”条件 D. 破坏“请求和保持”条件 答案:C 解析&…

Java泛型程序设计使用方法

Java泛型程序设计是Java语言中一项强大的特性&#xff0c;它允许你编写更加通用和类型安全的代码。以下是Java泛型程序设计的使用方法和技巧&#xff1a; 1. 基本概念 泛型类&#xff1a;可以定义一个类&#xff0c;其中的某些类型是参数化的。 public class Box<T> {pr…

LeetCode算法心得——零数组变换IV(0-1背包)

大家好&#xff0c;我是晴天学长&#xff0c;很久很久没有写算法题解了&#xff0c;今天开始转python了。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1&#xff09;统计打字方案数 给你一个长度为 n 的整数数组 nums 和一个二维数组 queries &#xff0c;其中 queries[i] [li, …

superset部署记录

具备网络条件的&#xff0c;完全可以一键部署&#xff0c;不需要折腾。网络条件不具备时&#xff0c;部署记录留存备查。 1、正常模式 详细介绍参考&#xff1a;【开源项目推荐】Apache Superset——最优秀的开源数据可视化与数据探索平台-腾讯云开发者社区-腾讯云 (tencent.c…

AI大模型完全指南:从核心原理到行业落地实践

目录 大模型技术演进脉络核心原理解析与数学基础主流大模型架构对比开发环境搭建与模型部署Prompt Engineering高阶技巧垂直领域应用场景实战伦理与安全风险防控前沿发展方向与学习资源 一、大模型技术演进脉络 1.1 发展历程里程碑 2017&#xff1a;Transformer架构诞生&…

HTB 学习笔记 【中/英】《前端 vs. 后端》P3

&#x1f4cc; 这篇文章讲了什么&#xff1f; 介绍了 前端&#xff08;客户端&#xff09; 和 后端&#xff08;服务器端&#xff09; 的区别。解释了 全栈开发&#xff08;Full Stack Development&#xff09;&#xff0c;即前端后端开发。介绍了 前端和后端常用的技术。讨论…

golang中的结构体

1.简介 go也支持面向对象编程(OOP)&#xff0c;但是和传统的面向对象编程有区别&#xff0c;并不是纯粹的面向对象语言。所以说go支持面向对象编程特性是比较准确的。go没有类(class)&#xff0c;go语言的结构体(struct)和其它编程语言的类(class)有同等的地位&#xff0c;你可…

Day 64 卡玛笔记

这是基于代码随想录的每日打卡 参加科学大会&#xff08;第六期模拟笔试&#xff09; 题目描述 ​ 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。 ​ 小明的起点是第一个车站&#xff0c;终点是最后一个车站。然…

《C语言中\0:字符串的神秘“终结者”》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 引言一、字符串的定义与存储二、\0&#xff1a;字符串的终结标志三、\0在字符串操作中的作用四、\0的陷阱与注意事项五、\0与字符串的动态分配六、总结 引言…

九、Prometheus 监控windows(外部)主机

一、监控 Windows 主机的方法 方式 1:使用 Windows Exporter Windows Exporter(wmi_exporter) 是 Prometheus 官方推荐的 Windows 监控工具,它可以采集 CPU、内存、磁盘、网络、进程、服务状态等 指标。 方式 2:使用 Node Exporter for Windows node_exporter 主要用于…

TCP/IP协议中三次握手(Three-way Handshake)与四次挥手(Four-way Wave)

TCP/IP协议中三次握手&#xff08;Three-way Handshake&#xff09;与四次挥手&#xff08;Four-way Wave&#xff09; 一、TCP三次握手&#xff08;Three-way Handshake&#xff09;二、TCP四次挥手&#xff08;Four-way Wave&#xff09;三、常见问题解答总结为什么三次握手不…

Java集成WebSocket实现消息推送,详细步骤以及出现的问题如何解决

Java集成WebSocket实现消息推送 WebSocket是一种在单个TCP连接上进行全双工通信的协议,非常适合实现实时消息推送功能。与传统的HTTP请求-响应模式不同,WebSocket建立连接后可以保持长连接状态,服务器可以主动向客户端推送数据,这使得它成为实现聊天应用、通知系统和实时数…

如何在Linux中切换用户?

Linux切换用户 在Linux系统中&#xff0c;切换用户可以通过使用su命令和sudo命令实现 1、su命令 su是switch user的缩写&#xff0c;用于切换到另一个用户。su命令的语法如下&#xff1a; su [选项] [用户名]以下是一些示例&#xff1a; # 切换到root用户 su - # 切换到指定…