OpenISP 模块拆解 · 第8讲:颜色校正矩阵 (CCM)

OpenISP 模块拆解 · 第8讲:颜色校正矩阵 (CCM)

模块作用

CCM 是颜色校正矩阵,位于 CFA 后的 RGB 域。它把传感器 RGB 映射到目标 RGB 色彩空间,用于修正传感器光谱响应与标准颜色之间的差异。

openISP 实现

源码类名为 CCM(img, ccm)ccm 是 3x4 矩阵,前三列做 RGB 混合,第四列是 offset。

对每个像素:

text 复制代码
R' = (m00*R + m01*G + m02*B + m03) / 1024
G' = (m10*R + m11*G + m12*B + m13) / 1024
B' = (m20*R + m21*G + m22*B + m23) / 1024

1024 表示固定点缩放基准。配置文件默认是单位矩阵,所以默认不改变颜色。

为什么需要 CCM

传感器的 R/G/B 滤色片响应和标准 RGB 不一致,存在通道串扰。即使白平衡正确,颜色也可能不准确。CCM 通过线性组合修正颜色。

参数说明

参数 含义
ccm_00..ccm_22 3x3 颜色混合系数
ccm_03/13/23 每个输出通道 offset
/1024 固定点缩放,方便整数硬件实现

标定思路

真实 CCM 常通过拍摄标准色卡获得。流程通常是:

  1. 拍摄 RAW 并完成 BLC、AWB、CFA。
  2. 读取色卡每个色块的传感器 RGB。
  3. 与目标标准色值做最小二乘拟合。
  4. 加约束,避免负值过大或过饱和。
  5. 结合主观色彩风格微调。

读源码注意点

openISP 的 CCM 输出最后直接 astype(np.uint8),没有显式 clipping。如果矩阵输出超出 0..255,真实使用中应做饱和裁剪。

面试问答

Q1: AWB 和 CCM 的区别是什么?

AWB 是按通道增益校正光源色温,主要解决白点问题。CCM 是通道线性混合,主要解决传感器颜色空间到目标颜色空间的映射问题。

Q2: 为什么 CCM 通常在 demosaic 后?

CCM 需要完整 RGB 三通道输入。demosaic 前每个像素只有一个颜色采样,无法直接做完整 3x3 矩阵变换。

Q3: CCM 系数为什么可能有负数?

为了抵消通道串扰,某个输出通道可能需要减去其他输入通道的一部分。负系数可以提高色彩分离度,但过大会导致噪声和 clipping 风险。

Q4: CCM 会影响亮度吗?

会。虽然目标是颜色校正,但矩阵行和、offset 都会影响通道值,从而影响亮度和饱和度。所以 CCM 需要和 tone/gamma 协同调校。

Q5: 怎么判断 CCM 调得不好?

常见现象是肤色不自然、植物绿偏黄或偏荧光、天空蓝异常、某些色块饱和度过高或过低,以及不同光源下颜色不稳定。

相关推荐
几司1 天前
OpenISP 模块拆解 · 第2讲:黑电平补偿 (BLC)
isp
北山有鸟5 天前
解决香橙派没有适配ov13855的3A算法
linux·c++·相机·isp
岁月蹉跎的一杯酒6 天前
【RKAIQ ISP21】RK3568 平台 SHARP_V3 锐化增强模块详解(GC2053 实战)
isp
岁月蹉跎的一杯酒6 天前
【RKAIQ ISP21】RK3568 平台 BAYERNR_V2 Bayer 域降噪模块详解(GC2053 实战)
isp
岁月蹉跎的一杯酒7 天前
【RKAIQ ISP21】RK3568 平台 LUT3D_CALIB 三维颜色查找表模块详解(GC2053 实战)
isp
岁月蹉跎的一杯酒7 天前
【RKAIQ ISP21】RK3568 平台 CCM_CALIB 颜色校正矩阵模块参数详解(GC2053 实战)
isp
岁月蹉跎的一杯酒7 天前
【RKAIQ ISP21】RK3568 平台 DPCC 坏点校正模块参数详解(GC2053 实战)
isp
ballball~~2 个月前
ISP-Tone Mapping
图像处理·算法·isp
ballball~~2 个月前
ISP-Gamma
图像处理·算法·isp