Color correction matrix(色彩矩阵)的学习思考
转载于:Color correction matrix(色彩矩阵)的学习思考
一张好的色彩效果图像,是gamma,AWB,CCM,动态范围以及对比度等的共同影响形成,CCM是其中很重要的一环。 为了说的更清楚,先来简单说说WB,毕竟CCM是基于WB做准了的基础上。
camera sensor的产生就是为了模仿人眼,由于人眼存在色适应性现象,在不同色温场景下,人眼中的白色总是R = G = B;而对camera sensor来说,它对不同色温的光照反应不一样,所以许多人在使用camera拍摄的时候都会遇到这样的问题:在日光灯的房间里拍摄的影像会显得发绿,在室内钨丝灯光下拍摄出来的景物就会偏黄,而在日光阴影处拍摄到的照片则莫名其妙地偏蓝,其原因就在于白平衡上,那么我们就知道白平衡所做的事情就是在不同色温场景下将图像做归一化,也就是如下将sensor响应的RGB分别乘上一个系数,使得R' = G' = B'。
R‘ = R x R_Gain
G ’ = G x G_Gain
B‘ = B x B_Gain
如果只做白平衡还无法达到人眼对color的水平,这时候就产生了CCM校准,通过3x3 的CCM的校准,可以简单做到近似人眼的水平,为什么说只能做到近似,因为本身sensor的响应范围就与人眼就不同,还有IR Cut filter的特性也让这个光谱范围缩小。另外我们使用的RGB计色系统是三维的,而一个颜色的光谱分布可以看作N维的(假如以5nm为单位,人眼可见的380nm-780nm则构成了一个81维空间)。从数学上看,3x3 的矩阵相当于一个线性变换,而在三维空间发生的线性变换显然无法精确地调整81维空间里的向量。所以说,CCM 永远只是一个近似,只是为了实时处理而采用的一个简单有效的方法。
color这东西,没有固定的标准去衡量(也并不是Imatest的Delta-E或者C越小越好,所谓“准确的不一定是好看的”)。笔者一直很认同camera tuning这个工作其实是偏艺术的,从Color correction matrix就可以看出来。CCM的校准可以看作是对颜色的旋转和拉伸,某些颜色想往左旋转,有些颜色想往右旋转,你最终调整下来,可能是某一个或者几个颜色准确,其它的就会偏的较多。好在结果还是基本可控,先以客观Delta-E或者C定大致基调,然后最终还是因客户或者个人的需求来特性化调整CCM。
问题来了,CCM如何实现特性化的调整,CCM就是一个3x3的矩阵,数据结构就是[C00,C10,C20],现在要做的就是加入系数,把color进行调整。CCM的实
[C01,C11,C21]
[C02,C12,C22]
现比较简单,就是一个简单的矩阵运算,它的困难在于如何确定矩阵的系数。我们先分析一下这个矩阵中系数的物理意义,C00表示r分量对R的影响,C01和C02分别表示g和b分量对R的影响,假设CMOS的模型完全吻合人眼模型,那么显然C00=1,C01=C02=0,实际上CMOS image sensor中的滤镜不能完全过滤掉那些不希望看到的光波,CMOS sensor感光单元所接受的光波频率普遍太宽,三种色彩出现混叠,导致图像的色彩不够鲜艳。为了消除这种混叠,CCM中的系数就具有一种普遍的规律,系数C00,C11,C22都大于1,其他的系数则都小于0或者近似0。G对R的影响要大于B对R的影响,所以C01的绝对值要比C02的绝对值大。同样,C21的绝对值要比C20的绝对值大。
总体来说CCM矩阵是基于三基色的三维模型上建立起来的,那么当我们要调整不是RGB里面的颜色呢,比如黄色,有经验的同学可能会知道,黄色是由红色与绿色等比例融合形成的颜色,并且与蓝紫是正对,那么如果要修改黄色偏红一点或者说偏橙色一点,那么我们只需加大b这一列的R就可以,也就是加大C20,或者减少b这一列的G,也就是减少C21即可,具体要调整到什么程度,看你喜欢喽。
实际应用:
对应颜色偏向大家可以参考以下这张示意图,不过要保证修改后的参数每行相加都为1哦~
最后我想分享给大家两张图,这是CIELAB 色域空间的图,右边上面是随机横切面,下面是纵切面,所有人眼敏感的颜色都可以根据这两张图通过CCM来进行调整,但是调整有无限种可能,我们只能从中耐心挑选合适的,所以CCM的调试是一种艺术性的,只有更好选择,没有最好选择.