这篇文章主要提炼于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色彩空间详解 - 知乎