论文解读:Improving Color Reproduction Accuracy on Cameras

今天介绍一篇有关颜色准确性的文章,颜色的准确性是个有点玄妙的问题,因为人眼独特的颜色感知机制,导致人眼对不同光照下的物体有一种常恒性,简单来说,就是红色的苹果,在不同光照下,对人眼来说都是一样的红色,但是对相机来说不是这样的,相机反映的是真实的光谱性质,为了配合人眼的这种感知特性,就需要对颜色做一些校正或者变换,使得颜色在人眼看来是准确的,这个准确,不一定反映了场景的客观真实。

颜色导论

在介绍这篇文章之前,我们先简单介绍一下颜色的基本知识,我们通常说的颜色,可以简单看成是可见光的光谱,我们知道彩虹有红,橙,黄,绿,青,蓝,紫几种颜色,分别对应着不同的光谱,自然界有发光的物体,我们称为光源,比如太阳,自己会发光,还有人造光源,比如电灯什么的,也可以发光,发光体会发出不同光谱的光,除此之外,自然界的物体也会吸收光和反射光,有些物体虽然自己不会发光,但是会反射光线,这样也可以让人眼感知到,人眼是怎么感知颜色的呢,因为人眼的视网膜上,密密麻麻地分布着很多感光细胞,这些细胞,主要分成两大类,一类称为柱状细胞,一类称为锥状细胞,柱状细胞主要是感知亮度变化的,而锥状细胞就是用来感知颜色变化的,锥状细胞有三种,分别对应长,中,短三种波长的光谱,也就是我们常说的红,绿,蓝。这些感光细胞,对不同光谱的光,会产生不同的应激响应,从而得到不同的色彩感知,所以这个过程有点像个滤波器滤波,人眼的感光细胞就类似滤波器,只对特定频率的光谱会产生响应,而其他频率的光谱都被忽略掉了,所以虽然真实世界里,光谱是各种各样的,但是人眼能够感受到的只是很小的一部分。

在 20 世纪二三十年代,已经有人对人类的颜色感知进行量化的标定,最早是基于 r,g,b 三种颜色进行标定,后来改成了标准的 XYZ,基于三条光谱感知曲线,只有知道环境中光线的 SPD 曲线,就可以得到最终感知的亮度:

  • 插入图片 2, X,Y,Z 光谱感知曲线

X=∫380780I(λ)xˉ(λ)dλY=∫380780I(λ)yˉ(λ)dλZ=∫380780I(λ)zˉ(λ)dλX = \int_{380}^{780} I(\lambda)\bar{x}(\lambda)d\lambda \\ \ \\ Y = \int_{380}^{780} I(\lambda)\bar{y}(\lambda)d\lambda \\ \ \\ Z = \int_{380}^{780} I(\lambda)\bar{z}(\lambda)d\lambda \\ X=∫380780​I(λ)xˉ(λ)dλ Y=∫380780​I(λ)yˉ​(λ)dλ Z=∫380780​I(λ)zˉ(λ)dλ

再根据 XYZ 与 RGB 之间的转换关系,就能得到最终的 RGB 值。

上面介绍的是人眼对颜色的感知,总的来说就是环境中光线的 SPD 与人眼的光谱感知曲线的一个积分,而 sensor 也是有自己的感知曲线的,一般来说,sensor 感知曲线与环境中的光线 SPD 做积分,就是 sensor 对环境光线的一个响应,sensor 上的每个 pixel 也有一个光谱响应曲线,对不同光谱的光会有不同的响应,而且每个相机的 sensor 由于制造的不同,响应也有可能存在差异,所以我们看不同的相机拍摄同一个场景的时候,颜色会有一些差异,而且与人眼感知相比,也存在差异,所以说,在 ISP 里面,颜色校正是非常重要的一个环节,终极目的,就是希望能把相机 sensor 上感应的颜色与人眼感知的色彩匹配上。这也就是我们常说的白平衡校正以及颜色转换。这两步的最终目的都是为了把颜色恢复地准确。人眼有一种非常神奇的特性,就是颜色常恒性,为了将场景中的颜色与人眼感知的一致,多少研究者绞尽脑汁,到目前为止,也不能说做得特别好。

颜色的校正主要分两大块,白平衡 white balance 和颜色转换 color calibration

  • 插入图片 ISP 中的颜色校正流程,包括颜色的准确性和颜色的增强

白平衡就是为了解决颜色常恒性问题的,因为人眼在不同光照下对同一个物体的颜色感知基本是一样的,就像红色的苹果在阳光下,阴天以及日光灯下对人眼来说都是红色的,但是对相机来说,那就不是了,因为相机是完全按照真实光线的光谱与自身的光谱曲线积分得到的,反映的是客观的成像,人眼自己做了一些变化。

  • 插入图片,颜色常恒性

