对于正常人而言,睁开眼的一刹那,便能看到五彩斑斓的世界。各种形形色色的物体不断映入我们的眼帘,刷新着我们对这个世界的感知。在遇到美好的场景后,我们通常也会以文字、图画、照片或者视频等方式将其记录下来,用作留念。就一张好的彩色照片而言,不仅需要Demosaic、AWB、CCM、Gamma、降噪、锐化等众多ISP模块的处理,还会存在人为调优处理,例如美颜、磨皮、个性色调整等。在整个ISP处理流程中,影响颜色的模块有很多,但我们可以将影响颜色的主要部分简单地抽象为如下的数学模型。
[RGB]out=([a00a01a02a10a11a12a20a21a22][rwb000gwb000bwb][RGB]in)γ\begin{gathered} \begin{bmatrix} R \\ G \\ B \end{bmatrix} _{out}= \begin{pmatrix} \begin{bmatrix} a_{00} & a_{01} & a_{02} \\ a_{10} & a_{11} & a_{12} \\ a_{20} & a_{21} & a_{22} \end{bmatrix} \begin{bmatrix} r_{wb} & 0 & 0 \\ 0 & g_{wb} & 0 \\ 0 & 0 & b_{wb} \end{bmatrix} \begin{bmatrix} R \\ G \\ B \end{bmatrix} _{in} \end{pmatrix} ^{\gamma} \end{gathered} ⎣⎡​RGB​⎦⎤​out​=⎝⎛​⎣⎡​a00​a10​a20​​a01​a11​a21​​a02​a12​a22​​⎦⎤​⎣⎡​rwb​00​0gwb​0​00bwb​​⎦⎤​⎣⎡​RGB​⎦⎤​in​​⎠⎞​γ​

   整个数学模型中涉及了WB、CCM和Gamma三个模块,这也是目前主流ISP中,会对颜色造成重要影响的三个部分。当然,现在也有许多ISP中增加了一个3D-LUT模块,用于增强个性色。此外,影响颜色的模块还有很多,比如BLC模块参数配置不正确,也会对颜色造成影响。不过这些都不是本文讨论的内容,CCM才是本文的主角。
   CCM模块通常位于ISP处理流程的第二个阶段,即RGB域阶段。全称Color Correction Matrix(即颜色校正矩阵)。主要用于将白平衡处理后的图像数据转换到标准RGB颜色空间。但经过CCM处理后的RGB数据依旧是线性的,还需要经过Gamma处理后,才能将图像数据转换到更加接近人眼效果的sRGB空间。

图1 颜色校正示意图

   由于半导体传感器的频谱响应和人眼对可见光的频谱响应存在较大差异,加之镜头结构、IR-cut filter、滤色镜中的交叉渗色等因素的影响,导致相机的色彩还原与观察者感知到的物体颜色存在很大差异。因此需要通过CCM提高颜色饱和度,使得相机拍摄的图像颜色更加接近人眼的感知效果。
   目前主流的做法是用一个3×33\times33×3矩阵将输入的RGB数据映射为全新的RGB数据。在此过程中,通过颜色校正矩阵对不同颜色进行旋转和拉伸,提高颜色饱和度,使相机采集到的图像颜色更加符合人类的审美。不过也会存在某些物体的颜色误差很大的情况,这是由于颜色校正矩阵提供的是最佳近似值,不可能面面俱到,毕竟整个颜色校正矩阵只有9个数据,不可能覆盖所有的颜色组合。
   对于颜色校正矩阵的大小为何为3×33\times33×3,是因为RGB图像有三个通道,每个通道分辨率一致,为了确保图像通道数和分辨率保持不变,故颜色校正矩阵的大小必须是3×33\times33×3。简单的讲就是颜色校正是线性组合,需要满足线性组合的规则。当然也存在3×43\times43×4的颜色校正矩阵,即在3×33\times33×3的基础上增加了3×13\times13×1的偏移量,可能是为了能够更好的提高颜色饱和度。对于这个偏移量,目前还没研究透彻。
   整个CCM模块,最为复杂的部分应该是计算颜色校正矩阵。在此过程中,我们需建立一个与imatest类似的评价体系,通常采用最小二乘法等方式找到最优的颜色校正矩阵。计算CCM时,需要满足白平衡约束,即对任何输入R=G=B的像素在输出时必须满足R’=G’=B’。由于白平衡仅能够矫正广义上的白色,无法实现颜色恒常性,因此不同色温需要不同的颜色校正矩阵。此外,ISP流程中用的Gamma不一定是固定的值,因此在调整Gamma曲线数据后,最好重新标定CCM数据。
   标定CCM时,24色卡位置最好位于图像中心位置,大小超过1/9分辨率,小于3/4分辨率最佳,这样可以降低Lens Shading对图像的影响,提高24个色卡块数据的准确性。此外,标定时还可以通过调整24色卡块的选取权重,调整色彩偏差。通过观察色差图中camera值与idea值的连线情况以及色差数据,确定标定的色彩校正矩阵是否合理。

