CCM 调节笔记

本文详细介绍了CCM色彩校正矩阵在RGB色彩空间中的应用,包括调整不同色彩问题的解决方法,如红色过深、绿色偏嫩等,并提供了24色卡的RGB值。通过实例和调试技巧,帮助理解如何保持白色平衡并修复色彩偏差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       CCM 全称为Color Correction Matrix --色彩校正矩阵 ,它通常在RGBdomain进行,并在AWB之后。AWB主要是矫正白色,相应的其他色彩也跟着有一些变化。CCM就是保持白色不变,将其他色彩校正成真实的颜色。

         色彩校正矩阵如图所示:

        

        为了保证宝平衡不被破坏,需满足:C00 + C01 + C02 = 1 ,且C00大于等于1,C10和C20以此类推。

 

 调试小技巧:

问题现象调试方向备注
红色偏深减rg和减rb红色比例增多,相应的要增加gg,bb,则绿色和蓝色饱和度会提高
绿色更嫩减gb和减grgb越小,绿色越黄;gr越小,绿色越青
肤色偏黄加gb蓝和黄相对时,蓝色会变淡
肤色变红减br或加bgbr越小,蓝色越青
肤色偏红加brbr越大,蓝色越紫
红色偏桔减gr或加rbrg越小,红色越粉
红色偏粉加rg或减rbrg越大,红色越桔,红色系饱和度回收
黄色偏红加br或减bgbr越大,黄色越绿
黄色偏绿减br或加bgbr越小,黄色越红
绿色偏青加gr
绿色偏黄加gb蓝黄相对,蓝色变淡
蓝色变淡减gbgb越小,绿色越黄,且绿色饱和度下降,反之增加
蓝色偏青加br或减bgbr越大,蓝色越紫
蓝色偏紫减br或加bgbr越小,蓝色越青;加bg,蓝色和绿色饱和度都下降,但整体饱和度增加

 顺便附上24色卡的RGB值

 

本篇笔记属于个人总结,有什么错误欢迎大佬指正,如有雷同,纯属巧合。

 

        

 

 

 

 

<think>嗯,用户想了解颜色校正矩阵CCM的概念和实现方法。首先,我需要回顾一下相关的知识。根据提供的引用资料,CCM是ISP中的一个关键模块,用于调整颜色,使得传感器捕获的图像更符合人眼的感知。引用[1]提到CCM在Gamma前面,说明它在处理流程中的位置很重要。 颜色校正矩阵的工作原理可能涉及颜色空间的转换。比如,从传感器的RGB到标准的sRGB空间。引用[2]提到,白平衡、CCM和Gamma都是模拟人眼视物的需求,所以CCM可能基于人眼的颜色适应理论,比如von Kries的模型,这在引用[3]中也有涉及。 实现方法方面,可能需要使用色卡来采集数据,然后通过数学方法计算矩阵。比如,使用最小二乘法拟合目标颜色值。可能步骤包括数据采集、矩阵计算和优化。还要考虑色域覆盖的问题,引用[3]中的问题1提到了sRGB域的覆盖能力计算,这可能影响矩阵的有效性。 用户可能需要具体的公式,比如矩阵乘法,每个颜色通道的线性组合。例如,3x3或3x4的矩阵,是否包括偏移量。此外,是否需要考虑光照条件,或者是否需要进行非线性校正,比如Gamma校正之前的处理。 可能的问题点:如何选择色卡,如何处理不同光照下的颜色差异,矩阵的拓展方法。引用[3]中的拓展矩阵案例可能有用,比如将3x3矩阵扩展为3x4,加入偏移量,或者更高维度的处理。 需要确保回答结构清晰,分点解释概念和实现步骤,并引用提供的资料。最后生成相关问题,帮助用户深入理解。</think>### 颜色校正矩阵(CCM)的概念与实现方法 #### 1. **基本概念** 颜色校正矩阵(CCM)是图像信号处理器(ISP)中的核心模块,用于将传感器捕获的原始颜色信号转换为符合人眼感知的标准颜色空间(如sRGB)。其核心原理是通过线性变换修正颜色偏差,例如解决光照条件差异或传感器光谱响应偏差导致的色偏问题[^1][^2]。 数学上,CCM是一个$3 \times 3$或$3 \times 4$的矩阵,作用于每个像素的RGB值。例如: $$ \begin{bmatrix} R_{out} \\ G_{out} \\ B_{out} \end{bmatrix} = \begin{bmatrix} m_{11} & m_{12} & m_{13} & o_1 \\ m_{21} & m_{22} & m_{23} & o_2 \\ m_{31} & m_{32} & m_{33} & o_3 \end{bmatrix} \begin{bmatrix} R_{in} \\ G_{in} \\ B_{in} \\ 1 \end{bmatrix} $$ 其中$m_{ij}$为颜色校正系数,$o_i$为偏移量(若使用$3 \times 4$矩阵)[^3]。 #### 2. **实现步骤** **步骤1:数据采集** 使用标准色卡(如24色卡)拍摄多组图像,覆盖不同光照条件。记录传感器输出的原始RGB值(输入)与标准色卡的sRGB参考值(目标)。 **步骤2:矩阵计算** 通过最小二乘法求解最优矩阵参数。目标是最小化输入与目标颜色的差异,数学形式为: $$ \min_{M} \sum_{k=1}^{N} ||M \cdot \mathbf{c_k} - \mathbf{c_{k,ref}}||^2 $$ 其中$\mathbf{c_k}$为第$k$个颜色样本的输入RGB值,$\mathbf{c_{k,ref}}$为参考值,$M$为待求矩阵。 **步骤3:验证与优化** - **色域覆盖**:验证校正后颜色是否覆盖目标色域(如sRGB),引用提到需计算色域覆盖能力。 - **光照适应性**:针对不同光照条件调整矩阵或使用多矩阵切换。 - **非线性拓展**:可结合多项式拓展(如加入$R^2, G^2, B^2$项)提升复杂场景的校正精度。 #### 3. **关键问题与优化** - **颜色侧重**:若某些颜色(如肤色)需优先准确,可在损失函数中增加权重。 - **矩阵稳定性**:避免过拟合,需加入正则化项或约束条件(如矩阵行列式接近1)。 - **与Gamma的协同**:CCM需在Gamma校正前应用,因Gamma会破坏颜色线性关系。 #### 4. **代码示例(Python简化版)** ```python import numpy as np # 输入数据:N个样本的原始RGB和参考RGB(示例数据) input_rgb = np.array([[100, 150, 80], [200, 180, 210], ...]) # 原始传感器数据 target_rgb = np.array([[120, 140, 70], [210, 190, 200], ...]) # 参考sRGB数据 # 构建增广矩阵 [R, G, B, 1] input_aug = np.hstack([input_rgb, np.ones((input_rgb.shape[0], 1))]) # 最小二乘法求解 M (3x4矩阵) M, residuals, rank, singular_values = np.linalg.lstsq(input_aug, target_rgb, rcond=None) print("Color Correction Matrix:") print(M) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值