白平衡主要分成两部分,一部分是光照的估计,也就是我们说的色温估计,然后就是一个校正,一般来说就是三个通道乘以不同的 gain 值,因为每个不同色温下都有一个对应的校正系数,这都是提前标定出来的,所以一旦估计出了环境中的色温,就直接乘以校正系数就算完成了白平衡的校正。白平衡做完之后,一般后面会再接一个 color calibration,这步就是为了把 sensor 的 RGB 空间转换到人眼感知的 RGB 空间,我的理解是白平衡是为了消除不同光源的影响,而颜色转换是让颜色符合人眼的感知。

假设 Ccam\mathbf{C}_{cam}Ccam​ 表示相机 sensor 上三个通道对环境光谱的响应,那么其维度是 3×N3 \times N3×N,3 表示 R,G,B 三个通道,N 表示不同光谱的个数,将环境中的所有物体表示为 R\mathbf{R}R, 每一列表示物体对不同光谱光线的反射强度, 那么每一列可以表示为 ri\mathbf{r}_iri​,每一列的维度为 N,同时假设环境中的光源为 l\mathbf{l}l,那么相机 sensor 的响应可以表示为:

Φcaml=Ccamdiag(l)R\mathbf{\Phi}_{cam}^{\mathbf{l}} = \mathbf{C}_{cam} \text{diag}(\mathbf{l})\mathbf{R} Φcaml​=Ccam​diag(l)R

l\mathbf{l}l 也是一个 N 维的列向量,表示该光源在不同频率下的强度,diag 表示对角化。

而我们最终的目标是希望将相机 sensor 感知的颜色变换到人眼感知的颜色空间,如下所示:

Φxyz=CxyzR\mathbf{\Phi}_{xyz} = \mathbf{C}_{xyz} \mathbf{R} Φxyz​=Cxyz​R

为了实现这个目的,第一步就是我们说的去除光照影响,一般来说,需要求解如下的优化函数:

WF=arg min⁡WF∣∣CcamR−WFΦcaml∣∣2W_F = \argmin_{W_F} || \mathbf{C}_{cam}\mathbf{R} - W_F \mathbf{\Phi}_{cam}^{\mathbf{l}} ||^2 WF​=WF​argmin​∣∣Ccam​R−WF​Φcaml​∣∣2

WFW_FWF​ 表示使得观测到的物体在某个光照下与标准光照下的该物体的颜色误差最小,不过目前最常用的估计方法就是针对灰度物体进行测算,所以最后得到的系数矩阵是一个对角矩阵:

WD=diag(Ccaml)−1W_D = \text{diag}(\mathbf{C}_{cam} \mathbf{l})^{-1} WD​=diag(Ccam​l)−1

其中 l\mathbf{l}l 表示观测到的环境光照,WDW_DWD​ 是一个对角矩阵,与 WFW_FWF​ 是全系数矩阵不同,WDW_DWD​ 对某些颜色的像素的校正并不正确。

白平衡做完之后,接下来就是 Color space transform (CST),需要将 sensor 的 RGB 空间转换到人眼感知的色彩空间,一般都是通过标准色板来进行标定:

Tl=arg min⁡Tl∣∣CxyzR−TlWDlΦcaml∣∣2T_{\mathbf{l}} = \argmin_{T_{\mathbf{l}}} || \mathbf{C}_{xyz} \mathbf{R} - T_{\mathbf{l}}W_{D}^{\mathbf{l}} \mathbf{\Phi}_{cam}^{\mathbf{l}} ||^2 Tl​=Tl​argmin​∣∣Cxyz​R−Tl​WDl​Φcaml​∣∣2

因为这个是和环境光照的色温有关的,所以需要对不同色温下的光照进行标定。

文章中说目前常用的方法是对两种色温下的系数进行标定,一般是 2500K 和 6500K 下的色温做标定,然后再根据当前色温进行插值:

  • 插入图片,利用三个标定系数进行插值

Tl=gTl1+(1−g)Tl2T_{\mathbf{l}} = g T_{\mathbf{l}_1} + (1 - g) T_{\mathbf{l}_2} Tl​=gTl1​​+(1−g)Tl2​​

ggg 就是融合的系数。

文章里提到的一个方法,就是多增加一个标准的转换系数,比如 5000 K 的时候也先进行标定,这样似乎插值的时候会更准确一些,然后另外一种方法就是用全系数矩阵,前面介绍过,对角系数的白平衡系数矩阵对有颜色的像素的校正效果不是很好,如果能将对角系数换成全系数,那么对颜色的校正效果将会更好,文章用如下的优化方程进行优化求解:

Tfixed=arg min⁡T∣∣∑i(CxyzR−TWFliΦcamli)∣∣2T_{fixed} = \argmin_{T} || \sum_{i} ( \mathbf{C}_{xyz}\mathbf{R} - T W_F^{\mathbf{l}_i} \mathbf{\Phi}_{cam}^{\mathbf{l}_i} ) ||^2Tfixed​=Targmin​∣∣i∑​(Cxyz​R−TWFli​​Φcamli​​)∣∣2