图2 色差图

   一般而言,不论是低色温,还是高色温,颜色校正矩阵的对角线上的数据均会大于1,其他位置的数据均会靠近0,或大或小。经验老到的高手可以通过手动调整颜色校正矩阵上的数据,调整色彩偏差。由于调试经验较少,故在此没法给出手动修改矩阵的实例。对于颜色调试而言,个人认为是客观与主观的有机结合,没有最好,只有更好。

文章安利:

  1. 刘斯宁前辈的《Understanding ISP Pipeline - CCM》。
  2. 不知名作者的《Color correction matrix(色彩矩阵)的学习思考》。

   上述两篇文章既是本人想要安利的两篇关于CCM的文章,同时也是本文重要的参考文献。

个人声明:
   以上内容,纯属个人观点,不喜勿喷。未经本人同意,不得私自转载。博客中出现的代码仅供学习参考,不得有其他用途。若文中存在纰漏,或读者有更好的建议,欢迎留言探讨。也可邮箱联系:yxyx_0212@163.com

【ISP】浅析CCM相关推荐

  1. 最小二乘法在ISP CCM标定中的简介

    一.基础知识 假设我们有16幅名人脸部灰度图像,我们是否可以找到16幅脸部图像的线性组合,使得其线性组合最接近于目标脸部图像呢? 名人库 我们知道灰度图像可以用矩阵表示.假设有如下灰度图. 我们可以用 ...

  2. 【高通SDM660平台 Android 10.0】(17) --- ISP算法相关-待学习文章

    <精 高通camera结构(摄像头基础介绍)> <Android : Camera2/HAL3 框架分析> 待学习: <基于IC设计的实用ISP介绍> <IS ...

  3. sid,eld,sidd dataset介绍,eld dataste, dng图像处理

    文章目录 SID dataset 1. SID dataset 概述 2. SID 读取和显示代码 3. 一些示例 SIDD dataset ELD dataset DNG camera pipeli ...

  4. 【ISP】浅析Lens Shading

    [ISP]浅析Lens Shading 从2000年9月底摄像头首次出现在手机上算起,到如今成为诸多智能设备不可或缺的一部分,便携式手机摄像头已经走过了18年的发展历程.随着手机智能化.轻薄化的发展进 ...

  5. 【密码算法 之六】CCM 浅析

    CCM模式浅析 1. 综述 2. 加密 2.1 前置条件(Prerequisites) 2.2 输入(Input) 2.3 输出(Output) 2.4 加密流程(Steps) 3. 解密 3.1 前 ...

  6. 从FPGA到camera ISP漫谈

    从FPGA到camera ISP漫谈 参考文献链接 https://mp.weixin.qq.com/s/RBzN1Ii3_AH3omljmAByNA https://mp.weixin.qq.com ...

  7. 摄像头模组(CCM)与镀膜

    摄像头模组(CCM)与镀膜 手机镜头是有颜色的,而且不同的手机镜头颜色是不同的,有的是红色,有的是蓝色,有的还是金色. 除了手机镜头外,平时用的数码相机镜头.望远镜.眼镜等的镜片都是有颜色的.这些颜色 ...

  8. 摄像头ISP系统原理(上)

    摄像头ISP系统原理(上) ISP(Image Signal Processor),即图像信号处理器,用于处理图像信号传感器输出的图像信号.它在相机系统中占有核心主导的地位,是构成相机的重要设备. 主 ...

  9. 图像处理理论(四)——HOG, Haar, ISP

    http://antkillerfarm.github.io HOG Histogram of oriented gradients是一种用于物体检测的算子. HOG的计算步骤,如上图所示: 1.首先 ...

最新文章

  1. php保存base64数据
  2. 苹果内购和 Apple Pay
  3. 现代IM系统中的消息系统架构 - 模型篇
  4. [剑指offer] 27. 字符串的排列
  5. python随机产生10个随机数_python(random模块)取10以内的随机数
  6. 蔡崇信将担任阿里巴巴集团第一组董事
  7. 软件安全测试的几个原则
  8. 鸿蒙os2.0怎么报名,我想问一下各位,怎么报名鸿蒙os2.0
  9. windows server 2003双网卡的问题
  10. java 合并两个列表_如何在Java中合并两个列表?
  11. JAVA RSA加密解密代码范例(Base64版)
  12. 超微服务器主板型号,Supermicro超微主板X10SRL-FLGA-2011,单路入门级服务器主板
  13. Windows7下OEM中证书错误,导航已阻止解决办法
  14. burp小技巧之抓单个网站包
  15. 关于高德地图标注的那些坑
  16. β版本展示博客-第二组(攻城喵组)
  17. Android Sensor 传感器总结
  18. Kotlin 编码规约
  19. 猪呀,羊呀,送到哪里去?
  20. LeetCode——974.和可被K整除的子数组

热门文章

  1. XPC connection invalid(ios蓝牙)
  2. 打印机 “错误-正在打印”
  3. Tensorflow2中Kares自定义损失函数
  4. TikTok独立站推广教程
  5. c语言程序设计分值,计算机考试题分值分布
  6. Python GPU加速
  7. 终于可以在html上自动显示汉字拼音了
  8. 解决Python官网打不开
  9. JAVA简单的控制台模拟斗地主
  10. 个人项目记录 -- VChat