图像信号处理器及其架构演进
对于一个成像系统,其图像信号采集部分包括光学器件的镜头组和光电器件的CMOS/CCD成像传感器,由于其在设计和制造阶段的缺陷,在按下快门采集得到的图像信号上有各种各样的缺陷不能满足人们对于图片的需求,这就需要图像信号处理器(Image Signal Processor, ISP)对CMOS/CCD传感器采集的图像信号进行处理,得到令人满意的图像。
下面不分模块所在的图像域,仅仅就功能从面说明ISP具有哪些基本的模块及其作用:
黑电平矫正(black level correction, BLC)
在镜头模组完全遮挡,没有任何光线射入时,此时传感器上仍然能够读到电压数据,而且数据不为零,引起这个的根本原有有两个;其一是由于传感器在小电压时,ADC的精度不够,不容易量化,而图像的暗部信息又比较重要,所以厂商通常给其加一个小的电压偏置offset,这样在0附近的信号被抬到offset附近;其二是由于电路本身的热辐射会激发电子,从而在电容两端形成电压,这部分通常称为暗电流,而且随着时间的增加这个暗电流越来越大;基于以上两个原因及时完全遮挡传感器,也存在电压,而后续的ISP的很多模块都是假设图像的是不存在暗电流的,因此通常需要对采集的raw图像数据进行黑电平矫正。至于黑电平在ISP上的位置,黑电平采用全局的方式还是局部的方式,标定测量的方法的等具体的细节,在这里暂不介绍。坏点矫正(bad/defective pixel correction, DPC)
由于CMOS/CCD感光器件在制造工艺上存在缺陷,传感器上的某些像素点的工作状态不正常,这些像素点通常称为坏点,坏点分为两类;一类坏点在出厂时就完全不工作,这类坏点称为固定坏点;另一类坏点在某些特定的电压范围内工作不正常,这类坏点称为动态坏点;因此在对于坏点矫正,ISP上出现过静态坏点矫正和动态坏点矫正模块,经过算法的迭代和演化,现在高质量的ISP中通常只配置一个动态坏点矫正模块,动态坏点模块兼具静态坏点检测和矫正能力。白平衡矫正(white balance correction, WBC)
白平衡矫正是自动白平衡的一个子模块,对于相机,在不同的色温下,白色的物体成像结果可能不是白色,这就需要有自动白平衡算法将图像中本应该是白色的矫正成白色,通常白平衡是一个全局的算法,白平衡矫正算法只需要通过给raw图像的不同通道乘以响应的增益即可,但是这个增益的计算比较负责需要更多的统计,因子对于自动白平衡算法,通常是在CPU上进行的,是一类软件算法。降噪(noise reduction, NR)
对于每一个像素点,收集光子的过程是一个泊松随机过程,电路在做ADC以及readout的过程都会引入噪声,另外各个图像算法模块也会引入模式噪声以及对噪声进行各种的改变或者方法,因此降噪是ISP上非常重要的模块,ISP上的降噪通常放在RAW域和YUV域,RAW上的图像有比较精确的噪声分析模型,在YUV上的算法处理精确度更高,算法设计可以更复杂。镜头阴影矫正(lens shading correction, LSC)
镜头阴影是由于镜头的光通量以及镜头对各个波长的折射不同引起的,lens shading分为luma shading(亮度阴影)和chroma shading(颜色阴影),镜头阴影矫正常用的算法有两种,其一为径向矫正(radical correction),从中心点配置,沿着中心向四周辐射矫正,另一种是网格矫正(mesh correction),通常mesh correction效果较好,同时具有更好的适应性,另外对于chroma shading有一些很好的基于反问题建模的迭代算法,其具体细节在稍后的相关章节中详细介绍。3A统计(AWB,AF,AE stats)
3A是自动白平衡(auto white balance),自动对焦(auto focus),自动曝光(auto exposure)的缩写,3A算法通常是软件算法,借助CPU来进行3A相关系数的计算,但是其需要的统计计算是一些计算简单但是算量很大的计算内容,因此3A的统计模块通常也放在ISP上。具体的3A-stats详细算法原理,这里暂且略过。绿平衡(green equalization, GE)
对于bayer格式的图像数据,绿色通道分为Gr通道和Gb通道,由于其排列方式以及相邻的像素不同,其收集到的电信号的两个绿色通道信号存在不平衡,除了信号采集上存在绿通道不平衡之外,另外在bayer域的图像处理算法也会引起绿色通道不平衡,因此在bayer域通常需要绿通道平衡矫正模块,绿平衡矫正通常放在bayer域降噪附近,这种率平衡解决的是因为信号采集引起的绿色通道不平衡问题,另外的绿平衡算法也可能放在demosaic之前,这类的通常解决由于算法引起的绿通道不平衡问题。全局色调映射(global tone mapping, GTM)
全局色调映射通常是HDR技术的一个子技术模块,为了能够在低位宽的图像系统中存储下高动态范围的图像信息,全局色调映射也可以用来做数据位宽压缩,但是经过全局色调映射的图像在效果上整体看起来发蒙,图像对比度不足,但是经过全局色调映射后虽然数据位宽降低,但是信号并没有很大损失,因此经过全局色调映射之后通常需要配合局部色调映射来做图像的对比度增强。局部色调映射(local tone mapping, LTM)
局部色调映射是HDR技术的另一个子模块,局部色调映射常常用来增强图像的局部对比度,经典的局部色调映射技术并不改变图像位宽,随着技术的发展,局部色调映射也和全局色调映射一样,也发展为具有位宽压缩功能的图像增强模块,局部色调映射采用的技术非常之多之光,CNN相关技术也是比较常用的技术,在这里三言两语很难概括,后续相关章节详细介绍。色差矫正(chromatic aberration correction, CAC)
由于不同波长在镜头下的折射率不一样,因此在成像平面和光轴方向上的焦点不一致,这种光学上的特性反应在图像上就会出现色差现象,色差分为横向色差和纵向色差,色差矫正通常采用标定-矫正的方法进行矫正,也有采用反问题建模迭代求解的方式进行矫正,这种软件模式很少在工程领域应用。色差矫正的一个比较知名的问题是紫边矫正,紫边是色差问题中的一个,但是集成紫边矫正的ISP比较少,因为算法需要比较大的kernel,收益付出比很低。去马赛克(demosaic/color filter array interpolation)
去马赛克是一个插值计算的过程,我们见到的彩色图像是rgb真彩色图像,每个像素点有RGB三个分量,然而bayer图像每个点只有一个像素值,而且按照bayer格式排列,去马赛克算法就这样的每个通道只有一个像素值且按照bayer格式排列的图像插值恢复成每个像素点有三个数值的RGB真彩色图像,去马赛克算法是ISP中非常关键的一个模块,关系到图像的细节、边缘、色彩等方面,采用的方法种类也非常多,基于深度学习的技术也逐渐应用到ISP中,这方面的细节在后续的章节中详细介绍。全局色彩矫正(color correction matrix, CCM)
图像经过bayer域的图像处理以及去马赛克之后便得到了RGB图像,然而图像经过镜头传感器以及CCM之前的图像处理算法之后,它的颜色是否准确,是否能和实际的颜色对应上呢,如果有误差怎么去矫正呢,全局色彩矫正就是通过对RGB进行线性矫正之后得到图像在全局上颜色误差最小的图像。局部色彩矫正(3D-LUT)
由于CCM是一个线性变换,并且是全局意义上误差较小的变换,因此存在某些颜色仍然存在误差的现象,这就需要采用局部色彩矫正的模块,3D-LUT技术便是这样的技术,它针对某些具体的色彩进行矫正,3D-LUT技术除了矫正颜色之外也可以调整成像风格,满足某些特殊要求。伽马矫正(gamma)
gamma变换是对输入图像像素值进行非线性操作,使输入图像像素值与输出图像值呈指数关系,gamma矫正过去往往是为了适应显示器的非线性影响,现在的gamma矫正除了显示器的显示适应之外,还可以通过gamma变换来做图像的亮度增强,提升暗部细节,gamma变换的矫正在ISP上的实现通常采用查找表配合线性插值来进行实现。尺寸变换(scaler/resizer)
尺寸变换是图像处理中比较常用的功能,因此在ISP中必不可少,通常在ISP的末端配上一个YUV域的尺寸变换模块,通常称为scaler,比较常用的scaler算法是采用多抽头的多倍率信号采样器,对于上采样要求比较高的算法以及上采样倍率比较小的时候采用复杂度比较高的超分辨率分析(super-resulotion)类的算法,倍率比较大的上采样率算法通常直接采用多倍率信号采样器即可。锐化、边缘增强(edge enhancement,EE, sharpen)
下面,笔者根据自己ISP的架构设计、算法开发以及调试经验,根据各个模块所在的图像域,将ISP的基本功能汇总如下:
RAW 域 | RGB 域 | YUV域 |
---|---|---|
BLC | CCM | Warping(Lens distortion, EIS) |
DPC | 3D-LUT | YNR/CNR |
AWB/digital gain | RGB gamma | Advance NR |
RAW NR | GTM | Sharpen |
3A Stats | LTM | GTM |
Green equalization | Color space conversion | LTM |
GTM | – | 2D-LUT |
LTM | – | 3D-LUT |
CAC | – | Purple fringe correction/CAC |
Demosaic | – | Scaler |
LSC | – | – |
ISP的增强功能
- 软件前/后处理
- CPU/GPU/DSP
- RAW/YUV 2D/3D NR
- RAW/YUV HDR
- Depth + Bokeh
- Scene detection
- Face detection (Haar feature)
- Optical flow
- …
- 硬件协处理器
- CV engine
- Feature point extration & matching
- Homography matrix estimation
- Optical flow
- Depth (preview video)
- …
- NPU
- NR (2D/3D)
- HDR, tone mapping
- face detection(CNN)
- Segmentation
- Super resolution
- AWB
- Demosaic
- …
- …
ISP 架构的发展与演进
- 第一代
早期的ISP是全直连模式,其基本架构如下图所示
其特点有:
- 低延迟- 带宽小,低功耗- 软件调度简单- 多摄支持成本高- 画质一般
- 第二代
中期的ISP采用在线和离线模式,其基本架构如下图所示
其特点有:
- 延迟较高- 带宽较大,功耗较高- 调度灵活- 软件调度复杂- 多摄支持成本低- 画质较高
- 第三代
当前的ISP采用混合架构模式,其基本架构如下图所示
其特点有:
- 延迟高- 带宽大,功耗高- 调度灵活,甚至可以开放算力- 软件调度难度极大- 画质最好
对三代ISP架构做一个对比和总结:
- 第一代ISP采用完全直连的模式,图像画质完全由ISP决定,图像处理算法也只能用比较适合固化为电路的local级别的算法;
- 第二代ISP采用在线(frontend,FE)+离线模式(backend,BE),图像在经过FE之后进入DDR,这时可以利用SOC的其他计算资源(CPU,GPU,DSP)对图像进行处理,根据其他计算设备的计算特点,将图像处理的不同算法需求下发给不同的计算设备,相对于第一代,这个算法设计带来了更大的灵活度。
- 第三代ISP仍然采用了在线+离线模式,相较于第二代ISP,新增了NPU(neural processing unit主要是方便张量运算的CNN类深度学习网络计算器)和CVE(computer vision engien,主要是固化一下图像处理常用算子模块,比如均值计算,滤波计算,光流计算,深度计算,特征点检测与匹配,H矩阵估计),这给算法的设计带来了更大的灵活性,同时能够借助最新的深度学习技术来解决采用传统图像处理效果难以提升的图像质量问题,比如CNN降噪,CNN超分,CNN的AWB等等技术,对于这类ISP的设计需要架构师能够具有更好的全局能力,能够对于图像质量的各类算法采用的计算资源有全局的理解,从而更合理的分配图像算法在相应的计算资源上进行计算,从而拿到相对来说全局更优的图像质量,当然这也不是一蹴而就的,需要一代又一代的ISP迭代探索,DXO排行榜的分数越来越高不仅仅是大家模拟考的次数太多分数更高了,相机技术中软硬件迭代和算法设计的进步也是功不可没的。
为了方便后续模块的说明,这里以第一代ISP架构为例,给出一个直连模式的ISP基本结构设计,其结构如下图所示:
后续的相机技术以及计算成像技术的讲解与仿真以该ISP为蓝本进行演进,逐步迭代出一个具有工程应用能力级别的ISP软件模型,由于这个ISP相对于现金的手机级别的ISP复杂度还是小了很多,因此笔者给该ISP命名为“Tiny ISP”。
注意:未经笔者授权,严禁任何转载