颜色的表示和还原(一)

这篇文章主要提炼于ICCV 2019 Tutorial: Understanding Color and the In-Camera Image Processing Pipeline for Computer Vision。里面深入浅出地讲解了很多ISP中的基础知识,这里主要对颜色相关的部分做一点总结。

假设不成立了

相机经常被简单地看作是衡量光线的设备light-measuring device,而图像被看作是辐射量化后的结果。这一假设在HDR,图像匹配,shape from shading等领域都被认为成立。

但实际上相机尤其是数码相机对进入相机的光线做了很多处理,都是为了生成更符合人眼审美的图像visually pleasingphotographs。佳能,索尼的相机在同一参数下得到的照片色彩有不同的风格。而不用说后期的软件阶段的PS,在硬件阶段就发生了很多操作(on board photo-finishing):

所以HDR一般使用raw数据,因为raw数据是线性的,是和曝光量成正比的,或者通过建模从rgb图恢复线性rgb。

颜色是波长

牛顿爵士通过色散实验证明了日光是不同的颜色混合,而现在我们知道不同颜色的光波长不同。

对于人眼来说,人眼细胞分为锥状细胞cone和杆状细胞rod,前者负责感应颜色,后者对亮度更敏感,处理暗处的环境。

但是cone只有三种细胞,且这三种细胞的感应曲线不是冲激型的,这意味着同一个细胞对不同波长都有响应。三种感应曲线进一步叠加得到最终人眼的感应曲线。而物体的辐射波长也是有一定带宽的,这就造成不一样的波长输入,比如卷心菜和绿色墨水的辐射,在人眼看来可能是一样的色彩,称为metamers。

 Spectral power distribution (SPD)用来表示辐射的波长的分布情况。

颜色分解组合

前面的三种颜色刺激就是Tristimulus color theory。在此基础上,Grassman’s Law进一步表明了任意颜色是三原色的线性加权组合,这三种基本颜色就像是单位正交基一样,张成了颜色空间。

对绿色最敏感

通过“flicker photometry”实验,发现人眼对绿色很敏感,绿色只需要很低的强度就能被人识别到。实验把某一波长的光和refernce光以17Hz的频率交替打在背景板上,逐步加强实验波长光线的强度,直至人眼感觉不到闪烁。所需强度越小说明对该波长越敏感。可以看到,绿色所需的强度是最小的。

CIE1931 RGB

既然任意波长的光都可以分解为RGB三原色,那么遍历各个单色波长,可以得到三原色对应的三个权重参数。

国际照明委员会在1931年采用了700nm的红,546.1nm的绿,435.8nm的蓝作为三原色,邀请了300多名观察者重新做了颜色匹配实验,最终得到的实验数据.

需要注意的是有时候只靠融合三原色无法得到和test color相近的颜色,这时需要把颜色分量叠加在test color上,这就相当于RGB的系数是负数,所以最终的权重曲线有负数:

CIE1931 XYZ

CIE RGB由于有负数的存在,不方便人理解。但如果重新选取RGB基准色,重新做颜色匹配实验又未免有点麻烦。CIE做法是基于CIE RGB推出了XYZ,可以认为是将RGB的基向量变换得到了新的基向量XYZ。

 这样就可以得到光谱中每种单色光在XYZ坐标系下的坐标。此时xyz下已经没有了负数:

色品图和马蹄图

rgb的权重归一化之后就得到了色品坐标:

又因为三个色品坐标和为1,所以可以只考虑r和g的色品坐标,得到一个二维的图:

 和之前一样,r分量有相当大的一部分落在负数象限。还可以看到实际可取的取值范围是马蹄形曲线,如果选择3个点的连线将马蹄形包含起来,那么这三个点就可以作为新的基,可以避免权重负数的情况。可以看到,红色线段就是我们最终的选择。

首先观察到XY线段表示的是520~700处r与g的近似线性关系,此时在RGB曲线上可以看到b=0.

颜色匹配包含了亮度的匹配。亮度方程Y=r+4.5907g+0.0601b,因为对绿色敏感,所以g的取值更高。令亮度方程Y=r+4.5907g+0.0601b=0=r+4.5907g+0.0601*(1-r-g),可以得到XZ所在的直线。

最后,选取的为波长503nm出的点相切的直线。最终得到了XYZ。所以就得到了基RGB到XYZ的变换矩阵。

reference:

https://zhuanlan.zhihu.com/p/137639368

聊聊颜色的技术实现(二)—— CIE 1931 XYZ系统 - 简书

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

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

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

相关文章

STM32学习计划

前言: 这里先记录下STM32的学习计划。 2024/05/08 今天我正在学习的是正点原子的I.MX6ULL APLHA/Mini 开发板的 Linux 之ARM裸机第二期开发的视频教程,会用正点原子的I.MX6ULL开发板学习第二期ARM裸机开发的教程,然后是学习完正点原子的I.M…

Mybatis基础操作-删除

Mybatis基础操作-删除 删除 package com.itheima.mapper;import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper;Mapper //在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象…

QT:QML与C++交互

目录 一.介绍 二.pro文件添加模块 三.h文件 四.cpp文件 五.注册 六.调用 七.展示效果 八.代码 1.qmlandc.h 2.qmlandc.cpp 3.main.cpp 4.qml 一.介绍 在 Qt 中,QML 与 C 交互是非常重要的,因为它允许开发人员充分利用 QML 和 C 各自的优势&…

我21岁玩“撸货”,被骗1000多万

