这里写自定义目录标题
- 引言
- ISP的处理流程
- 1、Sensor有暗电流
- 2、通过镜头到达Sensor中间的光多于到达Sensor的边缘的光,即光学系统中的渐晕
- 3、Senor上有的像素点的输出有坏点
- 4、Cmos的Sensor采用了Bayer色彩滤波阵列(Bayer Color Filter Array,CFA)
- 5、Senor获取的图像中有大量噪声
- 6、Senor获取的图像容易受到光源颜色的影响
- 7、Senor滤光板处各颜色块之间的颜色渗透带来的颜色误差
- 8、人眼对暗部细节比Sensor敏感
- 9、Senor的输出的Raw data是RGB,但是有的处理在YUV上更方便,且YUV存储和传输时更省带宽
- 10、Senor一定曝光量下较暗部分或较亮部分的细节显示不充分
- 11、图像传感器和镜头需要ISP模块根据光强度自动调节曝光时间
- 12、镜头需要调节焦距才能避免光学成像模糊
- 13、镜片的表面反射或镜筒、反光镜组的内面所引起的反射光,到达底面后造成画面整体或一部份产生了雾蒙
- 14、画面清晰度不够
- 笔者小结
引言
1、ISP是什么: 图像信号处理(Image Signal Process),主要用于手机拍照和录像效果
2、为什么需要ISP: 在视觉处理过程中,ISP就是成像引擎,在实际环境中,镜头和Sensor的物理缺陷(不完美),拍摄的光线条件多样,镜头和Sensor需要根据环境做适应(就像人眼要通过瞳孔缩放,适应环境明暗一样)。
ISP的处理流程
下面这个图是一个常用的ISP处理流程,推荐一个链接学习:ISP(Image Signal Process)先了解基本概念,再学习这个流程。
先了解ISP在具体问题的解决方案
1、Sensor有暗电流
处理模块: BLC(Black Level Correction)/ Black Level Compensate (OBC)
黑电平校正。所谓黑电平就是在DNP下,将曝光时间和增益都调到最小时拍摄图片的亮度值,理想情况下应该是0,但是实际中因为sensor暗电流作用,全黑像素值大于0。(这一个值,在后面可能会受到AWBGain,CCM,Gamma的影响)。
处理原理: 我们需要找到一个矫正值,所有像素值都减去这个值,就得到一个矫正成功的结果。一般情况下,sensor的传感器周边,还有一小部分区域是有感光器的,但是没有光透射进来。可以把这部分的传感器的信号作为矫正值,从可感光部分的信号中减去,就可获得校正后信号。
2、通过镜头到达Sensor中间的光多于到达Sensor的边缘的光,即光学系统中的渐晕
处理模块: LSC(Lens Shade Correction)------镜头阴影校正
Lens Shading是由于镜片从边缘到中心对入射光线的反射程度不同,造成拍摄均匀亮度的画面,图像从中心到边缘亮度不均匀逐渐变暗。Color Shading是由于Lens从中心到边缘,其R、G、B变暗的速率不一样,总体表现就是Gb/Gr像素值差异较大,两个像素之间有细微纹理。找出shading的distribution,然后用最小的模型来建模将其导入
处理原理: 首先检测出图像中间亮度比较均匀的部分,认为这部分不需要矫正,然后以此为中心,计算出周围区域需要补偿的因子(增益)。实际项目中,可以把镜头对准白色物体,检查图像四周是否有暗角。
3、Senor上有的像素点的输出有坏点
处理模块: DPC/BPD(Defect Pixel Correction/Bad Pixel Detect)
坏点校正/坏点检测。相机中成像坏点一般是白色或者黑色的点,和周围像素点的差异明显。
处理原理: 第一步:检测坏点。在RGB域上做5x5的评估,如果某个点和周围的点偏离度超过阈值的点为坏点。为了防止误判,还需要更复杂的逻辑,如连续评估N帧。第二步:纠正坏点。对找到的坏点做中值滤波,替换原来的值即可。
4、Cmos的Sensor采用了Bayer色彩滤波阵列(Bayer Color Filter Array,CFA)
处理模块: DM(Demosaicing/Color Filter Array Interpolation/CFA插值)------颜色插值
CMOS Sensor出来的RawData是Bayer格式的图像,每个像素只有一个通道的信息。DM是将Bayer格式的图像恢复成每个像素用RGB三通道表示的方式。DM的主要依据是图像在平滑的局部区域,各分量的ratio是相等的。插值算法的好坏会影响图片的细节,如摩尔纹。
(此处附上笔者自己的理解:颜色是由RGB的3个值组成的,所以每个像素点的颜色需要三块感光板,成本太高,所以实际中采用的是一块滤光板,这个板子上是分割成很多小格子,每个格子的颜色不一样,bayer是其中一种分布方式,绿色格子数>2红色=2蓝色,因为人对绿色敏感,当有光透过来,会在小格子上产生数值,最后采用颜色插值算出真实的RGB值)
PS:华为mate60pro采用了ryyb滤镜阵列技术,RYYB就是将两个绿色像素G换成黄色像素Y替代, Y(红色和绿色组合)。
处理原理: 内插法
5、Senor获取的图像中有大量噪声
处理模块: NR(Noise Reduction/Denoise):去噪
采用特定的LPF(Low Pass Filter)对图片进行滤波,滤除图像的噪声成分,而Bilateral filtering即双边滤波器,它是一种保护边缘的平滑滤波器,这样既可以滤除噪声,edge又可以保留下来。
处理原理: 对图像进行降噪处理的传统方法有均值滤波、高斯滤波,本质是低通滤波器。
普通的高斯滤波只考虑像素的空间距离关系,这样会导致滤波后图像变得模糊,为了避免图像变模糊,就需要保持图像的边缘,这时,就还要考虑相邻像素和本像素的相似程度,对于相似度高的像素给予更高的权重,我们称这种滤波为双边滤波。
6、Senor获取的图像容易受到光源颜色的影响
处理模块: AWB(Automatic White Balance)------自动白平衡
解决环境光不同色温导致整幅图片偏色的情况。
处理原理:
比较常用的WEB算法有灰度世界、完美反射法等。
灰度世界(Gray World)算法基于一个假设:平均来讲,世界是灰色的。所以,白平衡就是调整R/B增益,达到R、G、B 相等。
白平衡有3个步骤:
(1)检测色温,如果手工调节,就知道图像中什么位置是白色物体了,色温容易检测;如果是自动调节,就需要估计出(猜出)图像中的白色位置,这是最重要的一环;
实际计算中为了实时操作,减少计算量,通常选取某个特定区域(如图像中央)像素进行计算。但若图像颜色较为单一或选定区域正好落入大的色块(红光下的白墙),以上算法求得的色温会非常不准确。为此,必须根据一定的约束条件,挑选出白色像素来计算色差。
(2)计算增益,计算R和B要调整的增益;调整增益将Cb和Cr调整到0 (或接近0)的两个系数,即R=G=B。
(3)色温矫正,根据增益调整整幅图片的色温。
7、Senor滤光板处各颜色块之间的颜色渗透带来的颜色误差
AWB已经将白色校准了,CCM就是用来校准除白色以外其他颜色的准确度的,
处理模块: CCM(Color Correction Matrix/ DSC color calibration):----颜色校正矩阵
拍摄color checker24色板,将相机拍摄图片值与色板标准值之间进行对比(RGB颜色空间),得出一组能将拍摄值校正到最接近标准值的3x3矩阵。通过这个矩阵对所有相机拍摄的图片进行颜色校正。
处理原理: 一般颜色校正的过程是首先利用该图像传感器拍摄到的图像与标准图像相比较,以此来计算得到一个校正矩阵,一般情况下,对颜色进行校正的过程,都会伴随有对颜色饱和度的调整。颜色的饱和度是指色彩的纯度,某色彩的纯度越高,则其表现的就越鲜明;纯度越低,表现的则比较黯淡。
用一个3X3的CCM矩阵来校准, 其中每一列系数r1+g1+b1等于一个恒定值1。Ccm矫正最终结果可以通过拍摄24色卡图片然后用imatest(一款专业的图像分析软件,具有强大的图像分析和处理功能)分析来做分析参考。
8、人眼对暗部细节比Sensor敏感
人眼不同于摄像机,接收光子来感知光线。比如:在一间小黑屋中每增加一盏灯,摄像机都能线性增加亮度。但是人眼在黑暗时增加一盏灯时感受明显,往后随着灯的个数增长人眼并不会有明显感受
处理模块: RGB Gamma------Gamma校正
处理原理: Gamma编码后的图像相比于线性编码的图像,明显有更多的暗部色阶。Gamma编码刚好满足了人眼对暗部细节敏感的特性。即人眼是按照gamma < 1的曲线对输入图像进行处理的(公式f(I)=I^gamma,I为原图像素值)。
现在常用的伽马校正是利用查表法来实现的,即首先根据一个伽马值,将不同亮度范围的理想输出值在查找表中设定好,在处理图像的时候,只需要根据输入的亮度,既可以得到其理想的输出值。
9、Senor的输出的Raw data是RGB,但是有的处理在YUV上更方便,且YUV存储和传输时更省带宽
在YUV 色彩空间上进行彩色噪声去除、 边缘增强等更方便
处理模块: RGBToYUV------色彩空间转换
处理原理: YUV 是一种基本色彩空间, 人眼对亮度Y改变的敏感性远比对色彩变化大很多, 因此, 对于人眼而言, 亮度分量Y 要比色度分量U、V 重要得多。所以,只有YUV444格式的YUV数据的比例是1:1:1,其他各种格式,如YUV422,YUV420等格式,UV的数据量都小于Y,达到节省存储空间和传输带宽的目的。YUV数据的概念就是这样简单。(在编程时查一下文档,再搞清楚内存排布即可)
第二,RGB和YUV转换有固定的公式。
另外, 在YUV 家族中, YCbCr 是在计算机系统中应用最多的成员, 其应用领域很广泛,JPEG、MPEG均采用此格式。一般人们所讲的YUV大多是指YCbCr。
10、Senor一定曝光量下较暗部分或较亮部分的细节显示不充分
在YUV 色彩空间上进行彩色噪声去除、 边缘增强等更方便
处理模块: DRC/HDR(Dynamic Range Compression/ High-Dynamic Range)宽动态
高动态图像的拍摄出来的结果通常会有,亮部太亮,暗部太暗的问题。DRC是调整图像暗部亮度使之变亮,调整亮部亮度使之变暗,而且保持图像的对比度。
处理原理: 主要是通过tone mapping的方法,将像素值在特别暗的区域拉高,在特别亮的区域拉低。
11、图像传感器和镜头需要ISP模块根据光强度自动调节曝光时间
处理模块: AE(Automatic Exposure Control)----自动曝光
处理原理: 自动曝光的实现一般包括三个步骤:
1)光强测量。光强测量的过程是利用图像的曝光信息来获得当前光照信息的过程。可以统计图像的全部像素,也可以统计图像中间部分、也可以将图像分成不同部分且每部分赋予不同权重。
2)场景分析。场景分析是指为了获得当前光照的特殊情况而进行的处理,比如有没有背光照射或者正面强光等场景下。对这些信息的分析,可以提升图像传感器的易用性,并且能大幅度提高图像的质量,这是自动曝光中最为关键的技术。目前常用的场景分析的技术主要有模糊逻辑和人工神经网络算法。这些算法比起固定分区测光算法具有更高的可靠性,主要是因为在模糊规则制定或者神经网络的训练过程中已经考虑了各种不同光照条件。
3)曝光补偿。在完成了光强测量和场景分析之后,就要控制相应的参数使得曝光调节生效。主要是通过设定曝光时间和曝光增益来实现的。
12、镜头需要调节焦距才能避免光学成像模糊
处理模块: AF (Auto Focus) ---- 自动对焦
处理原理: AF算法的基本步骤是先判断图像的模糊程度,通过合适的模糊度评价函数求得采集的每一副图像的评价值, 然后通过搜索算法得到一系列评价值的峰值, 最后通过电机驱动将采集设备调节到峰值所在的位置, 得到最清晰的图像。
对焦评价函数
评价函数有很多种, 主要考虑的图像因素有图像频率(清晰的图像纹理多, 高频分布较多), 还有图像的灰度分量的分布(图像对应的灰度图的分量分布范围越大,说明图像的细节较多, 反应的图像的清晰程度)
常用的搜索算法有爬山算法, 搜索窗口有黄金分割点对焦嵌套窗口等。
13、镜片的表面反射或镜筒、反光镜组的内面所引起的反射光,到达底面后造成画面整体或一部份产生了雾蒙
处理模块: Flare offset:光学上称Flare也叫stray light,耀斑补偿
处理原理: 镜片的镀膜及内面防反射处理的加强,固然可以大幅度地减少光斑,但被摄体的状况并不相同,不可能完全消除。因此,在相机里面设计都是黑色的,且其内侧表明设计都是粗糙的,目前就是为了减小flare。flare如何修正?做直方图,然后每阶的亮度都往下降,这样是否会影响颜色呢?因此,flare一定要是在linear domain去做,不能在RGB domain去做。
14、画面清晰度不够
处理模块: EE(Edge Enhancement/Edge Sharpening):锐化,边缘增强。
处理原理: 通过滤波器获取图像的高频分量,按照一定的比例将高频部分和原图进行加权求和获取锐化后的图像。
笔者小结
原始图像会因为镜头和传感器的缺陷、受外界光线的影响,出现图像有色差、模糊等问题,所以需要用ISP进行处理。
通常的流程是先进行黑电平校准BLC(黑电平是在DNP下,将曝光时间和增益都调到最小时拍摄图片的亮度值)——>进行镜头阴影校正LSC(避免出现边缘模糊的情况)——>如果镜头有坏点,需要进行坏点去除,坏点检测BPD,坏点去除BPC——>颜色插值DM——>颜色矫正矩阵——>Gamma校正(使得在暗处的曲线不是线性的)——>降噪NR/锐化EE