从FPGA到camera ISP漫谈
从FPGA到camera ISP漫谈
参考文献链接
https://mp.weixin.qq.com/s/RBzN1Ii3_AH3omljmAByNA
https://mp.weixin.qq.com/s/lxcJ_QFILTW3_PgP2oOkug
FPGA技术
FPGA技术
人工智能芯片与自动驾驶 2022-03-08 06:30
FPGA可用于处理多元计算密集型任务,依托流水线并行结构体系,FPGA相对GPU、CPU在计算结果返回时延方面具备技术优势。
计算密集型任务:矩阵运算、机器视觉、图像处理、搜索引擎排序、非对称加密等类型的运算属于计算密集型任务。该类运算任务可由CPU卸载至FPGA执行。
FPGA执行计算密集型任务性能表现:
• 计算性能相对CPU:如Stratix系列FPGA进行整数乘法运算,其性能与20核CPU相当,进行浮点乘法运算,其性能与8核CPU相当。
• 计算性能相对GPU:FPGA进行整数乘法、浮点乘法运算,性能相对GPU存在数量级差距,可通过配置乘法器、浮点运算部件接近GPU计算性能。
FPGA执行计算密集型任务核心优势:搜索引擎排序、图像处理等任务对结果返回时限要求较为严格,需降低计算步骤时延。传统GPU加速方案下数据包规模较大,时延可达毫秒级别。FPGA加速方案下,PCIe时延可降至微秒级别。远期技术推动下,CPU与FPGA数据传输时延可降至100纳秒以下。
FPGA可针对数据包步骤数量搭建同等数量流水线(流水线并行结构),数据包经多个流水线处理后可即时输出。GPU数据并行模式依托不同数据单元处理不同数据包,数据单元需一致输入、输出。针对流式计算任务,FPGA流水线并行结构在延迟方面具备天然优势。
FPGA用于处理通信密集型任务不受网卡限制,在数据包吞吐量、时延方面表现优于CPU方案,时延稳定性较强。
通信密集型任务:对称加密、防火墙、网络虚拟化等运算属于通信密集型计算任务,通信密集数据处理相对计算密集数据处理复杂度较低,易受通信硬件设备限制。
FPGA执行通信密集型任务优势:
① 吞吐量优势:CPU方案处理通信密集任务需通过网卡接收数据,易受网卡性能限制(线速处理64字节数据包网卡有限,CPU及主板PCIe网卡插槽数量有限)。GPU方案(高计算性能)处理通信密集任务数据包缺乏网口,需依靠网卡收集数据包,数据吞吐量受CPU及网卡限制,时延较长。FPGA可接入40Gbps、100Gbps网线,并以线速处理各类数据包,可降低网卡、交换机配置成本。
② 时延优势:CPU方案通过网卡收集数据包,并将计算结果发送至网卡。受网卡性能限制,DPDK数据包处理框架下,CPU处理通信密集任务时延近5微秒,且CPU时延稳定性较弱,高负载情况下时延或超过几十微秒,造成任务调度不确定性。FPGA无需指令,可保证稳定、极低时延,FPGA协同CPU异构模式可拓展FPGA方案在复杂端设备的应用。
FPGA部署包括集群式、分布式等,逐渐从中心化过渡至分布式,不同部署方式下,服务器沟通效率、故障传导效应表现各异。
FPGA嵌入功耗负担:FPGA嵌入对服务器整体功耗影响较小,以Catapult联手微软开展的FPGA加速机器翻译项目为例,加速模块整体总计算能力达到103Tops/W,与10万块GPU计算能力相当。相对而言,嵌入单块FPGA导致服务器整体功耗增加约30W。
FPGA部署方式特点及限制:
① 集群部署特点及限制:FPGA芯片构成专用集群,形成FPGA加速卡构成的超级计算器(如Virtex系列早期实验板于同一硅片部署6块FPGA,单位服务器搭载4块实验板)。
• 专用集群模式无法在不同机器FPGA之间实现通信;
• 数据中心其他机器需集中发送任务至FPGA集群,易造成网络延迟;
• 单点故障导致数据中心整体加速能力受限
② 网线连接分布部署:为保证数据中心服务器同构性(ASIC解决方案亦无法满足),该部署方案于不同服务器嵌入FPGA,并通过专用网络连接,可解决单点故障传导、网络延迟等问题。
• 类同于集群部署模式,该模式不支持不同机器FPGA间通信;
• 搭载FPGA芯片的服务器具备高度定制化特点,运维成本较高
③ 共享服务器网络部署:该部署模式下,FPGA置于网卡、交换机间,可大幅提高加速网络功能并实现存储虚拟化。FPGA针对每台虚拟机设置虚拟网卡,虚拟交换机数据平面功能移动至FPGA内,无需CPU或物理网卡参与网络数据包收发过程。该方案显著提升虚拟机网络性能(25Gbps),同时可降低数据传输网络延迟(10倍)。
分享服务器网络部署模式下,FPGA加速器有助于降低数据传输时延,维护数据中心时延稳定,显著提升虚拟机网络性能。
分享服务器网络部署模式下FPGA加速Bing搜索排序:Bing搜索排序于该模式下采用10Gbps专用网线通信,每组网络由8个FPGA组成。其中,部分负责提取信号特征,部分负责计算特征表达式,部分负责计算文档得分,最终形成机器人即服务(RaaS)平台。FPGA加速方案下,Bing搜索时延大幅降低,延迟稳定性呈现正态分布。该部署模式下,远程FPGA通信延迟相对搜索延迟可忽略。
Azure服务器部署FPGA模式:Azure针对网络及存储虚拟化成本较高等问题采取FPGA分享服务器网络部署模式。随网络计算速度达到40Gbps,网络及存储虚拟化CPU成本激增(单位CPU核仅可处理100Mbps吞吐量)。通过在网卡及交换机间部署FPGA,网络连接扩展至整个数据中心。通过轻量级传输层,同一服务器机架时延可控制在3微秒内,触达同数据中心全部FPGA机架时延可控制在20微秒内。
依托高带宽、低时延优势,FPGA可组成网络交换层与服务器软件之间的数据中心加速层,并随分布式加速器规模扩大实现性能超线性提升。
数据中心加速层:FPGA嵌入数据中心加速平面,位于网络交换层(支架层、第一层、第二层)及传统服务器软件(CPU层面运行软件)之间。
加速层优势:
• FPGA加速层负责为每台服务器(提供云服务)提供网络加速、存储虚拟化加速支撑,加速层剩余资源可用于深度神经网络(DNN)等计算任务。
• 随分布式网络模式下FPGA加速器规模扩大,虚拟网络性能提升呈现超线性特征。
加速层性能提升原理:使用单块FPGA时,单片硅片内存不足以支撑全模型计算任务,需持续访问DRAM以获取权重,受制于DRAM性能。加速层通过数量众多的FPGA支撑虚拟网络模型单层或单层部分计算任务。该模式下,硅片内存完整加载模型权重,可突破DRAM性能瓶颈,FPGA计算性能得到充分发挥。加速层需避免计算任务过度拆分而导致计算、通信失衡。
嵌入式eFPGA技术在性能、成本、功耗、盈利能力等方面优于传统FPGA嵌入方案,可针对不同应用场景、不同细分市场需求提供灵活解决方案.
eFPGA技术驱动因素:设计复杂度提升伴随设备成本下降的经济趋势促发市场对eFPGA技术需求。
器件设计复杂度提升:SoC设计实现过程相关软件工具趋于复杂(如Imagination Technologies为满足客户完整开发解决方案需求而提供PowerVR图形界面、Eclipse整合开发环境),工程耗时增加(编译时间、综合时间、映射时间,FPGA规模越大,编译时间越长)、制模成本提高(FPGA芯片成本为同规格ASIC芯片成本100倍)。
设备单位功能成本持续下降:20世纪末期,FPGA平均售价较高(超1,000元),传统模式下,FPGA与ASIC集成设计导致ASIC芯片管芯面积、尺寸增大,复杂度提升,早期混合设备成本较高。21世纪,相对批量生产的混合设备,FPGA更多应用于原型设计、预生产设计,成本相对传统集成持续下降(最低约100元),应用灵活。eFPGA技术优势:
更优质:eFPGA IP核及其他功能模块的SoC设计相对传统FPGA嵌入ASIC解决方案,在功耗、性能、体积、成本等方面表现更优。
更方便:下游应用市场需求更迭速度快,eFPGA可重新编程特性有助于设计工程师更新SoC,产品可更长久占有市场,利润、收入、盈利能力同时大幅提升。eFPGA方案下SoC可实现高效运行,一方面迅速更新升级以支持新接口标准,另一方面可快速接入新功能以应对细分化市场需求。
更节能:SoC设计嵌入eFPGA技术可在提高总性能的同时降低总功耗。利用eFPGA技术可重新编程特性,工程师可基于硬件,针对特定问题对解决方案进行重新配置,进而提高设计性能、降低功耗。
FPGA技术无需依靠指令、无需共享内存,在云计算网络互连系统中提供低延迟流式通信功能,可广泛满足虚拟机之间、进程之间加速需求.
FPGA云计算任务执行流程:主流数据中心以FPGA为计算密集型任务加速卡,赛灵思及阿尔特拉推出基于OpenCL的高层次编程模型,模型依托CPU触达DRAM,向FPGA传输任务,通知执行,FPGA完成计算并将执行结果传输至DRAM,最终传输至CPU。
FPGA云计算性能升级空间:受限于工程实现能力,当前数据中心FPGA与CPU之间通信多以DRAM为中介,通过烧写DRAM、启动kernel、读取DRAM的流程完成通信(FPGADRAM相对CPU DRAM数据传输速度较慢),时延近2毫秒(OpenCL、多个kernel间共享内存)。CPU与FPGA间通信时延存在升级空间,可借助PCIe DMA实现高效直接通信,时延最低可降至1微秒。
FPGA云计算通信调度新型模式:新通信模式下,FPGA与CPU无需依托共享内存结构,可通过管道实现智行单元、主机软件之间的高速通信。云计算数据中心任务较为单一,重复性强,主要包括虚拟平台网络构建和存储(通信任务)以及机器学习、对称及非对称加密解密(计算任务),算法较为复杂。新型调度模式下,CPU计算任务趋于碎片化,远期云平台计算中心或以FPGA为主,并通过FPGA将复杂计算任务卸载至CPU(区别于传统模式下CPU卸载任务至FPGA的模式)。
全球FPGA市场由四大巨头Xilinx赛灵思,Intel英特尔(收购阿尔特拉)、Lattice莱迪思、Microsemi美高森美垄断,四大厂商垄断9,000余项专利技术,把握行业“制空权”。
FPGA芯片行业形成以来,全球范围约有超70家企业参与竞争,新创企业层出不穷(如Achronix Semiconductor、MathStar等)。产品创新为行业发展提供动能,除传统可编程逻辑装置(纯数字逻辑性质),新型可编程逻辑装置(混讯性质、模拟性质)创新速度加快,具体如Cypress Semiconductor 研 发 具 有 可 组 态 性 混 讯 电 路 PSoC(Programmable System on Chip),再如Actel推出Fusion(可程序化混讯芯片)。此外,部分新创企业推出现场可编程模拟数组FPAA(Field Programmable Analog Array)等。
随智能化市场需求变化演进,高度定制化芯片(SoC ASIC)因非重复投资规模大、研发周期长等特点导致市场风险剧增。相对而言,FPGA在并行计算任务领域具备优势,在高性能、多通道领域可以代替部分ASIC。人工智能领域多通道计算任务需求推动FPGA技术向主流演进。
基于FPGA芯片在批量较小(流片5万片为界限)、多通道计算专用设备(雷达、航天设备)领域的优势,下游部分应用市场以FPGA取代ASIC应用方案。
中国FPGA芯片研发企业可以紫光同创、国微电子、成都华微电子、安路科技、智多晶、高云半导体、上海复旦微电子和京微齐力为例。从产品角度分析,中国FPGA硬件性能指标相较赛灵思、Intel等差距较大。紫光同创是当前中国市场唯一具备自主产权千万门级高性能FPGA研发制造能力的企业。上海复旦微电子于2018年5月推出自主知识产权亿门级FPGA产品。中国FPGA企业紧跟大厂步伐,布局人工智能、自动驾驶等市场,打造高、中、低端完整产品线。
中国FPGA企业竞争突破口现阶段中国FPGA厂商芯片设计软件、应用软件不统一,易在客户端造成资源浪费,头部厂商可带头集中产业链资源,提高行业整体竞争力。
camera ISP架构与算法
ISP(Image Signal Processor),即图像处理,主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正、噪声去除、坏点去除、内插、白平衡、自动曝光控制等,依赖于ISP才能在不同的光学条件下都能较好的还原现场细节,ISP技术在很大程度上决定了摄像机的成像质量。它可以分为独立与集成两种形式。
ISP 的Firmware 包含三部分,一部分是ISP 控制单元和基础算法库,一部分是AE/AWB/AF 算法库,一部分是sensor 库。Firmware 设计的基本思想是单独提供3A 算法库,由ISP 控制单元调度基础算法库和3A 算法库,同时sensor 库分别向ISP 基础算法库和3A 算法库注册函数回调,以实现差异化的sensor 适配。ISP firmware 架构如下图所示。
不同的sensor 都以回调函数的形式,向ISP 算法库注册控制函数。ISP 控制单元调度基础算法库和3A 算法库时,将通过这些回调函数获取初始化参数,并控制sensor,如调节曝光时间、模拟增益、数字增益,控制lens 步进聚焦或旋转光圈等。
1. TestPattern-测试图像
Test Pattern主要用来做测试用。不需要先在片上ROM存储图片数据,直接使用生成的测试图像,用生成的测试图像进行后续模块的测试验证。以下是常用的两种测试图像。
2. BLC(BlackLevel Correction)-黑电平校正
Black Level 是用来定义图像数据为 0 时对应的信号电平。由于暗电流的影响, 传感器出来的实际原始数据并不是我们需要的黑平衡( 数据不为0) 。所以,为减少暗电流对图像信号的影响,可以采用的有效的方法是从已获得的图像信号中减去参考暗电流信号,或者更确切是:模拟信号很微弱的时候,有可能不能被A/D转换出来,导致光线很暗的时候,图像暗区细节丢失。因此,sensor一般会在A/D转换之前,给模拟信号一个偏移量,以确保输出的图像保留足够多的细节。而黑电平校正主要是通过标定的方式确定这个偏移量。使得后续ISP模块的处理在保持线性一致性的基础上进行。
一般情况下, 在传感器中,实际像素要比有效像素多, 像素区头几行作为不感光区( 实际上, 这部分区域也做了 RGB 的 color filter) , 用于自动黑电平校正, 其平均值作为校正值, 然后在下面区域的像素都减去此矫正值, 那么就可以将黑电平矫正过来了。如下图所示,左边是做黑电平校正之前的图像,右边是做了黑电平校正之后的图像。
黑电平校正是在一倍系统增益的情况下标定计算而来,有些sensor在高倍增益和低倍增益时,OB相差会比较大。这个时候就需要获取不同增益环境下的遮黑RAW数据,分析R/Gr/Gb/B四个通道下的mean值。分析出来的均值即为各个通道的OB值。如果需要微调,即可在标定的OB上进行。例如:低照度下偏蓝,即可根据所在的ISO范围将B通道的幅度增加,减轻偏蓝现象。
3.LSC(Lens Shade Correction)-镜头阴影校正
由于相机在成像距离较远时,随着视场角慢慢增大,能够通过照相机镜头的斜光束将慢慢减少,从而使得获得的图像中间比较亮,边缘比较暗,这个现象就是光学系统中的渐晕。由于渐晕现象带来的图像亮度不均会影响后续处理的准确性。因此从图像传感器输出的数字信号必须先经过镜头矫正功能块来消除渐晕给图像带来的影响。同时由于对于不同波长的光线透镜的折射率并不相同,因此在图像边缘的地方,其R、G、B的值也会出现偏差,导致CA(chroma aberration)的出现,因此在矫正渐晕的同时也要考虑各个颜色通道的差异性。
常用的镜头矫正的具体实现方法是,首先确定图像中间亮度比较均匀的区域,该区域的像素不需要做矫正;以这个区域为中心,计算出各点由于衰减带来的图像变暗的速度,这样就可以计算出相应R、G、B通道的补偿因子(即增益)。下图左边图像是未做镜头阴影校正的,右边图像是做了镜头阴影校正的。
出于节约成本的考虑以及尺寸方面的原因,手机相机镜头向小型化和低成本方向发展。由于摄像头尺寸小,制造材料品质低,拍摄的图像在靠近边缘处会出现亮度衰减的现象。因此要对 Bayer raw 图像进行镜头衰减校正,以降低计算负荷。使用 LUT 分段线性近似法代替模拟曲线和多项式运算。每种颜色都有自己的 LUT,因此亮度衰减和色偏问题可同时得到解决。
针对不同增益下的LSC校正强度也会有所不一样。低照度下相对会比正常光照情况下校正强度要小一些。因此,ISP会预留接口以便对不同增益下的LSC强度进行调整。抑或者预留接口控制图像不同区域的LSC校正强度。例如:从中心区域开始往图像四周校正强度逐级减弱。
LSC校准原理
LSC校准前后结果对比
4.DPC(Bad Point Correction)-坏点校正
所谓坏点,是指像素阵列中与周围像素点的变化表现出明显不同的像素,因为图像传感器是成千上万的元件工作在一起,因此出现坏点的概率很大。一般来讲,坏点分为三类:第一类是死点,即一直表现为最暗值的点;第二类是亮点,即一直表现为最亮值的点:第三类是漂移点,就是变化规律与周围像素明显不同的像素点。由于图像传感器中CFA的应用,每个像素只能得到一种颜色信息,缺失的两种颜色信息需要从周围像素中得到。如果图像中存在坏点的话,那么坏点会随着颜色插补的过程往外扩散,直到影响整幅图像。因此必须在颜色插补之前进行坏点的消除。
盐椒噪声是一种在图像中产生黑点或白点的脉冲噪声,这类噪声往往和图像信号内容不相关,与邻域周边像素灰度值差别明显。中值滤波能够较好的滤除盐椒噪声(冲激噪声)。对于Sensor坏点来说,在一定程度上也可以看做是盐椒噪声,因此,坏点校正也可以使用中值滤波进行滤除。
算法基本原理 :
坏点消除示意图
以图中P4点为例,坏点消除基本过程为:首先计算该像素点与周围像素点像素值的差:
设定一个阈值,作为判断的标准。判断各个方向上的差值跟阈值的关系,如果都大于阈值的话,就表明该点像素值与周围像素点的差别较大,就可以确定该像素点为坏点,否则该像素就为正常的像素点,可以进行下一个像素点的处理。
若判断出某点为坏点,接下来进行对其的校正,过程如下:计算该点各个方向上的导数:
确定出该值最小的方向,表明该像素点需要在该方向上进行补偿,则按照下面的公式对该像素进行补偿,即若假设有
((DV<=DH) && (DV<DDL)&&(DV<=DDR))
则该像素点的值可以用下面的值来取代
Avg = (p1+2*p4+p4)/4
5.GB(Green Balance)-绿平衡
由于感光器件制造工艺和电路问题,Gr,Gb数值存在差异,将出现格子迷宫现象可使用均值算法处理Gr,Gb通道存在的差异,同时保留高频信息。
另外一个说法是:
Sensor芯片的Gr,Gb通道获取的能量或者是输出的数据不一致,造成这种情况的原因之一是Gr,GB通道的半导体制造工艺方面存在差异,另一方面是Microlens的存在,特别是sensor边缘区域,GB,Gr因为有角度差异,导致接收到的光能不一致。如果两者差异比较大,就会出现类似迷宫格子情况。主要是考虑G周围的G的方法进行平均化
Optical cross-talk示意图
算法基本原理:
A 5x5 local window from Bayer GRBG pattern, (a) The central pixel G7 is Gr; (b) the central pixel G7 is Gb
基于插值的方法
该算法中,选取Gr或Gb为参考颜色通道,修改另一个G通道分量,使得Gr/Gb两通道的数值基本一致。
假设Gb作为参考通道a图中的位于位置7的Gr像素值应该按照如下公式修改:
如果选择Gr为参考通道,则只需要按照同样的方法修改Gb的像素值即可
基于平均值的方法
该算法中Gr,Gb两个通道中的像素值都需要修改。
图a中,对于位于7位置的Gr,需要按照如下公式修:
图b中,对于位于7位置的Gb,需要按照如下公式修改:
6.Denoise-去除噪声
使用 cmos sensor 获取图像,光照程度和传感器问题是生成图像中大量噪声的主要因素。同时, 当信号经过 ADC 时, 又会引入其他一些噪声。这些噪声会使图像整体变得模糊, 而且丢失很多细节, 所以需要对图像进行去噪处理空间去噪传统的方法有均值滤波、 高斯滤波等。
但是, 一般的高斯滤波在进行采样时主要考虑了像素间的空间距离关系, 并没有考虑像素值之间的相似程度, 因此这样得到的模糊结果通常是整张图片一团模糊。所以, 一般采用非线性去噪算法, 例如双边滤波器, 在采样时不仅考虑像素在空间距离上的关系, 同时加入了像素间的相似程度考虑, 因而可以保持原始图像的大体分块, 进而保持边缘。
7.Demosaic-颜色插值
光线中主要包含三种颜色信息,即R、G、B。但是由于像素只能感应光的亮度,不能感应光的颜色,同时为了减小硬件和资源的消耗,必须要使用一个滤光层,使得每个像素点只能感应到一种颜色的光。目前主要应用的滤光层是bayer GRBG格式。如下图所示:
这样,经过滤色板的作用之后,每个像素点只能感应到一种颜色。必须要找到一种方法来复原该像素点其它两个通道的信息,寻找该点另外两个通道的值的过程就是颜色插补的过程。由于图像是连续变化的,因此一个像素点的R、G、B的值应该是与周围的像素点相联系的,因此可以利用其周围像素点的值来获得该点其它两个通道的值。目前最常用的插补算法是利用该像素点周围像素的平均值来计算该点的插补值。如下图所示,左侧是RAW域原始图像,右侧是经过插值之后的图像。
8.AWB(Automatic White Balance)-自动白平衡
人类视觉系统具有颜色恒常性的特点,因此人类对事物的观察可以不受到光源颜色的影响。但是图像传感器本身并不具有这种颜色恒常性的特点,因此,其在不同光线下拍摄到的图像,会受到光源颜色的影响而发生变化。例如在晴朗的天空下拍摄到的图像可能偏蓝,而在烛光下拍摄到的物体颜色会偏红。因此,为了消除光源颜色对于图像传感器成像的影响,自动白平衡功能就是模拟了人类视觉系统的颜色恒常性特点来消除光源颜色对图像的影响的。
9.CCM(Color Correction Matrix)-颜色校正
颜色校正主要为了校正在滤光板处各颜色块之间的颜色渗透带来的颜色误差。一般颜色校正的过程是首先利用该图像传感器拍摄到的图像与标准图像相比较,以此来计算得到一个校正矩阵。该矩阵就是该图像传感器的颜色校正矩阵。在该图像传感器应用的过程中,及可以利用该矩阵对该图像传感器所拍摄的所有图像来进行校正,以获得最接近于物体真实颜色的图像。
一般情况下,对颜色进行校正的过程,都会伴随有对颜色饱和度的调整。颜色的饱和度是指色彩的纯度,某色彩的纯度越高,则其表现的就越鲜明;纯度越低,表现的则比较黯淡。RGB三原色的饱和度越高,则可显示的色彩范围就越广泛。
一般在不同增益环境下CCM的饱和度会有所不同。例如,低照度小我们可以适当调低CCM饱和度以减轻低照度下色噪。因此,一般ISP会留出接口以便对不同增益下CCM饱和度调整,对一倍增益校正出的CCM参数进行插值计算,计算得到不同增益下较为合适的CCM参数。
10.RGB Gamma-Gamma校正
伽马校正的最初起源是CRT屏幕的非线性,研究CRT电子枪的物理表明,电子枪的输入电压和输出光之间满足5.2幂函数关系,即荧光屏上显示的亮度正比于输入电压的5/2次方,这个指数被称为伽马。这种关系源于阴极、光栅和电子束之间的静电相互作用。由于对于输入信号的发光灰度,不是线性函数,而是指数函数,因此必需校正。
但是实际情况是,即便CRT显示是线性的,伽马校正依然是必须的,是因为人类视觉系统对于亮度的响应大致是成对数关系的,而不是线性的。人类视觉对低亮度变化的感觉比高亮度变化的感觉来的敏锐,当光强度小于1lux时,常人的视觉敏锐度会提高100倍t2118]。伽马校正就是为了校正这种亮度的非线性关系引入的一种传输函数。校正过程就是对图像的伽玛曲线进行编辑,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果,以对图像进行非线性色调编辑。由于视觉环境和显示设备特性的差异,伽马一般取2.2~2.5之间的值。当用于校正的伽马值大于1时,图像较亮的部分被压缩,较暗的部分被扩展;而伽马值小于1时,情况则刚好相反。
现在常用的伽马校正是利用查表法来实现的,即首先根据一个伽马值,将不同亮度范围的理想输出值在查找表中设定好,在处理图像的时候,只需要根据输入的亮度,既可以得到其理想的输出值。在进行伽马校正的同时,可以一定范围的抑制图像较暗部分的噪声值,并提高图像的对比度。还可以实现图像现显示精度的调整,比如从l0bit精度至8bit精度的调整。上图分别是未做Gamma校正的,下图是做了Gamma校正的。
11.RGBToYUV
YUV 是一种基本色彩空间, 人眼对亮度改变的敏感性远比对色彩变化大很多, 因此, 对于人眼而言, 亮度分量 Y 要比色度分量 U、 V 重要得多。另外,YUV色彩空间分为YUV444,YUV422,YUV420等格式,这些格式有些比原始RGB图像格式所需内存要小很多,这样亮度分量和色度分量分别存储之后,给视频编码压缩图像带来一定好处。
12.WDR(Wide Dynamic Range)-宽动态
动态范围(Dynamic Range)是指摄像机支持的最大输出信号和最小输出信号的比值,或者说图像最亮部分与最暗部分的灰度比值。普通摄像机的动态范围一般在1:1000(60db)左右,而宽动态(Wide Dynamic Range,WDR)摄像机的动态范围能达到1:1800-1:5600(65-75db)。
宽动态技术主要用来解决摄像机在宽动态场景中采集的图像出现亮区域过曝而暗区域曝光不够的现象。简而言之,宽动态技术可以使场景中特别亮的区域和特别暗的区域在最终成像中同时看清楚。
13.3DNR
3dnr 是结合空域滤波和时域滤波的一种降噪算法。大概思路是检测视频的运动水平,更具运动水平的大小对图像像素进行空域滤波和时域滤波的加权,之后输出滤波之后的图像。
14.Sharp-锐化
CMOS输入的图像将引入各种噪声,有随机噪声、量化噪声、固定模式噪声等。ISP降噪处理过程中,势必将在降噪的同时,把一些图像细节给消除了,导致图像不够清晰。为了消除降噪过程中对图像细节的损失,需要对图像进行锐化处理,还原图像的相关细节。如下图所示,左图是未锐化的原始图像,右图是经过锐化之后的图像。
为了避免把Noise enhance出来,sharp在实现中还需要判断当前像素处于光滑区域还是物体边缘。当处于光滑区域的时候,则不要做sharp运算,或者做的幅度很小;只有在较明显的边缘上才做处理,这样避免不了边缘上的noise的影响,所以在锐利度s设定较大的时候,可以发现边缘上会有Noise闪动跳跃的情况。为了缓解这种Noise的跳跃,通常会对f(d, g, s)做最大值和最小值限制保护,并且沿着edge 方向做低通滤波来缓解Noise。
sharp大致流程为先判断平坦区域还是边缘,对平坦区域可以不做或者少做sharp(甚至做smooth处理),对边缘要判断幅度大小,边缘方向,选则相对应的高通滤波器处理,最后对enhance的幅度做一定程度的保护处理。
边缘增强模块对图像的亮度分量(Y数据)进行操作来增强图像质量。首先按固定系数2D线性滤波器滤波计算边缘锐度sharpness(h,v)。sharp_shrink之后还可以结合查找表改变其锐化强度,然后再进行shoot的限制操作。
clip与shrink函数表达式如下:
两者函数图像如下图所示:
shrink函数把高频锐化结果靠近0的部分都强制设为0,即比较平滑的部分不做锐化处理;远离0的部分适当减小其锐化强度。当高频锐化结果x比th比较大或比较小,如果x比th较大,那么适当在x的基础上减小一点,减低白边的锐化强度;如果x比-th较小,那么在x的基础上适当增加一点,降低黑边的锐化强度 。
15.AF(Automatic Focus)-自动对焦
自动对焦模块理论基础及其硬件实现浅析(一) 自动对焦模块理论基础及其硬件实现浅析(二) 自动对焦模块理论基础及其硬件实现浅析(三) 自动对焦模块理论基础及其硬件实现浅析(四)
16.AE(Automatic Exposure)-自动曝光
不同场景下,光照的强度有着很大的差别。人眼有着自适应的能力因此可以很快的调整,使自己可以感应到合适的亮度。而图像传感器却不具有这种自适应能力,因此必须使用自动曝光功能来确保拍摄的照片获得准确的曝光从而具有合适的亮度。
AE 模块实现的功能是:根据自动测光系统获得当前图像的曝光量,再自动配置镜头光圈、sensor快门及增益来获得最佳的图像质量。自动曝光的算法主要分光圈优先、快门优先、增益优先。光圈优先时算法会优先调整光圈到合适的位置,再分配曝光时间和增益,只适合p-iris 镜头,这样能均衡噪声和景深。快门优先时算法会优先分配曝光时间,再分配sensor增益和ISP 增益,这样拍摄的图像噪声会比较小。增益优先则是优先分配sensor增益和ISP 增益,再分配曝光时间,适合拍摄运动物体的场景。
自动曝光的实现一般包括三个步骤:光强测量、场景分析和曝光补偿。光强测量的过程是利用图像的曝光信息来获得当前光照信息的过程。按照统计方式的不同,分为全局统计,中央权重统计或者加权平均统计方式等。全局统计方式是指将图像全部像素都统计进来,中央权重统计是指只统计图像中间部分,这主要是因为通常情况下图像的主体部分都位于图像的中间部分;加权平均的统计方式是指将图像分为不同的部分,每一部分赋予不同的权重,比如中间部分赋予最大权重,相应的边缘部分则赋予较小的权重,这样统计得到的结果会更加准确。场景分析是指为了获得当前光照的特殊情况而进行的处理,比如有没有背光照射或者正面强光等场景下。对这些信息的分析,可以提升图像传感器的易用性,并且能大幅度提高图像的质量,这是自动曝光中最为关键的技术。目前常用的场景分析的技术主要有模糊逻辑和人工神经网络算法。这些算法比起固定分区测光算法具有更高的可靠性,主要是因为在模糊规则制定或者神经网络的训练过程中已经考虑了各种不同光照条件。在完成了光强测量和场景分析之后,就要控制相应的参数使得曝光调节生效。主要是通过设定曝光时间和曝光增益来实现的。通过光强测量时得到的当前图像的照度和增益值与目标亮度值的比较来获得应该设置的曝光时间和增益调整量。在实际情况下,相机通常还会采用镜头的光圈/快门系统来增加感光的范围。
在进行曝光和增益调整的过程中,一般都是变步长来调整的,这样可以提高调整的速度和精度。一般来讲,增益和曝光的步长设定如下图所示:
从上图中可以看出,在当前曝光量与目标量差别在range0以内的时候,说明当前曝光已经满足要求,不需要进行调整;差别在rangel的范围内时,则说明当前曝光与要求的光照有差别,但差别不大,只需要用较小的步长来进行调节即可;当差别在range2的时候,则表明差别较大,需要用较大步长来进行调节。在实现过程中还需要注意算法的收敛性。
实际应用中,AE曝光时间和增益的调整大致如下图所示:
弱曝、过曝、曝光合适实际效果图:
曝光合适
由于在对视频流做处理时,有些操作往往不是立即生效的。例如在自动曝光的处中,需要计算全局的亮度平均值。由于这个过程涉及到一帧中的所有像素点,所以在一帧图像输出完成之后才能得到亮度平均值。那么自动曝光所得到当前帧的计算结果,只能去调节下一帧的亮度,而无法影响当前帧。这个现象很普遍,只要程序存在全局的参数,就不可能在当前帧中得到计算结果。所以需要将第N帧数据计算出的参数或是结果,传递给第N+1帧,在第N+1帧中直接使用这个参数进行其他的计算,或者直接输出调整后的结果,我们将这种方法叫做帧迭代方法。虽然这个参数并不是根据地N+I帧数据计算出来的,但是由于相邻帧之间有很大的连续性,所以可以认为它们计算出来的全局变量是相同的,这样就可以实现正确并且实时的处理了。这种方法同样适用于AWB、3DNR、HDR模块。
因此,当前帧显示的直方图以及亮度信息均是统计于前一帧的直方图和亮度信息,当前帧根据这些统计信息再进行AE策略的调整。
当曝光误差超过容许值需要调整时,算法需要计算两个值,即
当前帧的曝光量,由sensor 曝光时间、sensor 增益、ISP 增益组成。需要注意的是,sensor 的曝光时间和增益通常是非连续的,很可能与AE算法输出的目标参数并不相同,所以当前曝光参数的准确值需要通过sensor 驱动从sensor 寄存器中直接读取,而不能使用AE算法缓存的目标值。
增益系数,g=target/measured, 其中target 为理想画面亮度, measured 为当前画面亮度的实测值。由于sensor 的本质是一个线性元件,若暂不考虑像素饱和等非线性因素,只要在当前曝光总量的基础上乘以系数g,就可以使画面目标亮度达到理想值。因此AE 算法的核心任务就是计算正确的g参数,这个参数能够使画面得到正确的曝光。
当计算出正确的亮度参数后,一般并不会让其立刻在下一帧图像就生效。这是因为如果增益变化较大,图像就会产生闪烁,主观感受不好。通常人们更喜欢画面平滑过渡,因此每帧图像的增益变化不宜过大。实现平滑的方法就是给新的参数人为施加一个阻尼,使其缓慢地向新参数过渡。用数学公式描述就是
g(n)= (1-s) * g(n-1) +s * g_target
不妨取 s=0.2,此时每个g参数包含80%的旧参数和20%的目标参数,经过若干帧后旧参数自然衰减,新参数收敛到目标参数,即 g(n)=g_target
从数学上看 (1-0.2)^10=0.1, (1-0.2)^30=0.001, 说明10帧之后(约0.3秒)旧参数的比重下降到10%,30帧之后(约1秒)旧参数的比重可忽略。对于典型的安防应用场景,一般建议经过8~16帧图像过渡到理想亮度。而对于运动和车载型应用,由于场景动态变化大且快,一般建议经过3~4帧图像过渡到理想亮度。
具体计算:
假设g(0) = 20; g_garget=45,则由阻尼公式可知:
n=1时,g(1) = 0.820+0.245;
n = 2时,g(2)=0.8g(1)+0.245=
n=3时,g(3)=0.8g(2)+0.245 =
n = 4时,g(4) = 0.8g(3)+0.245 =
参数分解
当根据路径规划策略计算出下一帧的g参数后,需要遵循一定的策略和约束把g参数进一步映射为sensor 曝光时间、sensor 增益、ISP 增益等设备控制参数。如前所述,曝光时间可以提高图像信噪比,所以在约束边界内应尽可能先将曝光时间用满,然后依照sensor 的硬件约束分配sensor 增益,最后将剩余的增益全部分配给ISP 数字增益。
参数同步
前面分解出来的控制参数必须同步生效才能使画面获得预期的曝光。如果某一项参数未能与其他几项同步生效,则画面会因为短暂过亮、过暗等原因出现闪烁,这是需要避免的。
另一方面,所有参数都需要在一个特定的时间窗口内生效,即前一帧图像已经结束,新一帧图像尚未开始的这段时间,也就是sensor的垂直消隐(vertical blanking)窗口,这个窗口时间很短,典型值在3~5毫秒左右,更短的可以到1ms,如下图所示。
目前主流的sensor都是使用I2C总线进行寄存器读写,而I2C总线的最大时钟频率是400kHz,读写一个16bit寄存器差不多每次需要0.1ms,而完成一帧图像的相关配置常常需要10~20次以上读写,所以在垂直消隐区完成sensor 寄存器配置时间压力是很大的。而且这还是单纯的配置参数,并不考虑3A算法本身所需的计算时间。实际上,在常见的软件硬件架构中,就是把全部消隐时间都分配给3A算法往往都是不够用的。
如果配置sensor 增益时错过了这个窗口,新一帧图像已经开始,则画面的亮度就会在一帧中间发生变化,上半部分使用旧的参数,下半部分使用新的参数,这种情况也是闪烁的一种,是需要避免的。
现在的sensor 为了方便使用,缓解配置参数时间窗口过短的压力,往往都支持一组影子(shadow)寄存器,需要同步生效的参数(曝光时间和增益)可以在任何时间点写入shadow寄存器,当sensor开始捕捉新的一帧图像之前,会自动把shadow 寄存器的内容同步到实际生效的寄存器,这样就把几个毫秒的时间窗口扩展成一帧时间,极大地缓解了用户压力。
需要注意的是,虽然这个方案为软件争取到了一帧的缓冲时间,但同时也意味着系统的响应延迟(latency)增加了一帧,即根据第N帧统计数据生成的新控制参数只能在第N+2帧才开始生效,因为软件需要第在N+1帧时间内完成算法的计算工作。同理,根据第N+2帧统计生成的新控制参数需要在第N+4帧才开始生效,以此类推。因此,如果环境光照条件在第N+1帧发生剧变,算法会在第N+2帧结束时检测到画面异常,在第N+3帧中计算出新的参数,在第N+4帧中实际进行补偿。
事实上,如果CPU的任务比较繁忙,或者每帧的时间很短,则一帧的时间可能还不一定够3A算法完成所有计算,此时则需要考虑继续增加一帧的缓冲时间。
在跑3a算法时,曝光的改变策略
调试摄像头曝光很多时候都是以行算的,也就是常说的曝光行。当然算曝光时间是曝光行*每行的时间
一般曝光时间不超过vts,vts就是一帧花的总时间(包含每帧的无效信号)。因此,我们在计算当前帧最大曝光时间的时候,一般会根据VTS计算得出
除了曝光能增加亮度之外,gain也能增加亮度,gian也分为模拟gain和数字gain以及ISPgain
曝光时间引入的噪声最小,数字增益引入的噪声最大 根据上面所说,假如在比较暗的情况下,为了减少噪声,势必先增加曝光时间。因为增加曝光时间引入的噪声最小,可以会略不计。但是当曝光时间超过当前vts时候,曝光时间超过一帧的时间,这样会引起帧率降低,那么这个时候可以增加gain值,模拟gain和数字gain都是有最大限制的,所有的增加gain值都是优先使用模拟gain,当模拟gain增加到最大之后,才考虑使用数字gain。
关于3a中的ae,实际都有策略做曝光分解,在帧率与噪声中调和,在实际应用中,如果策略分解到曝光时间大于当前vts,那么正常需要先增加当前vts(每帧时间增加,也意味着帧率减小),然后加大曝光时间。
以上可以回答为什么亮的地方帧率会比暗的帧率高。
参考资料:
ISP概述、工作原理及架构
相机系统综述 —— ISP
Understanding Auto Exposure Control
3A+ISP之ISP篇
《CMOS sensor cross-talk compensation for digital cameras》
参考文献链接
https://mp.weixin.qq.com/s/RBzN1Ii3_AH3omljmAByNA
https://mp.weixin.qq.com/s/lxcJ_QFILTW3_PgP2oOkug