#灵感# 摆烂时间太长了,感觉知识忘光光了。重新学习,常学常新。
因为公司文档都不让摘抄、截取,所以内容是工作的一些自己记录和网络内容,不对的欢迎批评指正。
ISP是Image Signal Processor 的简称,也就是图像信号处理器。
ISP内部包含 CPU、SUP IP、IF 等设备,事实上,可以认为 ISP 是一个 SOC(system of chip),可以运行各种算法程序,实时处理图像信号。
ISP 工作机制:
lens 将光信号投射到sensor 的感光区域后,sensor 经过光电转换,将Bayer 格式的原始图像送给ISP,ISP 经过算法处理,输出RGB空间域的图像给后端的视频采集单元。在这个过程中,ISP通过运行在其上的firmware(固件)和ISP逻辑,从而对lens 和sensor 进行相应控制,进而完成自动光圈、自动曝光、自动白平衡等功能。
ISP 由ISP逻辑及运行在其上的Firmware组成,逻辑单元除了完成一部分算法处理外,还可以统计出当前图像的实时信息。Firmware 通过获取ISP 逻辑的图像统计信息,重新计算,反馈控制lens、sensor 和ISP 逻辑,以达到自动调节图像质量的目的。
PQ Tools 工具通过网口或者串口完成对ISP 的在线图像质量调节。(IPC和UVC一般是在线调整,手机一般是先采图,再离线调节)
先看一个手机流程
再看一个MTK的仿真流程:
再看一个流程:
再来一个流程:(我的文章,就多贴几个流程,方便对比)
好了,总结以上4个流程,基本是:
DPC——RNR——BLC(OB)——(DGN)——LSC——AWB——LTM——DMS(RNR)——CCM——gamma——color conversion——YNR——EE(CNR)——color其它特殊处理。
(MTK调了两年,所以我以MTK的流程为标准,且目前的自研ISP流程和MTK 几乎一样)。
ISP流程总共有两个数据转换节点,涉及三个数据域raw——>RGB——>YUV:
1、raw(bayer)数据转换rgb数据
sensor捕获景物的光信号强度,输出图像是黑白的,没有色彩信息。CMOS上的R、G、B三色的滤光片,将图像数据分成RGB三种分量而形成的Bayer raw图。(Bayer格式的RAW数据包含了2个G、1个R和1个B,一般格式有GBRG、GRBG、BGGR、RGGB多种)Bayer的数据是每个像素点只包含了一种色彩信息,呈现了一种“马赛克”的样子,我们需要将RGB数据结合在一个像素点中展现,消除马赛克的样子,也就是这个过程就是 - Demosaic。
demosaic 算法举例:以红色像素区域为例,我们需要的是丢失了的绿色与蓝色的值。插值法可以通过分析与这个红色像素相邻的像素计算出这两个值。比如算法发现该区域像素绿色像素均含有大量电荷,但蓝色像素电荷数为零,所以可以推断出,这个红色像素实际上是黄色的。
2、RGB 到YUV的色彩空间转换
原因:
(1)为何会有色彩空间的转换呢?我们图像的采集和处理在RGB空间就已经有很好的效果了,但是显示和信号的处理多数在YUV空间下进行。显示主要指的是电视,使用YUV格式可以兼容黑白电视和彩色电视。
(2)色彩空间转换这个模块将RGB 转换为 YUV444, 然后在YUV 色彩空间上进行后续的彩色噪声去除、 边缘增强等, 也为后续输出转换为jpeg 图片提供方便。在YUV 家族中,YCbCr 是在计算机系统中应用最多的成员,JPEG、MPEG 均采用此格式。 一般人们所讲的YUV 大多是指YCbCr。YCbCr有许多取样格式,如 4∶4∶4,4∶2∶2, 4∶1∶1和 4∶2∶0。(NV12 和 NV21 属于 YUV420 格式。)
-----------------------------------------一个发散问题 start ------------------------------------------------
其中gamma模块,不同的曲线指数会影响CC的颜色还原程度,理应先调整gamma,再去调整CCM模块。但是以上几个流程中,gamma却都位于CCM 模块之后。
大概的解释:Color Constancy=AWB+CCM。Gamma校正就是对图像的灰度进行非线性处理,这个曲线类似于指数关系,最终处理后图像灰度是类似人眼的非线性效果,这个指数就是Gamma。
Gamma矫正会影响到整个图像的对比度。对比度越高,整个图像的通透性越好,让人眼视觉效果更加明显。Gamma矫正也会影响到图像的色彩,对比度越高,整个图像的色彩饱和度也越高。
CC是在RGB域进行的一种映射,这个映射是sensor输出数据——>人眼真实感受值。为了实现这个映射的具体的映射方式,常用的一种方法是标定法。即利用标定好的某种颜色的标准值(比如color checker 色卡)和sensor输出数据做差,来求得CC对该颜色需要做的映射。
结论:使用工具校准时,需要填入饱和度,而gamma 影响饱和度,所以校准CC时要输入使用的gamma。而实际上为了主观表现(亮度、对比度或者噪声),CC校准后gamma 还会进行调整,所以gamma 属于CC的辅助模块,而不是必备模块。gamma 和CC的位置在ISP pline中就没有强相关性。
-----------------------------------------一个发散问题 end ------------------------------------------------
再回顾一下流程:DPC——RNR——BLC(OB)——(DGN)——LSC——AWB——LTM——DMS(RNR)——CCM——gamma——color conversion——YNR——EE(CNR)——color其它特殊处理。
各模块解释:
[转]-- ISP(图像信号处理)算法概述、工作原理、架构、处理流程 - 知乎 (zhihu.com)
问题来源列举:
(1)OB(BLC):物理器件不可能是理想,所以会产生暗电流,出现不合适的black level。(另一种奇怪的解释:实际AD芯片(模数转换芯片)的精度可能无法将电压值很小的一部分转换出来,因此,sensor厂家一般会在AD的输入之前加上一个固定的偏移量,使输出的pixel value在n(每家不同)~255之间,目的是为了让暗部的细节完全保留,当然加了之后高光信号溢出,会损失一些亮部细节。当ISP 接收到sensor 的数据时,就要通过标定的方式,确定这个偏移量的具体值。后续的 ISP处理模块,需要先减掉该偏移值,才能保证数据的线性一致性。)
(2)DPC:坏点一般是由于制造工艺的问题使得个别pixel 不良造成的。它是指某个像素点与周围像素有较大的差异。一般是在全黑的环境下出现白点或者高亮的环境下出现黑点。
(3)LSC:由于镜头本身就是一个凸透镜,Lens的光学特性——凸透镜原理,中心的感光必然比周边多,通光量从中心到边角依次较少,导致图像中间亮,四周偏暗; 第二,当Lens CRA(主光线角度,Chief ray angle)小于 Sensor CRA(microlens)导致sensor传感器边缘像素收集光能衰减更大(CRA矫正改善),因此导致传感器中心像素收集光能大于边缘像素,加剧Luma Shading。
color shading :各种颜色的波长不同,经过透镜折射后,折射的角度也不一样,就会造成color Shading的现象,另外由于CRA的原因也会导致shading现象。(当入射光线的CRA角度超过sensor 的CRA时,就会导致经过R-filter的光线,照到了G像素上,造成像素之间的串扰,出现color shading;)
CRA选择:lens CRA 大于 Sensor CRA 会出现明显的 color shading,当 lens CAR 小于 Sensor CRA 会出现 luma shading。建议是选择 lens CRA 小于 sensor CRA 的配置。
(4)NR:sensor在输出图像的时候就会带有一些噪声,原始RAW图经过ISP处理后,会引入一些新的噪声,或者对原有噪声进行了放大。
(5)AWB:人眼具有色彩恒常性,sensor并没有人眼这么强大,为了模拟人眼的成像效果,保证任何色温场景下白色都是白色。(视锥细胞会根据周围环境光的情况独立地调整颜色通道的敏感度,如果一个物体表面对光线的反射特性不随光照条件而变化(除了变色龙外大多数物体都满足),那么该表面的光亮度与环境光亮度的比值也恒等,数值上等于视锥细胞的三刺激值与白场响应的比值,因此该表面在各种光照下激发的颜色知觉都(基本)相同。这就是颜色恒常的原理。)
(6)DMS:从sensor出来的图是通过cmos上透红色、 透绿色和透蓝色的滤镜阵列单元分别接收红(Red)、 绿(Green)、 蓝(Blue)三个分量的信息,将三个分量最终合成一个彩色信息。
(7)gamma: 摄像机感光与输入光强呈线性关系, 而人眼对外界光源的感光值与输入光强呈指数关系。为方便人眼辨识图像, 需要将摄像机采集的图像进行gamma 矫正。