前言: 研究ISP算法是一件充满乐趣的事情,原因在于ISP算法没有标准答案,任何ISP算法都没有一个标准协议,每个人都可以自由发挥自己的想象力,目的只有一个,让人眼看得舒服,大家看着好,才是真的好。每个人的想象力各不相同,算法复杂度也是无穷尽,评价ISP算法的优劣,主要就是一个性价比:在一定复杂度要求的条件下,达到最好的图像质量。在学习ISP相关的paper的时候,要关注的重点是算法的原理,或者说出发点,而不是计算公式,因为公式中通常都是复杂运算,难以实际用起来,在理解了原理之后,可以找近似的替代算法来达到相近的效果。 从视觉感受来分,我把ISP大致分成亮度,色彩和细节三个部分。亮度是指对图像整体的亮度调整,涉及到的算法有自动曝光Auto Exposure,黑电平校正Black Level Correction,镜头阴影校正Lens Shading Correction,Gamma,High Dynamic Ranger等。涉及到色彩的有白平衡Auto White Balance,色彩校正Color Correction Matrix,饱和度Saturation,色相Hue等。细节的算法主要的去噪Denoise,插值interpolation,缩放zoom,边缘增强edge enhance等。还有一些其他相对特殊的算法,例如自动对焦Auto Focus,防闪烁anti-flick等。一个简化的ISP算法框架如下图。
Figure 0.1 ISP简单框架
1.图像数据格式 图像format有:Bayer pattern, RGB, YUV, YCbCr, JPEG, HSI, HSV, Lab, CMY等。各种Format有其各自的特性,适用于不同的场合。有些format之间可以相互转换,图像质量没有任何变化,有一些转换则会损失一些图像质量。ISP各种算法,在不同图像format中处理的复杂度有较大的差别,效果也会有所不同,大部分ISP算法都有适合自己的format,所以各家的ISP 框架都类似。 从CMOS image sensor输出的图像通常是bayer pattern,也常被称为raw data。Bayer pattern每个pixel只有一个color分量,如figure 1.1。每个方格表示一个pixel,Green分量占了1/2的pixel,red和blue各占1/4的pixel。数据从图像的左上角开始,按照从左往右,从上往下的方向,逐个pixel传输。每个pixel通常是8-bit~12-bit的精度。
Figure1.1.1 bayer pattern
Figure 1.1.2 RGB色彩空间
YUV是一种常见的色彩空间,Y表示亮度,U表示蓝色色调,V表示红色色调。它和RGB之间可以相互转换,转换的计算方法在不同的参考书籍中会有差异。我们参考微软给出的一组计算公式,R/G/B/Y/U/V都用8 bits表示:
1.3 YCbCr YCbCr和YUV非常相似,两个Y的意义相同,Cb和U的意义相同,Cr和V的意义相同,二者只是在转换公式的系数略有差异,这很容易导致混淆。ITU-R BT.601给出计算公式如下: Y=0.299R +0.587G +0.114B 不论是YUV还是YCbCr(BT.601/BT.709),各个分量代表的实际物理意义是近似的,所以在下面的叙述中,除非特殊声明,一般认为二者是等价的,不再区分。
Figure1.3.1 YUV的三种format
1.4 JPEG JPEG是最常用的图像压缩标准。图像首先需要转换成YCbCr format。JPEG压缩是对8x8方块中的数据进行。其过程包括DCT,Quantification和Huffman encode。 其中最核心的是量化表,量化系数Qp越小,图像质量越好,但是图像size也越大,反之Qp越大,size越小,质量越差,会出现马赛克,重影等现象。 HSI是根据人眼视觉模型建立的一种色彩空间。H是hue,即色调(色相),是一个角度,取值在00~3600之间。S是saturation,即饱和度,取值在0~1之间。I是intensity,即亮度。HSI 和RGB的转换公式如下:
Figure 1.5.1 (B)线条示意图:圆锥上亮度、色度和饱和度的关系。 (C)纵轴表示亮度:亮度值是沿着圆锥的轴线度量的,沿着圆锥轴线上的点表示完全不饱和的颜色,按照不同的灰度等级,最亮点为纯白色、最暗点为纯黑色。 (D)圆锥纵切面:描述了同一色调的不同亮度和饱和度关系。 (E)圆锥横切面:色调H为绕着圆锥截面度量的色环,圆周上的颜色为完全饱和的纯色,色饱和度为穿过中心的半径横轴。
这里I也表示为亮度,和Y的概念相同,但是出发点是不一样的。这里I仅仅是RGB三个分量的平均值,定义这个模型的美国色彩学家孟塞尔(H.A.Munseu)显然在这里偷了个懒,YCbCR定义的Y是根据人眼对RGB三种颜色的敏感度差异,分别对RGB选取了不同的权重系数: Y=0.299R +0.587G +0.114B 作为一个有经验的ISP算法工程师,是不会用这个I来做任何运算的。HSI模型的优点在于定义了Hue和Saturation这两个概念。在这个模型中,随着Hue的角度变化,色彩呈现出超出人脑既有感受经验的光怪陆离的变化,让人耳目一新,类似电影特效一般,在实际中一点用也没有。Saturation表示图像色彩的鲜艳程度,虽然计算公式有点粗糙,但概念比较清晰也比较实用。还记得我们之前说过像素级的ISP算法不能有复杂的运算,这里有除法,三角函数,开根号等,所以在ISP算法框架中是不会有HSI 模型的,不过其Hue和Saturation概念是很有意义的,我们可以在YUV空间来模拟这两种效果。
1.6 CMY 彩色印刷或彩色打印的纸张是不能发射光线的,因而印刷机或彩色打印机就只能使用一些能够吸收特定的光波而反射其它光波的油墨或颜料。油墨或颜料的三基色是青(Cyan)、品红(Magenta)和黄(Yellow),简称为CMY。
这里值得注意的是C/M/Y分别是R/G/B的补色。所谓补色就是下图中任意一条直径两端的两种颜色,互为补色。
Figure1.6.1 1.7 CIE色度模型 国际照明委员会(CIE,Commission Internationale de L'Eclairage / International Commission on Illumination)的色度模型是最早使用的模型之一。它是三维模型,其中,x和y两维定义颜色,第3维定义亮度。CIE 在1976 年规定了两种颜色空间。一种是用于自照明的颜色空间,叫做CIE LUV。
Figure 1.7.1 CIE 1976 Lu’v’色度图 另一种用于非自照明的颜色空间,叫做CIE 1976 L*a*b*,或者叫CIE LAB。CIE LAB 系统使用的坐标叫做对色坐标(opponent color coordinate)。CIELAB 使用b*, a *和 L*坐标轴定义CIE 颜色空间。其中,L*值代表光亮度,其值从0(黑色)~100(白色)。b*和a*代表色度坐标,其中a* 代表红-绿轴,b* 代表黄-蓝轴,它们的值从0到10。
a*= b* = 0表示无色,因此L* 就代表从黑到白的比例系数。使用对色坐标(opponet color coordinate)的想法来自这样的概念:颜色不能同时是红和绿,或者同时是黄和蓝,但颜色可以被认为是红和黄、红和蓝、绿和黄以及绿和蓝的组合。 CIE XYZ 是国际照明委员会在1931 年开发并在1964年 修订的CIE 颜色系统(CIE Color System),该系统是其他颜色系统的基础。它使用相应于红、绿和蓝三种颜色作为三种基色,而所有其他颜色都从这三种颜色中导出。通过相加混色或者相减混色,任何色调都可以使用不同量的基色产生。CIE 1931 色度图(CIE 1931 Chromaticity Diagram),如Figure 1.1.8.3所示,图(b)是它的轮廓图。图(a)中的A点在色度图上的坐标是x =0.4832,y =0.3045,它的颜色与红苹果的颜色相匹配。
Figure 1.7.3 这几种模型在ISP计算中没有用到,不过在测试或者调校图像质量的时候会用作参考。 1.8 小结 以上介绍了几种色彩模型,在ISP中用到的只有Bayer pattern,RGB,和YUV/YCbCr。下一章将开始介绍亮度相关的function。
|
|