最近,撸货业界内发生了一些颇受瞩目的事件。 在郑州,数码档口下面抢手团长跑路失联,涉及金额几百万,在南京,一家知名的电商平台下的收货站点突然失联,涉及金额高达一千多万,令众多交易者震惊不已…

用scp将文件夹从一个服务器备份到另一个服务器

用scp将文件夹从一个服务器备份到另一个服务器 问题描述解决办法 问题描述 公式服务器要回收了,如何将数据备份到另一个服务器上。 解决办法 代码如下 scp -P 32660 -r /path/of/the/original/file username10.258.36.187:/path/of/the/target/filescp -P 目标…

YOLOv8改进 | 图像修复 | 适用多种复杂场景的全能图像修复网络AirNet助力YOLOv8检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是一种适用多种复杂场景的全能图像修复网络AirNet,其由对比基降解编码器(CBDE)和降解引导修复网络(DGRN)两个神经模块组成,能够在未知损坏类型和程度的情况下恢复受…

Java | Leetcode Java题解之第92题反转链表II

题目: 题解: class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {// 设置 dummyNode 是这一类问题的一般做法ListNode dummyNode new ListNode(-1);dummyNode.next head;ListNode pre dummyNode;for (int i 0; …

【SQL】SQL常见面试题总结(3)

目录 1、聚合函数1.1、SQL 类别高难度试卷得分的截断平均值(较难)1.2、统计作答次数1.3、得分不小于平均分的最低分 2、分组查询2.1、平均活跃天数和月活人数2.2、月总刷题数和日均刷题数2.3、未完成试卷数大于 1 的有效用户(较难&#xff09…

蓝桥杯 EDA 组 历届国赛真题解析

一、2021年国赛真题 1.1 CN3767 太阳能充电电路 CN3767 是具有太阳能电池最大功率点跟踪功能的 4A,12V 铅酸电池充电管理集成电路。 最大功率点应指的是电池板的输出电压,跟踪电压其做保护。当然 CN3767 也可以直接使用直流充电,具体可以阅读…

ROS 2边学边练(49)-- 生成URDF文件

前言 大多数机器人学家都在团队中工作,这些团队中往往包括机械工程师,他们负责开发机器人的CAD模型。与手动创建URDF(统一机器人描述格式)文件不同,可以从许多不同的CAD和建模程序中导出URDF模型。这些导出工具通常…

[POJ-1321]棋盘问题

题源:POJ-1321 深搜板子题&#xff0c;非常基础&#xff0c;难度不大 思路1&#xff1a;广搜行 深搜列 #include<iostream> #include<cstring> using namespace std; const int MAX9; int a,b,ans; char m[MAX][MAX]; //深搜列&#xff0c;广搜行 bool h[MAX]; v…

DS高阶:跳表

一、skiplist 1.1 skiplist的概念 skiplist本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样的&#xff0c;可以作为key或者key/value的查找模型。skiplist是由William Pugh发明的&#xff0c;最早出现于他在1990年发…

Python学习之路 | Python基础语法(一)

数据类型 Python3 中常见的数据类型有&#xff1a; Number&#xff08;数字&#xff09;String&#xff08;字符串&#xff09;bool&#xff08;布尔类型&#xff09;List&#xff08;列表&#xff09;Tuple&#xff08;元组&#xff09;Set&#xff08;集合&#xff09;Dict…

鸿蒙HDC命令行工具:模拟操作

模拟操作 uinput用于输入模拟操作&#xff0c;其命令帮助手册为&#xff1a; > hdc shell uinput --help Usage: uinput <option> <command> <arg>... The option are: -M --mouse //模拟鼠标操作 commands for mouse: -m <dx> <d…

【Image captioning】基于检测模型网格特征提取——以Sydeny为例

【Image captioning】基于检测模型网格特征提取——以Sydeny为例 今天,我们将重点探讨如何利用Faster R-CNN检测模型来提取Sydeny数据集的网格特征。具体而言,这一过程涉及通过Faster R-CNN模型对图像进行分析,进而抽取出关键区域的特征信息,这些特征在网格结构中被系统地…

1金融风控相关业务介绍

金融风控相关业务介绍 学习目标 知道常见信贷风险知道机器学习风控模型的优势知道信贷领域常用术语含义1 信贷&风控介绍 信贷业务,就是贷款业务,是商业银行和互联网金融公司最重要的资产业务和主要赢利手段 通过放款收回本金和利息,扣除成本后获得利润。贷款平台预测有…

java中什么是方法的返回值?方法有哪几种类型?

在Java中&#xff0c;方法的返回值是指方法执行后返回给调用者的结果。返回值可以是任何数据类型&#xff0c;包括基本数据类型&#xff08;如int、float&#xff09;和引用数据类型&#xff08;如String、对象&#xff09;。返回值的主要作用是将方法执行的结果传递给调用该方…

springboot集成dubbo实现微服务系统

目录 1.说明 2.示例 3.总结 1.说明 dubbo官网&#xff1a;https://cn.dubbo.apache.org/zh-cn/ Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;支持多种语言&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实…

什么是Vue.js? Vue.js简介

什么是Vue.js? Vue.js简介 Vue.js是一种用于构建用户界面的前端框架。它是目前非常流行的JavaScript框架之一&#xff0c;被广泛应用于单页应用和响应式网页开发。 Vue.js具有以下特点和优势&#xff1a; 轻量级&#xff1a; Vue.js的文件体积很小&#xff0c;加载速度快&…

代码随想录--链表--反转链表

题目 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 如果再定义一个新的链表&#xff0c;实现链表元素的反转&#xff0c;其实这是对内存空间的浪费。 其实只需要改变链表的next指针的…