论文解读:Improving Color Reproduction Accuracy on Cameras相关推荐

  1. 【配准论文解读】Color Point Cloud Registration with 4D ICP Algorithm

    本文是对于IEEE ICRA2011的论文<Color Point Cloud Registration with 4D ICP Algorithm>做一解读,这篇文章主要介绍了一种通过H ...

  2. 论文解读——Improving Object Detection With One Line of Code

    摘要 非极大值抑制是目标检测流程中不可分割的一部分.首先它基于检测结果对所有检测框进行分类,选择得分最高的检测框M,并抑制与M有明显重叠的所有其他检测框,这个过程被递归地应用到其余的框上.根据算法的设 ...

  3. (新型事件相机有关的论文解读)A Unifying Contrast Maximization Framework for Event Cameras

    目录 事件相机有关的论文解读之 A Unifying Contrast Maximization Framework for Event Cameras,with Applications to Mo ...

  4. 论文解读:PromptBERT: Improving BERT Sentence Embeddings with Prompts

    论文解读:PromptBERT: Improving BERT Sentence Embeddings with Prompts 一.动机 虽然BERT等语言模型有很大的成果,但在对句子表征方面(se ...

  5. 论文解读:Improving Machine Reading Comprehension with Contextualized Commonsense Knowledge

    论文解读:Improving Machine Reading Comprehension with Contextualized Commonsense Knowledge 论文下载:https:// ...

  6. 论文解读:Improving Multi-hop Question Answering over Knowledge Graphs using Knowledge Base Embeddings

    论文解读:Improving Multi-hop Question Answering over Knowledge Graphs using Knowledge Base Embeddings    ...

  7. 自监督学习(Self-Supervised Learning)多篇论文解读(下)

    自监督学习(Self-Supervised Learning)多篇论文解读(下) 之前的研究思路主要是设计各种各样的pretext任务,比如patch相对位置预测.旋转预测.灰度图片上色.视频帧排序等 ...

  8. 论文解读:基于深度相机的3D建模 2020最新综述

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨安如夏@知乎 来源丨https://zhuanlan.zhihu.com/p/299489800 ...

  9. 自监督学习(Self-Supervised Learning)多篇论文解读(上)

    自监督学习(Self-Supervised Learning)多篇论文解读(上) 前言 Supervised deep learning由于需要大量标注信息,同时之前大量的研究已经解决了许多问题.所以 ...

最新文章

  1. pandas dataframe缺失值(np.nan)处理:识别缺失情况、删除、0值填补、均值填补、中位数填补、加缺失标签、插值填充详解及实例
  2. JAVA集合(笔记)
  3. 基于node.js及express实现中间件,实现post、get
  4. 【学习生活杂谈】学习记录
  5. qweb加html文件,将本地html文件加载到Pyside QwebVi中
  6. 实战:基于RabbitMQ的TTL以及死信队列,实现延迟付款,手动补偿案例
  7. tomcat人数限制_Tomcat 七最大并发连接数的正确修改方法
  8. aopaspect区别_spring 中的aop:advisor和aop:aspect有什么区别?
  9. Windows 全新终端 Windows Terminal
  10. 安卓最好的浏览器_今日软件 | AI一键抠图、隐私保护工具、全能下载器、安卓启动器、茄子快传、迅雷、批量字符替换、傲游浏览器、全局负一屏...
  11. 四年一度的菲尔兹奖揭晓,4位数学家折桂
  12. 光盘文件导入服务器,web服务器 光盘文件
  13. 编程序,输入年份和月份,输出本月有多少天。合理选择分支语句完成设计任务。
  14. Joomla 插件 attachments 使用时出现不支持ZIP文件上传的错误
  15. c语言规定对程序中所用的变量必须,【判断题】C语言程序中要用到的变量必须先定义,然后再使用...
  16. 苹果电脑破音的解决办法
  17. No converter found for return value of type错误解决以及消息转化器简单分析
  18. python每日一题:爬虫电影的动态票房信息
  19. python 爬取生意参谋数据_Excel vba爬取生意参谋数据,原来是可以的,现在不行了,请懂的大佬给分析分析,修改下代码-ExcelVBA程序开发-ExcelHome技术论坛 -...
  20. [项目实战] 云知梦Laravel5.4电商实战项目VIP视频教程

热门文章

  1. 又该订报刊杂志了,你想定什么呢?
  2. revit sdk java api,REVIT 2016二次开发环境的搭建
  3. 鉴于Eclipse下在线安装Pydev插件所遇见的问题,及其替代的离线安装的方法
  4. Unity-使用系统字体
  5. GCD XOR UVA - 12716 ——筛法建立约数表+xor运算+数学规律
  6. 使用java自带的API实现zip解压缩
  7. 微信小游戏帧同步demo(minigame-lockstep-demo)学习笔记
  8. 基于单片机的步进电机调速系统设计(#0509)
  9. 年度总结——业精于勤,行成于思
  10. LabVIEW开发汽车惯性导航系统测试