CCM(Color Correction Matrix)的计算
sensor_RGB空间分别经过M(M =M2*M1)以及 γ(gamma) 校正完成到非线性sRGB空间。
sensorRGB空间我们称之为“源色彩空间",非线性sRGB空间称之为“目标颜色空间”,目前,我们能够得到源色彩空间的“不饱和图”对应的24色色快,也有非线性sRGB空间的“饱和图”对应的24色色快,
那么,只需要将非线性sRGB空间的图片经过反 γ 校正然后再转换到XYZ空间,
那时就可以和sensorRGB数值联立从而求M,由于M1也是已知的,故可以求得M2
多项式拟合:
sRGB(线性)=(sRGB(非线性))^γ
24矩阵:
sensor_RGB(m*n)*M(n*n)=sRGB线性
假设sensor_RGB是24个色块,每个色块分为3个颜色颜色分量
即矩阵|OriColor|(24*3)*Max(3*3)=|TarColor|(24*3)
关于MTK的CCM
【R,G,B】表示原始图像的每个像素的RGB的值,
【R',G',B'】表示经过CCM校正后后每个像素的RGB值;
M是由C11~C33组成的3*3的矩阵
其中C11+C12+C13=1;C21+C22+C23=1;C31+C32+C33=1,
是因为灰色要保证RGB三个分量必须相等,MTK的CCM中设置的是等于512
所以3*3的矩阵又可以用6个数表示,即矩阵自由度从9变为6
矩阵修改方向:
若是提高整体的饱和度,则是C11,C22,C33的值增加,其他的值相应减小
当蓝色偏紫时(红多,红色+蓝色是紫色,红多蓝多),可以减少蓝色通道中的红色分量比例(即降低C13),同时为了满足灰色依旧是灰色,需要增加红色分量,即建议增加 C11红色本身分量,而不是C12,绿色通道中的红色分量;
当绿色偏黄时(红多,红色+绿色是黄色,红多绿多),可以减少绿色通道中的红分量比例(即降低C12),同时为了满足灰色依旧是灰色,需要增加红色分量,即建议增加 C11红色本身分量,而不是C13,蓝色通道中的红色分量;
当红色偏橙时(绿多,红色+绿色是黄色,黄色+红色是橙色,绿多),可以减少红色通道中的绿色分量比例(即降低C21),同时为了满足灰色依旧是灰色,需要增加绿色分量,即建议增加C22 绿色本身分量,而不是C23,蓝色通道中的绿色分量;
当红色偏橙时(蓝少,红色+黄色是黄色,黄色+红色是橙色,红多绿多蓝少),可以增加红色通道中的蓝色分量比例(即增加C31),同时为了满足灰色依旧是灰色,需要增加蓝色分量,即建议降低C33蓝色分量中的蓝色,而不是C32,绿色分量中的蓝色;
肤色偏黄,增加绿色中的蓝分量比例(C32);
肤色偏红,增加蓝色中的红色分量比例(C13);
黄色偏红,增加蓝色中的红分量比例(C13),或者减少蓝色中的绿色分量的比例(C23),
黄色偏绿反之
CCM优化算法:
最优化算法有很多可以使用,比如MATLAB中有fmincon函数,Python中可以使用SciPy.optimize.minimize。