写在前面,本文为笔者参考了很多篇博客,传感器手册,芯片手册,汇总了 ISP 可能涉及到的步骤流程,整理所得万字长文,并针对 ISP 芯片流程图总结画出了题图的 ISP流程图,如有错误轻喷。
主要包含:内部结构/控制方式 / ISP 架构方案 / ISP工作流程 / 图像接入ISP的方式 / 黑电平校正 / 镜头阴影校正 / 坏点校正 / 绿平衡 / 降噪 / 颜色插值 / 色温 / 自动白平衡 / 颜色校正 / 伽马校正 / 颜色空间变换 / 宽动态范围 / 锐化 / 自动曝光 / 自动对焦 / 串扰 / 去假彩 / 耀斑补偿 / 自动光圈 / 其他
ISP(Image Signal Process),在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始信号数据,可以理解为整个相机拍照、录像的第一步处理流程,用于处理图像信号传感器输出的图像信号。它在相机系统中占有核心主导的地位,是构成相机的重要设备。
主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正、噪声去除、坏点去除、内插、白平衡、自动曝光控制等,依赖于ISP才能在不同的光学条件下都能较好的还原现场细节,ISP技术在很大程度上决定了摄像机的成像质量,是拍照过程中的运算处理单元,其地位相当于相机的“大脑”。
使用相机和手机等设备拍照时:
ISP 通过运行在其上的 firmware(固件)对 ISP 逻辑,从而对 lens 和sensor 进行相应控制,进而完成自动光圈、自动曝光、自动白平衡等功能。
ISP 由ISP逻辑及运行在其上的Firmware组成,逻辑单元除了完成一部分算法处理外,还可以统计出当前图像的实时信息。Firmware 通过获取ISP 逻辑的图像统计信息,重新计算,反馈控制lens、sensor 和ISP 逻辑,以达到自动调节图像质量的目的。
ISP 的Firmware 包含三部分,一部分是ISP 控制单元和基础算法库,一部分是AE/AWB/AF 算法库,一部分是sensor 库。Firmware 设计的基本思想是单独提供3A 算法库,由ISP 控制单元调度基础算法库和3A 算法库,同时sensor 库分别向ISP 基础算法库和3A 算法库注册函数回调,以实现差异化的sensor 适配。
ISP firmware 架构
CPU 即中央处理器,可以运行 AF、LSC 等各种图像处理算法,控制外围设备。现代的 ISP 内部的 CPU 一般都是 ARM Cortex-A 系列的,例如 Cortex-A5、Cortex-A7。
SUB IP 是各种功能模块的通称,对图像进行各自专业的处理。常见的 SUB IP 如 DIS、CSC、VRA 等。
图像传输接口主要分两种,并口 ITU 和串口 CSI。CSI 是 MIPI CSI 的简称,鉴于 MIPI CSI 的诸多优点,在手机相机领域,已经广泛使用 MIPI-CSI 接口传输图像数据和各种自定义数据。外置 ISP 一般包含 MIPI-CSIS 和 MIPI-CSIM 两个接口。内置 ISP 一般只需要 MIPI-CSIS 接口。
通用外围设备指 I2C、SPI、PWM、UART、WATCHDOG 等。ISP 中包含 I2C 控制器,用于读取 OTP 信息,控制 VCM 等。对于外置 ISP,ISP 本身还是 I2C 从设备。AP 可以通过 I2C 控制 ISP 的工作模式,获取其工作状态等。
CPU处理器包括:AP、BP、CP。 BP:基带处理器、AP:应用处理器、 CP:多媒体加速器。这里所说的控制方式是 AP 对 ISP 的操控方式。
上文多次提到外置 ISP 和内置 ISP,这实际上是 ISP 的架构方案。它可以分为独立与集成两种形式。
外置 ISP 架构:指在 AP 外部单独布置 ISP 芯片用于图像信号处理。外置 ISP 的架构图一般如下所示:
外置 ISP 架构
外置 ISP 架构的优点主要有:
外置 ISP 架构的缺点主要有:
内置 ISP 架构:在 AP 内部嵌入了 ISP IP,直接使用 AP 内部的 ISP 进行图像信号处理。 内置 ISP 的架构图一般如下所示:
内置 ISP 架构
内置 ISP 架构的优点主要有:
使用内置 ISP 当然也有相应的不足之处: ISP 供应商往往都不能提供针对某个平台的代码/资料,而且一般都存在软件版本兼容问题,这就需要驱动开发人员付出额的经历和时间。
事实上,鉴于 ISP 的重要性,为了推广其 AP,提高其 AP 竞争力,现在 AP 内置的 ISP 也越来越强大,其性能足以满足手机市场的需求。再加上其一系列优点,现在使用内置 ISP 方案的手机越来越多。
ISP的功能比较杂,基本上跟图像效果有关的它都有份。它内部包含多个图像算法处理模块,实际情况下,不同芯片的ISP,其处理流程和模块可能会稍有不同,但是其原理、实现功能都是一样的。
目前很多相机、摄像机产品都会在镜头光路中插入一个红外截止滤光片,其作用是允许波长小于截止频率的光进入系统,而阻止波长大于截止频率的光。常用的截止频率有630nm和650nm两种,它们允许不同程度的红光进入成像系统,因此会对白平衡和颜色校正算法产生影响,所以ISP的参数配置必须要与实际选用的截止频率相配置。
目前主流的CMOS sensor几乎都是输出Bayer mosaic格式的RAW数据。Bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer(1929 –2012)发明的,拜耳阵列被广泛运用与数字图像处理领域。Bayer CFA作为最经典的阵列,它交替的使用一组(R,G),(B,G)滤镜,其中G占总像素的的1/2,R、B各占总像素的1/4,这是由于人眼对绿色更为敏感,能分辨更多的细节,同时G占据了光谱中重要且最宽的位置。
常用的Bayer格式有RGGB,、GRBG、GBRG等多种,因此需要正确配置ISP以反应sensor的数据格式。华为P30pro夜间拍摄能力较强,用到了RYYB的滤镜阵列设计。
GBRG/GRBG/RGGB
RAW数据的精度常见有8/10/12/14bit等规格。安防监控行业较多使用10/12bit精度的sensor,医疗行业则主要使用12bit以上精度sensor,单反和广电行业则主要使用14bit精度sensor。当精度高于8bit时,就会自然带来如何存储和表示数据的问题。对与一些带宽和存储资源特别紧张的场合,有些sensor会支持压缩表示以节约带宽,但是这就需要ISP能够支持相应的压缩格式,否则就需要增加格式适配处理环节,无论是采用硬件还是软件方式实现都会增加系统的复杂度和成本。
4K分辨率的图像有800W个像素,RAW格式占1600W字节,YUV422格式占1200W字节。为了减轻传输带宽和存储的压力,支持4K 以上的芯片都会在DMA上设计一个压缩算法。并进行Crop/Resize即改变图像的尺寸。当DMA向内存中写入数据时,实际进入内存的是压缩后的数据。当DMA从内存中读取数据时,用户得到的是解压缩后的数据。
使用ISP处理图像数据时有两种常用的数据接入方式,即
BLC, Black Level Correction
Black Level 是用来定义图像数据为 0 时对应的信号电平。由于暗电流的影响,传感器出来的实际原始数据并不是我们需要的黑平衡(数据不为0)。所以,为减少暗电流对图像信号的影响,可以采用的有效的方法是从已获得的图像信号中减去参考暗电流信号,那么就可以将黑电平矫正过来。
LSC, Lens Shade Correction
用于消除图像周边和图片中心的不一致性,包含亮度和色度两方面。ISP 需要借助 OTP 中的校准数据完成 LSC 功能。
由于相机在成像距离较远时,随着视场角慢慢增大,能够通过照相机镜头的斜光束将慢慢减少,从而使得获得的图像中间比较亮,边缘比较暗,这个现象就是光学系统中的渐晕。由于渐晕现象带来的图像亮度不均会影响后续处理的准确性。因此从图像传感器输出的数字信号必须先经过镜头矫正功能块来消除渐晕给图像带来的影响。同时由于对于不同波长的光线透镜的折射率并不相同,因此在图像边缘的地方,其R、G、B的值也会出现偏差,导致CA(chroma aberration)的出现,因此在矫正渐晕的同时也要考虑各个颜色通道的差异性。
常用的镜头矫正的具体实现方法是:首先确定图像中间亮度比较均匀的区域,该区域的像素不需要做矫正;以这个区域为中心,计算出各点由于衰减带来的图像变暗的速度,这样就可以计算出相应R、G、B通道的补偿因子(即增益)。实际项目中,可以把镜头对准白色物体,检查图像四周是否有暗角。
镜头阴影有两种表现形式,分别是
Luma shading,又称vignetting,指由于镜头通光量从中心向边缘逐渐衰减导致画面边缘亮度变暗的现象。
Chroma shading,指由于镜头对不同波长的光线折射率不同引起焦平面位置分离导致图像出现伪彩的现象。
画面边缘镜头能量衰减,由于镜头中都会存在多处光阑,当入射光线偏离光轴角度较大时,部分光线就会被光阑遮挡而不能参与成像,因此越靠近sensor边缘的像素接收到的曝光量就越低。
边缘像素微透镜焦点和感光面的错位,这个问题在手机sensor 上通常会更严重一些,因此设计手机sensor 的厂家会采取一些特定的方法去缓解这个问题。
找到中心点后,以中心点为原心,向周围以圆为单位补Gain,离中心点越远,补的越大。
一种常用的方法是在微透镜上做文章,即从中心像素开始,微透镜的尺寸略小于感光面的面积一点点,这样越往边缘微透镜与感光面之间的错位就越大,刚好可以补偿入射光线角度增大导致的焦点偏移,使光线可以更好地聚焦到感光面上。
不过深入研究会发现,这个补偿办法其实也是有局限的,如果sensor采用的是下图左所示的FSI工艺(前照式),从像素微观结构来看,当入射光线角度比较大时,会有较多光线与像素中的金属布线层发生吸收、散射从而产生损失,单纯移动微透镜的位置并不能有效解决这个问题。但是,如果像素采用的是背照式工艺,因为布线层在硅片的另外一侧,所以光线损失会少,补偿效果更加有效。
Vigetting是由镜头引起的现象,所以LSC校正也是针对特定镜头的。若果产品的适配镜头发生变化,原则上需要重新进行LSC校正。另外,Vigetting现象在sensor靶面较大、镜头焦距较短时表现更加明显。采用非球面镜头通常可以改善vignetting。
Chromatic Aberration Correction, Chromatic Dispersion,色差,色散
光学上透镜无法将各种波长的色光都聚焦在同一点上的现象。它的产生是因为透镜对不同波长的色光有不同的折射率(色散现象)。对于波长较长的色光,透镜的折射率较低。在成像上,色散表现为高光区与低光区交界上呈现出带有颜色的“边缘”,这是由于透镜的焦距与折射率有关,从而光谱上的每一种颜色无法聚焦在光轴上的同一点。色差可以是纵向的,由于不同波长的色光的焦距各不相同,从而它们各自聚焦在距离透镜远近不同的点上;色差也可以是横向或平行排列的,由于透镜的放大倍数也与折射率有关,此时它们会各自聚焦在焦平面上不同的位置。
除了再镜头设计时通过采用具有相同色散特性而方向相反的不同光学材料组成成对的镜片组等手段来控制色差,在ISP过程中也能处理色差,对于横向色差,通常在图像全局上进项校正,将红绿蓝三 个颜色通道调整到相同的放大倍数,一般通过标定三个颜色平面的增益来修正,为了控制标定表格的存储空间,通常只标定MxN个关键点,任意位置处的像素增益可以使用相邻四个标定关键点通过双线性插值的方法动态计算得到。这对于固定的光学镜头比较有效,但是对变焦镜头则难以适用。
DPC, Defect Pixel Correction, Bad Point Correction
所谓坏点,是指像素阵列中与周围像素点的变化表现出明显不同的像素,因为图像传感器是成千上万的元件工作在一起,因此出现坏点的概率很大。一般来讲,坏点分为三类:第一类是死点,即一直表现为最暗值的点;第二类是亮点,即一直表现为最亮值的点:第三类是漂移点,就是变化规律与周围像素明显不同的像素点。由于图像传感器中CFA的应用,每个像素只能得到一种颜色信息,缺失的两种颜色信息需要从周围像素中得到。如果图像中存在坏点的话,那么坏点会随着颜色插补的过程往外扩散,直到影响整幅图像。因此必须在颜色插补之前进行坏点的消除。
由于Sensor是物理器件,有坏点是难以避免的;而且使用时间长了坏点会越来越多。通过在全黑环境下观察输出的彩点和亮点,或在白色物体下观察输出的彩点和黑点,就可以看到无规律的散落在各处的坏点。
GB, Green Balance
由于感光器件制造工艺和电路问题,Gr,Gb数值存在差异,将出现格子迷宫现象可使用均值算法处理Gr,Gb通道存在的差异,同时保留高频信息。
还有一个说法是: Sensor芯片的Gr,Gb通道获取的能量或者是输出的数据不一致,造成这种情况的原因之一是Gr,GB通道的半导体制造工艺方面存在差异,另一方面是Microlens的存在,特别是sensor边缘区域,GB,Gr因为有角度差异,导致接收到的光能不一致。如果两者差异比较大,就会出现类似迷宫格子情况。
Denoise, Noise Reduction
研究发现,噪声在ISP流水线各模块中会不断产生、传播、放大、改变统计特性,对图像质量的影响会越来越大,而且越来越不容易控制。因此处理噪声的基本原则是越早越好,随时产生随时处理,尽可能将问题消灭在萌芽状态。
目前主流的ISP产品中一般会选择在RAW域、RGB域、YUV域等多个环节设置降噪模块以控制不同类型和特性的噪声。在YUV域降噪的方法已经得到了广泛的研究并且出现了很多非常有效的算法,但是在RAW域进行降噪则因为RAW数据本身的一些特点而受到不少限制。主要的限制是RAW图像中相邻的像素点分别隶属于不同的颜色通道,所以相邻像素之间的相关性较弱,不具备传统意义上的像素平滑性,所以很多基于灰度图像的降噪算法都不能直接使用。又因为RAW数据每个像素点只含有一个颜色通道的信息,所以很多针对彩色图像的降噪算法也不适用。
Sensor输出的RAW图像本身是携带了噪声的,光照程度和传感器问题,包括热噪声、光散粒噪声、读出噪声、固定模式噪声,是生成图像中大量噪声的主要因素。当sensor温度较高、增益较大、环境较暗的情况下各种噪声会变得更加明显,成为影响图像质量的主要因素。
FPN(Fix Pattern Noise):固定模式噪声。由于CMOS每个感光二极体旁都搭配一个ADC 放大器,如果以百万像素计,那么就需要百万个以上的 ADC 放大器,但是每个像素结构中的光电二极管的尺寸、掺杂浓度、生产过程中的沾污以及MOS场效应管的参数的偏差等都会造成像素输出信号的变化。对于给定的单个像素它是固定的。通常消除固定模式噪声采用“双采样降噪”方法,这是CMOS 感光器件特有的一种降噪方式。在光线较暗的环境下使用时,画面会有明显的噪声,这时通过对景物进行两次不同曝光率和敏感度的采样,然后将两次采样的结果进行综合处理,就可以有效解决低照度下的图像噪声问题。
Senor的感光器件包含模拟部分,所以信号中的噪声很难避免。同时, 当信号经过 ADC 时, 又会引入其他一些噪声。 另外,当光线较暗时,camera 需要提高增益才能使画面达到正常亮度,同时也放大了噪声,图像出现明显的噪点。我们在看没有经过降噪处理的图片时,会感觉到图片上浮了一层彩色雪花点。
这些噪声会使图像整体变得模糊, 而且丢失很多细节, 所以需要对图像进行去噪处理。和很多图像处理算法一样,降噪即可以在空域(spatial domain)上实现,也可以在频域(frequency domain)上实现,比较有常用频域方法有傅里叶变换,离散余弦变换(DCT),小波变换,多尺度几何分析等。随着人工智能技术的发展,近些年来还涌现了一批基于深度学习技术实现的降噪算法。后面提到的这些方法虽然都有不错的性能,但是对算力要求都比较高,并不一定适合处理高分辨率的实时视频流,所以在ISP产品中应用的并不广泛,目前适合ISP应用的降噪算法还是以经典低通滤波器的改进版本更为常见。
目前在RAW域降噪基本都需要将RAW图像按照颜色分成四个通道(R,Gr,Gb,B),然后在各个通道上分别应用滤波器进行平滑,根据滤波器的特点和复杂度大致可以分成以下几类:
除了空域上滤波,也可以结合时域进行滤波,3DNR 是结合空域滤波和时域滤波的一种降噪算法。大概思路是检测视频的运动水平,更具运动水平的大小对图像像素进行空域滤波和时域滤波的加权,之后输出滤波之后的图像
除了Sensor图像本身携带的噪声之外,图像每次会经过ISP模块的处理之后都会引入一些新的噪声,或者对原有噪声进行了放大。
以LSC模块为例,LSC校正的实质是在输入图像上乘以一个与像素位置有关的增益系数以补偿光信号的衰减,而补偿的规律是越远离图像中心的地方增益越大。根据噪声传播的基本原理,当增益系数大于1时,图像中的噪声是与信号一起被同步被放大的。另外,由于ISP所用乘法器的精度是有限的,每做一次乘法就会重新引入一次截断误差,这是新增的噪声来源,所以经LSC处理后图像的整体噪声水平会有所增加,而且在图像的边缘处表现会更加明显。
Shading固然是不好的,需要校正,但是为了校正shading而给图像引入噪声同样也不好的,所以人们需要权衡在多大程度上校正shading能够收到满意的效果。这是在主观图像质量调试阶段需要考虑的问题之一。
我们可以把这些 YUV Image Noise再分为Luminance Noise 跟Chroma Noise 二类,影像放到不同的色空间来看,就很明确分别出差异了。一张RGB空间的影像转换到YUV,我们在Y domain 下看到的即是 Luminance Noise,在UV domain 下看的就是Chroma Noise。
Chroma Noise 跟 Color Noise 是有一定差异的。Color Noise 里所形容的color,并不是单纯指影像的色彩杂讯,而是已包含亮度资讯的色彩,所以Color Noise应可以广义形容为Image Noise。而 Chroma Noise 较能明确指出chroma(彩色)部份的Noise。因此严格说来Color Noise不等于 Chroma Noise。
Chroma Noise 量化方式:
极短的快门时间配上高ISO或极短的曝光时间配上高倍数的gain后,便会产生较多的Noise,依不同设定所拍摄下影像的标准差倾向,即可分析出差异。
Demosaic是 ISP 的主要功能之一。sensor 的像素点上覆盖着 CFA(彩色滤色矩阵,Color Filter Array),光线通过 CFA 后照射到像素上。CFA 由 R、G、B 三种颜色的遮光罩组成,每种遮光罩只允许一种颜色通过,因此每个像素输出的信号只包含 R、G、B 三者中的一种颜色信息。sensor 输出的这种数据就是 BAYER 数据,即通常所说的 RAW 数据。显而易见,RAW 数据所反映的颜色信息不是真实的颜色信息。DEMOSAIC 就是通过插值算法将将每个像素所代表的真实颜色计算出来。
目前最常用的插补算法是利用该像素点周围像素的平均值来计算该点的插补值。
光线中主要包含三种颜色信息,即R、G、B。但是由于像素只能感应光的亮度,不能感应光的颜色,同时为了减小硬件和资源的消耗,必须要使用一个滤光层,使得每个像素点只能感应到一种颜色的光。目前主要应用的滤光层是bayer GRBG格式。
经过滤色板的作用之后,每个像素点只能感应到一种颜色。必须要找到一种方法来复原该像素点其它两个通道的信息,寻找该点另外两个通道的值的过程就是颜色插补的过程。由于图像是连续变化的,因此一个像素点的R、G、B的值应该是与周围的像素点相联系的,因此可以利用其周围像素点的值来获得该点其它两个通道的值。目前最常用的插补算法是利用该像素点周围像素的平均值来计算该点的插补值。
Demosaic 算法的主要难点在于,RAW域的任何一个像点(photosite)只包含一个真实的采样值,而构成像素(R,G,B)的其它两个值需要从周围像点中预测得到。既然是预测,就一定会发生预测不准的情况,这是不可避免的,而预测不准会带来多种负面影响,包括拉链效应(zipper artifacts),边缘模糊,颜色误差等。而由于彩色插值“推测式”算法,R+B时最容易推测出来的——就是Magenta洋红,就是拍照时紫边的主色。
Demosaic 拉链效应,边缘模糊,伪彩
Color Temp
所谓色温,简而言之,就是定量地以开尔文温度(K)来表示色彩。英国著名物理学家开尔文认为,假定某一黑体物质,能够将落在其上的所有热量吸收,而没有损失,同时又能够将热量生成的能量全部以“光”的形式释放出来的话,它便会因受到热力的高低而变成不同的颜色。
黑体,是一个理想化了的物体,它能够在任何温度下,吸收外来的任何波的电磁辐射,并且不会有任何的反射与透射。
在700K之下的黑体所放出来的辐射能量很小且辐射波长在可见光范围之外,看起来是黑色的。若黑体的温度高过上述的温度的话,它会开始变成红色,并且随着温度的升高,而分别有橘色、黄色、白色等颜色出现,温度越高,光色越偏蓝。当温度超过1600K时开始发白色和蓝色。当黑体变为白色的时候,它同时会放出大量的紫外线。
即黑体吸收和放出电磁波的过程遵循了光谱,其轨迹为普朗克轨迹(或称为黑体轨迹)。黑体辐射实际上是黑体的热辐射。在黑体的光谱中,由于高温引起高频率即短波长,因此较高温度的黑体靠近光谱结尾的蓝色区域而较低温度的黑体靠近红色区域。
由于人眼具有独特的适应性,使我们有的时候不能发现色温的变化。比如在钨丝灯下呆久了,并不会觉得钨丝灯下的白纸偏红,如果突然把日光灯改为钨丝灯照明,就会觉查到白纸的颜色偏红了,但这种感觉也只能够持续一会儿。
相机的传感器并不能像人眼那样具有适应性,所以如果摄像机的色彩调整同景物照明的色温不一致就会发生偏色。白平衡就是为了避免偏色的出现。
AWB, Automatic White Balance
白平衡。白平衡与色温相关,用于衡量图像的色彩真实性和准确性。ISP需要实现 AWB 功能,力求在各种复杂场景下都能精确的还原物体本来的颜色。
人类视觉系统具有颜色恒常性的特点,不会受到光源颜色的影响。实际生活中,不论是晴天、阴天、室内白炽灯或日光灯下,人们所看到的白色物体总是是白色的,这就是视觉修正的结果。人脑对物体的颜色有一定先验知识,可识别物体并且更正这种色差。 因此人类对事物的观察可以不受到光源颜色的影响。
但是图像传感器本身并不具有这种颜色恒常性的特点,获取的图像容易受到光源颜色的影响。 如白炽灯照明下拍出的照片易偏黄;而在户外日光充足则拍摄出来景物也会偏蓝。 因此,其在不同光线下拍摄到的图像,会受到光源颜色的影响而发生变化。例如在晴朗的天空下拍摄到的图像可能偏蓝,而在烛光下拍摄到的物体颜色会偏红。因此,为了消除光源颜色对于图像传感器成像的影响,自动白平衡功能就是模拟了人类视觉系统的颜色恒常性特点来消除光源颜色对图像的影响,让不同色温光线条件下白色物体,Sensor的输出都转换为更接近白色。 它会通过摄像机内部的电路调整,改变蓝、绿、红三个通道电平的平衡关系,使反射到镜头里的光线都呈现为消色。如果以偏红的色光来调整白平衡,那么该色光的影像就为消色,而其他色彩的景物就会偏蓝(补色关系)。
白平衡与色温相关,用于衡量图像的色彩真实性和准确性。简单的说,就是通过图像调整,使在各种光学条件下拍摄出的照片色彩和人眼所看到的景物色彩完全相同。
白平衡就是调整R/B增益,达到R、G、B 相等。 比较常用的AWB算法有灰度世界、完美反射法等。 灰度世界(Gray World)算法基于一个假设:平均来讲,世界是灰色的。
完美反射法基于一个假设:白色是反射率最高的颜色,直方图上RGB响应最右边的部分就代表着白色的响应。所以把RGB响应的直方图拉齐了,也就实现了白平衡。完美反射法确实听起来很完美,但是,如果图像里没有白色或者存在比较强的噪声,这个方法就不好用了。
白平衡调整在前期设备上一般有三种方式:自动白平衡,分档设定白平衡,精确设定白平衡(手动设定模式)。
CCM, Color Correction Matrix,MCT-CMX,多色温颜色矩阵矫正
颜色校正主要为了校正在滤光板处各颜色块之间的颜色渗透带来的颜色误差。
AWB已经将白色校准了,CCM就是用来校准除白色以外其他颜色的准确度的。一般颜色校正的过程是首先利用该图像传感器拍摄到的图像与标准图像相比较,以此来计算得到一个校正矩阵。该矩阵就是该图像传感器的颜色校正矩阵。在该图像传感器应用的过程中,及可以利用该矩阵对该图像传感器所拍摄的所有图像来进行校正,让色彩贴近现实、饱满、细节突出、清晰度更好。
一般情况下,对颜色进行校正的过程,都会伴随有对颜色饱和度的调整。颜色的饱和度是指色彩的纯度,某色彩的纯度越高,则其表现的就越鲜明;纯度越低,表现的则比较黯淡。RGB三原色的饱和度越高,则可显示的色彩范围就越广泛。
Gamma Correction
传感器对光线的响应和人眼对光线的响应是不同的,人眼对暗部细节比Sensor敏感,伽玛校正就是使得图像看起来符合人眼的特性 。
伽马校正的最初起源是CRT屏幕的非线性,显示器的阴极现象管(也就是物理上所说的示波管的阴极射线版)的成像扭曲引起的。由于对于输入信号的发光灰度,不是线性函数,而是指数函数,为了不使画面失真所以就用先进行校正,此之谓伽马校正。
但是实际情况是,即便CRT显示是线性的,伽马校正依然是必须的,是因为人类视觉系统对于亮度的响应大致是成对数关系的,而不是线性的。人类视觉对低亮度变化的感觉比高亮度变化的感觉来的敏锐,当光强度小于1lux时,常人的视觉敏锐度会提高100倍。比如:在一间小黑屋中每增加一盏灯,摄像机都能线性增加亮度。但是人眼在黑暗时增加一盏灯时感受明显,往后随着灯的个数增长人眼并不会有明显感受。
校正过程就是对图像的伽玛曲线进行编辑,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果,增加更多的暗部色阶,以对图像进行非线性色调编辑。
Gamma曲线是一种特殊的色调曲线,当Gamma值等于1的时候,曲线为与坐标轴成45°的直线,这个时候表示输入和输出密度相同。高于1的Gamma值将会造成输出暗化,Gamma值是用来描述显示器亮度响应的参数,它越高,显示器的亮度响应曲线就越陡峭,这意味着显示器在处理图像时会更加“敏感”,对于暗部细节的表现会更好,但同时亮部的表现就会相对较差,会导致亮部细节丢失,使图像整体变暗。低于1的Gamma值将会造成输出亮化。总之,我们的要求是输入和输出比率尽可能地接近于1。
一般情况下,当用于Gamma矫正的值大于1时,图像的高光部分被压缩而暗调部分被扩展,当Gamma矫正的值小于1时,图像的高光部分被扩展而暗调部分被压缩,Gamma矫正一般用于平滑的扩展暗调的细节。 而人眼是按照gamma < 1的曲线对输入图像进行处理的。
现在常用的伽马校正是利用查表法来实现的,即首先根据一个伽马值,将不同亮度范围的理想输出值在查找表中设定好,在处理图像的时候,只需要根据输入的亮度,既可以得到其理想的输出值。在进行伽马校正的同时,可以一定范围的抑制图像较暗部分的噪声值,并提高图像的对比度。还可以实现图像现显示精度的调整,比如从10bit精度至8bit精度的调整。
RGBToYUV,RGB2YUV ,CSM, Color Space Matrix, CSC, Color Space Conversion
Senor的输出的Raw data是RGB,但是有的处理在YUV上更方便,且YUV存储和传输时更省带宽。 YUV 是一种基本色彩空间, 人眼对亮度改变的敏感性远比对色彩变化大很多, 因此, 对于人眼而言, 亮度分量 Y 要比色度分量 U、 V 重要得多。
在YUV 家族中,有YUV444,YUV422,YUV420等格式,这些格式有些比原始RGB图像格式所需内存要小很多,这样亮度分量和色度分量分别存储之后,给视频编码压缩图像带来一定好处。 并且在YUV 色彩空间上进行彩色噪声去除、 边缘增强、后续输出转换为jpeg 图片更方便。
YCbCr 是在计算机系统中应用最多的成员, 其应用领域很广泛,JPEG、MPEG均采用此格式。一般人们所讲的YUV大多是指YCbCr,它其实是YUV 经过缩放和偏移的改动版,Y 表示亮度,Cr、Cb 表示色彩的色差,RGB输入信号红色和蓝色颜色部分与RGB信号亮度值之间的差异。
WDR, Wide Dynamic Range, DRC, Dynamic Range Correction, Tone Mapping
自然界的中光强度很宽,而人眼对高亮,极暗环境的细节分辨能力相对较窄,而摄像头记录的范围更窄,真正的HDR技术就是记录视觉范围内高亮,极暗环境的中的细节分辨率。
动态范围(Dynamic Range)是指摄像机支持的最大输出信号和最小输出信号的比值,或者说图像最亮部分与最暗部分的灰度比值。普通摄像机的动态范围一般在1:1000(60db)左右,而宽动态(Wide Dynamic Range, WDR)摄像机的动态范围能达到1:1800-1:5600(65-75db)。
宽动态技术主要用来解决摄像机在宽动态场景中采集的图像出现亮区域过曝而暗区域曝光不够的现象。简而言之,宽动态技术可以使场景中特别亮的区域和特别暗的区域在最终成像中同时看清楚。
为保证人眼看到的世界和显示器或者摄像头采集的图像的亮度范围相差无几,甚至更好,需要通过色调映射 tone mapping,将暗处和亮出细节再现。这是一种纯粹为了视觉感受而进行的处理,并非真正的HDR。
摄像机拍摄室外场景时,晴朗夏天的光照度可以达到10万~20万lux,理论上拍摄这种场景需要提供高达5000:1的动态范围,在摄像机内部则需要使用至少13位的数据才能表示5000:1的动态范围,在通用 CPU架构中使用16位整数则更加方便。由于数据在处理环节经常涉及除法、开方、指数等浮点运算,所以还需要预留若干个小数位以保持浮点精度,4位二进制小数可以提供0.0625精度,8位二进制小数可以提供0.0039精度。主流ISP方案中使用20位数据。
当图像在显示设备上输出时,普通的LDR显示器只能提供256级灰度,按数量级是100:1的动态范围。符合HDR10标准的显示器可以提供1000:1的动态范围,已经可以较好地还原自然场景的动态。如果摄像机的适配输出设备是LDR显示器,则摄像机的ISP内部需要完成从5000:1到100:1的动态范围压缩。
当WDR模块完成多帧合成(frame stitch)后,接下来就需要对数据位宽进行压缩以节约后续步骤的计算资源。比较合理的做法是采取逐级压缩策略,比如在WDR模块先压缩到12位精度,经过CCM、Gamma 等颜色处理后进一步压缩到10位精度,经过CSC模块后进行最后一次压缩得到最终的8位精度输出。
从16/20位精度压缩到12位精度的过程称为色调映射,这一步骤的目的是调整图像的动态范围,将HDR图像映射到LDR图像,并尽量保证图像细节不损失,使得图像显示出更多的信息。 DRC 模块是一个基于人眼视觉系统特性的高级局部色阶映射(多空间动态范围压缩)模块。
Tone mapping的方法将像素值在特别暗的区域拉高,在特别亮的区域拉低。 Tone mapping 有以下两种:
Sharp, Edge Enhance,边缘增强。
CMOS输入的图像将引入各种噪声,有随机噪声、量化噪声、固定模式噪声等。ISP降噪处理过程中,势必将在降噪的同时,把一些图像细节给消除了,导致图像不够清晰。为了消除降噪过程中对图像细节的损失,需要对图像进行锐化处理,通过滤波器获取图像的高频分量,按照一定的比例将高频部分和原图进行加权求和获取锐化后的图像,还原图像的相关细节。
AE, Automatic Exposure
Exposure 主要影响图像的明暗程度。不同场景下,光照的强度有着很大的差别。人眼有着自适应的能力因此可以很快的调整,使自己可以感应到合适的亮度。而图像传感器却不具有这种自适应能力,因此必须使用自动曝光功能来确保拍摄的照片获得准确的曝光从而具有合适的亮度。
AE 模块根据自动测光系统获得当前图像的曝光量,再自动配置镜头光圈、sensor快门及增益来获得最佳的图像质量。自动曝光的算法主要分光圈优先、快门优先、增益优先。
自动曝光的实现一般包括三个步骤:
在进行曝光和增益调整的过程中,一般都是变步长来调整的,这样可以提高调整的速度和精度。
增益和曝光的步长设定
在当前曝光量与目标量差别在range0以内的时候,说明当前曝光已经满足要求,不需要进行调整;差别在range1的范围内时,则说明当前曝光与要求的光照有差别,但差别不大,只需要用较小的步长来进行调节即可;当差别在range2的时候,则表明差别较大,需要用较大步长来进行调节。在实现过程中还需要注意算法的收敛性。
AF, Automatic focus
根据光学知识,景物在传感器上成像最清晰时处于合焦平面上。通过更改LENS 的位置,使得景物在传感器上清晰的成像,是 ISP focus 功能所需完成的任务。focus 分为手动和自动两种模式。 自动对焦包含 CONTRAST AF、PDAF、LASER AF 等算法。
AF算法的基本步骤是先判断图像的模糊程度,通过合适的模糊度评价函数求得采集的每一副图像的评价值, 然后通过搜索算法得到一系列评价值的峰值, 获得最佳的对焦点是一个不断积累的过程,它通过比较每一帧图像的对比度从而获得镜头移动范围内最高的评价值点,进而确定对焦距离。 最后通过电机驱动将采集设备调节到峰值所在的位置, 得到最清晰的图像。
对焦评价函数:评价函数有很多种, 主要考虑的图像因素有图像频率(清晰的图像纹理多, 高频分布较多), 还有图像的灰度分量的分布(图像对应的灰度图的分量分布范围越大,说明图像的细节较多, 反应的图像的清晰程度) 。常用的搜索算法有爬山算法,该算法也有一定的局限性,它只适用于图像本身色差较大的情况。 搜索窗口有黄金分割点对焦嵌套窗口等.
X-talk (Crosstalk),Bayer域去颜色串扰
串扰是两条信号线之间的耦合、信号线之间的互感和互容引起线上的噪声。
三种类型的串扰
spectral xtalk
electronic xtalk
spatial xtalk
上述原因导致结果都是图像在对角线上相邻两个像素的Gr和Gb value差异较大而产生不平滑的纹理状。
Anti False Color
假彩是指在一幅影像中使用与全彩不同的颜色描述一项物体。
真彩色:True Color,真彩色是指在组成一幅彩色图像的每个像素值中,有R、G、B三个基色分量,每个基色分量直接决定显示设备的基色强度产生彩色。
伪彩色:Pseudo Color,每个像素的颜色不是由每个基色分量的数值直接决定,而是把像素值当作颜色查找表(color look-up table, CLUT)的表项入口地址,去查找一个显示图像时使用的R,G,B强度值,用查找出的R,G,B强度值合成产生彩色。
假彩色:False Color,将多波段单色影像合成为假彩色影像,如landsat 7/ETM+有八个波段,用其中三个合成就是假彩色。
从实现技术上讲,假彩色与真彩色是一致的,都是R、G、B分量组合显示;伪彩色显示调用的是颜色表。
Flare offset, stray light offset
镜片的表面反射或镜筒、反光镜组的内面所引起的反射光,到达底面后造成画面整体或一部份产生了雾蒙,降低了图像的鲜锐度。镜片的镀膜及内面防反射处理的加强,固然可以大幅度地减少光斑,但被摄体的状况并不相同,不可能完全消除。
因此,在相机里面设计都是黑色的,且其内侧表明设计都是粗糙的,目前就是为了减小flare。flare如何修正?做直方图,然后每阶的亮度都往下降,这样是否会影响颜色呢?因此,flare一定要是在linear domain去做,不能在RGB domain去做。
Auto Iris
精确光圈控件P-IRIS工作原理:
P-IRIS是通过控制P-IRIS镜头中的步进电机动态精确的控制光圈大小,主要目的是设置最佳光圈位置,以便大部分镜头中心及效果最佳的部分得到使用,在此位置光学误差大大减小,从而提高图像质量。
P-IrIS需要与增益和曝光时间相配合来管理光线的微小变化从而进一步优化图像质量,使最佳光圈位置保留尽可能长的时间。但超过增益和曝光时间的调节能力时,P-IRIS再调节光圈到不同位置。
P-iris控制方法及步骤
P-IRIS想要实现的一个关键点是需要知道光圈当前的位置情况。这有两种方式,
局部对比度增强:Local Contrast Enhancement algorithm
抗频闪:AntiFlicker
去雾:AntiFog
去雨:AntiRain
丢帧策略:LostFrameStrategy
色调色饱和度控制:单独针对Hue,Saturation,Contrast,Brightness各图像分量进行调节。
直方图均衡化:Histogram。重新分布图片的亮度,使图片的亮度分布更加均匀。
图像格式转换:Data Formatter
写DMA:DMA Writer Controller