1. 简介
1.1 常用知识
要调的模块,先Enable, 调完后点ApiApply 调整步骤: 1)AE Table (AEPlainLongTbl) 2)OBC: 在线性模式把OBC调好,HDR把长曝的OBC复制到短曝就可以 3)AWB (6500-D65, 4000-TL84, 3000-U30) 4)ALSC (AE Target: 1500 所有值一样, 6500, 4000, 3000) CWF: 4150 5)再次确认AWB (微调) 6)Gamma (拉Gamma曲线,最下面一行灰度RGB值接近原图, Gamma调亮度,不平滑,图像会有孔洞, 协调自然亮度和主观灰阶感受这二者的映射关系) 7)CCM (调颜色 0 = 8192, 行之sum为1024,先write, 再read, sum自动更新, 主要调RGB三种颜色,分别调列RGB, 值大,权重大) 8)清晰度(sharpness, 原则:不能有严重的锯齿, 黑白边不能太强, 噪声不能太多) 9)3DNR, 2DNR, NRLuma 调清晰度+降噪 AE Target offset: 画面的目标亮度 AE Target BV: 环境的亮度 Index的值由Total Gain决定 (如AE Index) Gamma:
输出=输入/伽马 斜率高于1的Gamma值将会造成输出暗化,低于1的Gamma值将会造成输出亮化 Gamma曲线:横轴:自然界线性增长的亮度, 纵轴:人心理上感受到的均匀灰阶 阳光下色温: 5135, 室内色温:6166 运动物体周边更亮:调WDR GlobalDrakToneEnhance 把阴影调亮:调WDR PreEnhance 去掉雪花噪声:调NR3D MG.Gain 锯齿:NR3D (强度减弱) 背景有雾:调WDR 板子启动:
insmod /config/modules/4.9.84/g_webcam.ko streaming_maxpacket = 3072 uac_function_enable = 0 uvc_function_enable = 0 rndis_function_enable = 1
./customer/mixer -m 180 -q
> hdr 1
rtsp://192.168.159.8/video0
insmod /config/modules/4.9.84/g_webcam.ko streaming_maxpacket = 3072 uac_function_enable = 0 uvc_function_enable = 1 rndis_function_enable = 0
./prog_uvc -a 0 -A 0 -i /customer/mi_demo/gc2093.bin
1.2 缩略语
ISP:Image Signal Processing(图像信号处理 ,主要功能有线性纠正、噪声去除、坏点去除、内插、白平衡、自动曝光控制等,依赖于ISP才能在不同的光学条件下都能较好的还原现场细节,ISP技术在很大程度上决定了摄像机的成像质量)
ISP:Image Signal Processor(像信号处理器)
HDR:High-Dynamic Range (双帧合成的高动态范围图像)
WDR:Wide Dynamic Range(单帧处理的高动态范围图像)
DRC:Dynamic Range Compression (宽动态)
VPE:Video Process Engine(图像处理引擎,负责对一帧输入图像进行图像质量调整)
CFA:Color Filter Arrays(彩色滤波阵列)
BPC:Bad PixelCorrection (坏像素校正)
DPC:Defect Pixel Correction(坏点校正)
BPD:Bad Pixel Detect(坏点检测)
FPN:Fix Pattern Noise(固定模式噪声)
EV:Exposure Value(曝光值)
BV:Brightness Value (亮度值)
NR:Noise Reduction/Denoise(去噪)
CT:Color Temperature(色温)
DM:Demosaicing/Color Filter Array Interpolation/CFA插值
EE:Edge Enhancement/Edge Sharpening(锐化,边缘增强)
Demosaic:颜色插值
PCA/VDE:Hue,Saturation,Contrast,Brightness调试
3A:AE+AWB+AF
BT:Bright Tone (明亮的色调)
DT:Dark Tone(深色调)
AE:Automatic Exposure (自动曝光)
AWB:Automatic White Balance (自动白平衡 )
AF:Automatic Focus(自动聚焦)
BLC:Black Level Correction(黑电平校正)
OBC: Black Level Compensate (黑电平补偿)
CCM:Color Correction Matrix (色彩校正矩阵)
LSC:Lens Shading Correction(镜头阴影校正, 只校正Y Shading,工作原理:根据标准光源的raw图生成相应的LSC table,以补偿该光源下的中心到四周的亮度阴影和色彩偏差)
ALSC:Auto Lens Shading Correction(自动镜头阴影校正,同时校正Color Shading和Y Shading,工作原理:自动计算生成适合当前场景的LSC table,以消除该场景下的中心到四周的亮度阴影和色彩偏差)
LS:Lens Shading分为Luma shading(亮度阴影)和Color shading(色彩偏差)
Luma shading:产生的原因是镜头通光量从中心到边角依次减少,导致图像看起来,中间亮度正常,四周偏暗。 Color shading:称作色彩不均匀性,在不同色温下RGB三原色的透射能力不同,拍照时表现为图像色彩不均匀。 Normal mode :表示为Linear mode(single frame) 和HDR mode(2 frames)
Combine mode :表示为Sensor端完成长、短曝光的合成影像包含影像数据压缩程序
AE Target : ISP 希望 sensor 输出的图片达到的亮度(目标亮度 :通常根据环境亮度BV设置对应的值),对于第一次进相机,ISP 检测到当前帧的亮度 cur_luma 低于目标亮度 target_luma,就会增大 exp_index 获取新的 gain & line_count 进行重新曝光,直到 cur_luma 和 target_luma 相当
ES:Exposure Strength (曝光强度 = 曝光时间 * 光圈大小 * ISO)
1.1 Sensor动态范围
Sensor的动态范围:就是sensor在一幅图像里能够同时体现高光和阴影部分内容的能力。 用公式表达这种能力就是:
d
r
=
20
l
o
g
10
(
i
m
a
x
/
i
m
i
n
)
dr = 20 log_{10}({i_{max}/i_{min}})
d r = 20 l o g 10 ( i ma x / i min )
d
r
dr
d r :单位为dB
i
m
a
x
i_{max}
i ma x :是sensor的最大不饱和电流,也可以说是sensor刚刚饱和时候的电流
i
m
i
n
i_{min}
i min :是sensor的底电流(blacklevel)
2. 常用算法
2.1 BLC
定义 :黑色数据的最低电平值,通常指感光图像数据为0时对应的sensor信号电平值形成成因 :
CMOS传感器采集的信息经过一系列转换生成原始RAW格式数据。以8bit数据为例,单个pixel的有效值是0~255,但是实际AD芯片(模数转换芯片)的精度可能无法将电压值很小的一部分转换出来,因此,sensor厂家一般会在AD的输入之前加上一个固定的偏移量,使输出的pixel value在5(非固定)~255之间,目的是为了让暗部的细节完全保留,当然同时也会损失一些亮部细节,由于对于图像来说,我们的关注度更倾向于暗部区域,ISP后面会有很多增益模块(LSC、AWB、Gamma等),因此亮区的一点点损失是可以接受的。 sensor的电路本身会存在暗电流,导致在没有光线照射的时候,像素单位也有一定的输出电压,暗电流这个东西跟曝光时间和gain都有关系,不同的位置也是不一样的。因此在gain增大的时候,电路的增益增大,暗电流也会增强,因此很多ISP会选择在不同gain下减去不同的BL的值。 若sensor输出raw数据中有附加的黑电平值,需要在ISP最前端去干净。如果不去干净,干扰信息会影响后端ISP各模块的处理,尤其会导致AWB容易不准,出现画面整体偏绿或者整体偏红现象。 校正方法
一般BLC模块会放在ISP比较靠前的位置,因为我们希望图像在进入其他模块之前能够还原最为真实的图像。有些sensor会在sensor内部集成BLC的模块,那么此时ISP里的BLC模块只做微调即可 由于硬件设计人员在设计BLC模块时需要考虑效果和成本,因此目前市场上使用的ISP一般采用的方法是在sensor输出的图像上减去一个固定数值,该固定值,对RGB各通道可以是一样,也可以是不一样,目前大多数厂家如安霸、海思等基本都是采用该方案 利用黑电平随温度和gain的漂移曲线,利用一次函数的方式进行校正,但是对于不同sensor,漂移曲线不一样,因此该方案没有作为通用方案
2.2 AWB (处理色温引起的偏色问题)
由于sensor 上R、G、B pixel的感光特性不同,因此在不同光源下看到的灰阶会有色偏,AWB主要的目的就是希望自动找出一组Rgain、Bgain来做补偿,让画面中灰阶的地方R、G、B值尽量接近。 AWB的统计值是将整张画面切成128×90个等分,每个等分都具有代表的R、G、B值,预设横轴有做取样来减少运算量,因此实际只有64×90个统计值。如果想查看某个场景的统计信息,可以开启AWB Analyzer外挂程式,点击Update可更新为当时的统计信息,图表横周轴代表(R/G)×100,纵轴代表(B/G)×100,因此每个区块都能以本身的R、G、B值算出一组座标,并将落点以绿点显示在窗口上,如下所示。
2.2.1 色温(Color Temperature:温度越低色温越高)
定义 :光源色温的定义为与此光源发出相似的光的黑体辐射体所具有的开尔文温度。单位 :色温是表示光线中包含颜色成分的一种计量标准,色温的单位是“K”,也叫“开尔文色温表
红——橙红——黄——黄白——白——蓝白的渐变过程 常见光的色温
蓝色属于高色温,大约9300K;中午的日光属于中等色温,大约5500K;蜡烛的橙黄色属于低色温,大约1700K
2.2.2 为什么需要AWB (消除光源颜色的影响)
人类视觉系统具有颜色恒常性的特点,因此人类对事物的观察可以不受到光源颜色的影响。但是图像传感器本身并不具有这种颜色恒常性的特点,因此,其在不同光线下拍摄到的图像,会受到光源颜色的影响而发生变化。例如在晴朗的天空下拍摄到的图像可能偏蓝,而在烛光下拍摄到的物体颜色会偏红。因此,为了消除光源颜色对于图像传感器成像的影响,自动白平衡功能就是模拟了人类视觉系统的颜色恒常性特点来消除光源颜色对图像的影响的。 Sensor原始图像中的白色如果不经AWB处理,在高色温(如阴天)下偏蓝,低色温下偏黄,如宾馆里的床头灯 这张图可以理解为在多光源下的白平衡调整.阴影色温比阳光下色温要高一些,如果阳光下是5000k,阴影可能是7000k .有光就有影,它们经常出现在一个镜头里,对着其中一个色温调,另一边就会偏色.为了整体效果好,要把翘翘板平衡起来,可以加一些策略在里面。
2.2.3 AWB的目标
对于白色物体,如果它周围的光线色温较低,那么它看起来就会偏微红色; 相反,如果它周围的光线色温较高,那么它看起来就会偏微蓝色。因此,AWB的作用就是用来处理图像的色彩,使其看起来更加接近自然色 为了让人主观上认可拍出来的图,必须把不同光照下的物体颜色纠正成人眼认同的颜色。比如 ,不同光照下的白色区域RGB值不相等,但为了满足人眼,需要把它们调成相等。白色区域配平后,RGB三个通道分别得到一个调节系数,其他像素也根据这系数做调整,就叫做白平衡。 上图中,左边是原图像,可以很明显的看到处于一种暖色调的状态,以至于原本是白色的云也显得偏暖偏黄;而右边的图是经过自动白平衡处理后的结果图像,可以看出白云蓝天回归了正常的色彩,还有建筑也显得更加真实、自然,符合人眼观感。
2.2.4 如何实现自动白平衡 (先确定色温然后找对应调节系数)
为了适应人眼视觉的特点,相机厂家会把常见的光源条件下,其相机产品的对应白平衡参数调出来,让用户自动去选择拍摄的场景和对应的参数组。但对于普通用户,还是希望简单粗暴直接的一个按钮搞定,所以相机自己就需要识别当前场景的光源色温,根据色温类型查找对应的RGB平衡参数,这就是自动白平衡(AWB)。
2.3 CCM (还原色彩和饱和度)
一般来说sensor 对光谱的响应,在 RGB 各分量上与人眼对光谱的响应通常是有偏差的,通常通过一个色彩校正矩阵CCM(Color Correction Matrix)校正光谱响应的交叉效应和响应强度,使前端捕获的图片与人眼视觉在色彩上保持一致。 色彩还原 :通常通过一个色彩校正矩阵校正光谱响应的交叉效应和响应强度,使ISP 处理后的图片与人眼视觉在色彩上保持一致。饱和度 :也称色彩的纯度。取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。离线校准工具 Calibration Tool 支持 3x3 Color Correction Matrix 的预校正。在 ISP 运行时,FW 根据当前的光照强度,调整饱和度,实现 CCM(Color Correction Matrix)矩阵系数的动态调整。 CCM矩阵
2.4 AE (根据统计值将画面整体亮度控制在一个理想的状态)
AE 的目的在于通过收到的统计值将画面整体亮度控制在一个理想的状态。我们一般是根据目前的环境亮度来确定我们需要调到的一个目标亮度Target 。AE有一个内收敛和外收敛区间,这就决定了Target是一个区间而不是一个确定值 。 内收敛区间 :是我们需要从当前亮度调至目标亮度的区间内,就停止收敛。外收敛区间 :是稳定时亮度在目标亮度的区间外,则开始进行收敛。一般主要是根据不同的环境亮度来配置目标亮度,然后配置曝光行程表 。配置Target时要注意值的大小,避免跳档。配置曝光行程表是要做到每个档位的变化只修改一个变量,避免跳档时图像变化过大。 AE Target Offset与AE Target的关系 :AE Target与曝光行程表的关系 :
2.4.1 AE自动曝光不等于亮度
自动曝光 = ISO(感光度) x 光圈 x 曝光时间,使得Sensor输出或者使得ISP在AE测光之前的图像输出达到一定的亮度亮度 :是指最终的成像效果,除了AE之外,还包含后面的gamma、Tone mapping、Multi frame HDR… 对图像输出的处理
2.4.2 RAW格式
RAW图像 :就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据,表示Sensor接受到的各种光的强度,是Sensor输出的数据格式。
RAW文件是一种记录了数码相机传感器的原始信息 同时记录了由相机拍摄所产生的一些元数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件 RAW格式 :Raw 在输出时具有一定的顺序格式,一般分为四种:
值 格式 00 GR/BG 01 RG/GB 10 BG/GR 11 GB/RG
假设一个Sensor的像素是88(分辨率为8 8),那么这个sensor就有8*8个感光点,每个感光点就是一个晶体管。那么对于上表中四种排列格式的rawRGB数据如下图所示: 因为人眼对绿色比较敏感,所以增强对绿色的采样,每种格式中存在两个G分量。其中每个分量代表一个pixel,所以GR/BG代表4个pixel,就表示sensor上面的4个晶体管,每个晶体管只采集一个颜色分量,然后通过插值计算出每个pixel的其他分量 ,目的是降低功耗。 RAW位数
RAW8:用8bit表示G/R/G/B中的一个分量 RAW10:用10bit表示G/R/G/B中的一个分量,但是数据中是16bit,高6位没用 RAW12:用12bit表示G/R/G/B中的一个分量,但是数据中是16bit,高4位没用
2.4.3 AE统计模块
AE模块一般由 ISP的 AE统计模块 和AE控制策略算法 两部分组成 AE 统计模块 :通常是硬件模块,一般在LSC/WB之后, AE提供的统计信息包括亮度直方图和亮度区域统计值 可同时提供整幅图像的 256 段直方图和 R/Gr/Gb/B 四分量平均值统计信息,还可提供将整幅图像分成 MxN 区块的每个区块的 R/Gr/Gb/B 四分量平均值统计信息
2.4.4 AE算法模块
AE算法模块是根据ISP AE统计模块的数据,进行实时计算,然后配置新的曝光参数写给Sensor 合适的曝光:从人眼可见的亮度、直方图两种维度去看什么是合适的曝光 (这是感观上的)
2.4.5 曝光误差的量化
当前曝光值和定义的标准曝光值之前的偏差就叫曝光误差,首先我们先确定一个曝光标准,就是欠曝和过曝的时候,向正确的曝光标准去矫正,我们以“18%中性灰”作为人眼可以接受的标准亮度; 一般软件的计算公式:
Exposure ^gamma(0.45) = pixel_value Log(exposure) = log(pixel_value) /gamma exposure_error = △( log (Exposure) ) 18%中性灰
要说清楚曝光的原理就首先要说人眼的视觉,人眼对观察到的亮度变化是一种对数压缩规律:
比如亮度为 1000 烛光/平方米的一个东西,和亮度为 500 烛光/平方米的一个东西,虽然他们亮度相差 500,人眼认为他们亮度差一倍 比如亮度为 10 烛光/平方米的一个东西,和亮度为 5 烛光/平方米的一个东西,虽然他们亮度相差只有 5,人眼认为他们亮度也差一倍 这种对数压缩 使我们既能看清楚亮度极高的蓝天白云,又能看清楚烛光下的生日蛋糕 18%灰在人眼看来,做过对数压缩后,正好是 100%的中间,所以用 18%反光率的灰板作为中级灰(中间调、中度灰)是非常科学的 当灰板的反光率从 3.6%(基本就是 0)变到 90%(基本就是 100%)时,人眼观察到的亮度变化, 18%灰正好是中心,所以把它作为标准 一般来说,自然界不主动发光,只是反射光线的物体,其反光率都在 3.6%到 90%之间,所以用反光率 18%的灰板来作为标准也是比较符合实际情况的
2.4.6 计算AE Target
2.4.6.1 均值法
利用均值法得出AE targert,均值法就是要满足当前场景亮度的平均反射率等于18%中性灰的反射率这个假设,来得出此时是曝光正确的 Gamma的计算公式:
O
u
t
p
u
t
=
255
×
(
I
n
p
u
t
/
255
)
1
/
g
a
m
m
a
I
n
p
u
t
=
255
×
(
O
u
t
p
u
t
/
255
)
g
a
m
m
a
Output = 255 \times (Input/255)^{1/gamma} \\ Input = 255 \times (Output/255)^{gamma}
O u tp u t = 255 × ( I n p u t /255 ) 1/ g amma I n p u t = 255 × ( O u tp u t /255 ) g amma 在经过gamma后的亮度值是122 (这是色卡厂家提供的24个patch的标准rgb空间下的理论值,是带了2.2gamma的),把122代入进去,结果是约等于50 , 也就是说AE的目标就是把图像的平均亮度在gamma前调整到50 。
255
∗
(
122
/
255
)
2.2
=
50
255 * (122/255)^{2.2} = 50
255 ∗ ( 122/255 ) 2.2 = 50
2.4.6.2 均值法的局限
均值法是基于图像平均反射率等于18%灰这个假设,但当场景中背景色彩单一的时,这个假设就不成立 比如背景中白色较多,或者黑色较多的时候,如下图右上角的灰卡实际是18%反射率的色卡,但由于背景全白,出现视觉误差,出现欠曝 为了视觉上将其纠正为18%灰,就必须增加亮度,反之当背景全黑时,就会出现过曝 (也就是摄影中的白加黑减原理)
2.4.6.3 均值法AE的改进(直方图法)
因为上面的缺点,在均值法的基础上,引入了直方图的方法,利用了直方图均衡,过程如下:
图1中亮度值达到了平均值,但是分布于低亮度的pixel太多,图像细节较少,对比度小 通过直方图均衡化后,图2和图4可以看出对比度增大,此时再去做均值法曝光 直方图均衡的效果 :
2.4.6.4 AE算法要求
AE算法的要求是“快,准,稳”。即要很快的能收敛到target附近,而且亮度要准确,收敛过程要平滑,收敛完成后要稳定 影响AE算法的因素:图片亮度的统计,AE target,AE table,收敛速度控制 实际操作中调节的因素有:调节曝光时间,调节光圈大小,调节Sensor的ISO感光度
2.4.6.5 曝光三角形 Exposure Triangle
自动曝光算法可以理解为一个伺服系统,它不断监控ISP生成的每一帧图像的曝光状态,如果发现采集到的状态与理想目标发生偏离(超过容许范围)则立即进行干预响应,使系统尽快回到容许的工作范围内。
在一个响应周期内,AE算法需要处理的具体事项是:
根据ISP 硬件生成的图像曝光统计数据评估当前图像的曝光质量 如果曝光质量需要调整,则根据当前的工作参数和理想曝光目标生成下一帧图像的工作参数 将新的工作参数写入各硬件设备,驱动光圈、sensor 快门及增益到达新的位置 AE 算法的第一个任务是评估当前图像的曝光质量,大体上可以分成曝光不足、曝光适当、曝光过度三种情况。
人类使用肉眼观察比较容易判断一副图像是否曝光适当,但是AE 算法需要一定的客观标准来精确地定义什么是曝光适当。目前主流的ISP 硬件都会提供关于图像的直方图统计数据,AE 算法可以利用直方图的均值来判断图像是否曝光适当。对于多数场景而言,当图像直方图的均值位于设备动态范围的一半位置时,画面的曝光质量通常是比较理想的
AE调控对象(四个参数) :
光圈 Sensor积分时间 (曝光时间) Sensor增益(包含模拟增益和数字增益) ISP数字增益 曝光三角形 Exposure Triangle
光圈(aperture)的副作用主要是影响景深 快门(shutter)的副作用主要是影响运动模糊。一般而言,当曝光时间大于15ms时,画面中速度大于40km/h的车辆就会开始变模糊。当曝光时间大于30ms时,画面中走动的人就会变模糊。因此,拍摄对象的预期移动速度基本上决定了曝光时间的上限 增益(ISO)的副作用主要表现为画面噪声,尤其是数字增益会引入较大的噪声,显著降低图像质量 光圈、快门和增益三者的效能 :
2.4.6.6 AE算法的策略
AE算法的策略主要分光圈优先、快门优先、增益优先:
光圈优先算法只适用于Camera 装配有可变光圈镜头的情形,此时算法会优先调整光圈到合适的位置。当光圈调整到极限后再开始分配曝光时间和增益 当camera光圈不可调时,AE 算法通常会优先分配曝光时间,再分配Sensor 增益和ISP 增益 增益优先则是优先分配Sensor 增益和ISP 增益,再分配曝光时间,适合拍摄运动物体的场景
2.4.6.7 AE 策略的理论依据
AE 策略的主要考虑是图像质量,不同的控制手段对图像质量的影响是不同的:
增加光圈可以增大sensor 收集光信号的面积,增加曝光时间可以延长sensor 积累光信号的时间,这两种途径都有助于积累信号,提高信噪比,所以会提高图像质量 sensor 增益实际上存在两种形式,即模拟增益和数字增益。模拟增益在放大信号的同时会等比例地放大噪声,所以对提高信噪比没有好处,但也没有坏处,可以放心地使用。而数字增益由于精度的限制会引入量化噪声,不仅对提高信噪比没有好处,反而会有恶化信噪比,降低图像质量,因此需要慎用。 ISP 增益是纯数字增益,和sensor 数字增益是同样的道理,所以通常很少用。
2.4.6.7 AE算法的分工
AE算法需要依赖ISP 硬件提供的关于图像的曝光统计数据。曝光统计需要对图像中的每一个像素进行分类和计算,涉及的计算量非常大,对时序要求非常严格,所以这个工作只能交给硬件流水线去做,不适合CPU 处理。 AE算法中根据统计数据评估图像质量、产生新的控制参数的部分则有逻辑比较复杂、算法经常需要升级、数据吞吐量一般不大等特点,因此非常适合用CPU 处理。 通用的Camera ISP 流水线中都会提供AE 统计功能,而且这部分设计有越来越复杂的趋势。 举例如下: 海思ISP 支持
三个 AE 采样点, After DG, WB, DRC 1024bin 全局直方图 不支持 局部直方图 分块统计, 最大支持 15x17 块,最小 1x1 块 Apical ISP 支持
三个 AE 采样点,After VTPG / WB / Decompander Luma Variance 统计 1024bin 和 5bin 全局直方图 支持 5bin 局部直方图 分块统计, 最大支持 33x33 块,默认值 21x23。
2.4.6.8 AE 统计策略
当需要对一件事情进行的统计的时候,首要的问题就是如何确立统计口径,或者说如何分配统计权重。不同的统计口径计算出的结果会存在较大差异。这是一个开放的问题,没有对错之分,更多是主观取舍。常用的统计方法有以下几种。
全局统计 :是指将图像全部像素都统计进来,像素的权重完全一样中央权重统计 :是指只统计图像中间部分,这主要是因为人们关注的重点通常都位于图像的中间部分;镜头的成像效果也是中央部分清晰度最高,越到边缘清晰度越低中央加背景 :图像中间部分占50%权重,图像整体作为背景占50%权重加权平均统计 :是指将图像分为不同的部分,如9宫格或者13~15个分散的曝光格,每一部分赋予不同的权重,通常中间部分赋予较大权重,相应的边缘部分则赋予较小的权重。用户ROI :用户通过人机界面划定一个窗口,AE 只统计这个固定窗口内的像素值
2.4.7 典型AE算法
2.4.7.1 基本思想
典型的 AE 算法是一种基于负反馈原理的PID算法。算法的控制参数分段可调 ,在不同的区间内算法的收敛速度不同,以期在过渡平滑性和快速响应 之间取得较好的平衡。 在当前曝光量与目标量差别在range0以内的时候,说明当前曝光已经满足要求,不需要进行调整 当差别在range1的范围内时,则说明当前曝光与要求的光照有差别,但差别不大,只需要用较小的步长来进行调节即可 当差别在range2的时候,则表明差别较大,需要用较大步长来进行调节
2.4.7.2 控制参数 (
g
=
L
t
a
r
g
e
t
/
L
m
e
a
s
u
r
e
d
g=L_{target}/L_{measured}
g = L t a r g e t / L m e a s u re d )
当曝光误差超过容许值需要调整时,算法需要计算两个值,即
当前帧的曝光量 :由sensor 曝光时间、sensor 增益、ISP 增益组成。需要注意的是,sensor 的曝光时间和增益通常是非连续的,很可能与AE算法输出的目标参数并不相同,所以当前曝光参数的准确值需要通过sensor 驱动从sensor 寄存器中直接读取,而不能使用AE算法缓存的目标值增益系数 :
g
=
L
t
a
r
g
e
t
/
L
m
e
a
s
u
r
e
d
g=L_{target}/L_{measured}
g = L t a r g e t / L m e a s u re d , 其中
L
t
a
r
g
e
t
L_{target}
L t a r g e t 为理想画面亮度,
L
m
e
a
s
u
r
e
d
L_{measured}
L m e a s u re d 为当前画面亮度的实测值。 由于sensor 的本质是一个线性元件,若暂不考虑像素饱和等非线性因素,只要在当前曝光总量的基础上乘以系数
g
g
g ,就可以使画面目标亮度达到理想值。 AE 算法的核心任务:就是计算正确的g参数,这个参数能够使画面得到正确的曝光
2.4.7.3 阻尼(damping)-达到平滑目标
当计算出正确的g参数后,一般并不会让其立刻在下一帧图像就生效。这是因为如果增益变化较大,图像就会产生闪烁,主观感受不好。通常人们更喜欢画面平滑过渡,因此每帧图像的增益变化不宜过大。实现平滑的方法就是给新的参数人为施加一个阻尼,使其缓慢地向新参数过渡。用数学公式描述就是:
g
(
n
)
=
(
1
−
s
)
∗
g
(
n
−
1
)
+
s
∗
g
_
t
a
r
g
e
t
g(n)= (1-s) * g(n-1) +s * g\_target
g ( n ) = ( 1 − s ) ∗ g ( n − 1 ) + s ∗ g _ t a r g e t 不妨取 s=0.2,此时每个g参数包含80%的旧参数和20%的目标参数,经过若干帧后旧参数自然衰减,新参数收敛到目标参数,即
g
(
n
)
=
g
_
t
a
r
g
e
t
g(n)=g\_target
g ( n ) = g _ t a r g e t 从数学上看
(
1
−
0.2
)
10
=
0.1
,
(
1
−
0.2
)
30
=
0.001
(1-0.2)^{10}=0.1, (1-0.2)^{30}=0.001
( 1 − 0.2 ) 10 = 0.1 , ( 1 − 0.2 ) 30 = 0.001 , 说明10帧之后(约0.3秒)旧参数的比重下降到10%,30帧之后(约1秒)旧参数的比重可忽略。对于典型的安防应用场景,一般建议经过8 ~16 帧图像过渡到理想亮度。而对于运动和车载型应用,由于场景动态变化大且快,一般建议经过3~4帧图像过渡到理想亮度。
2.4.7.4 参数分解(把g分解为曝光时间、Sensor和ISP增益)
当根据路径规划策略计算出下一帧的
g
g
g 参数后,需要遵循一定的策略和约束把
g
g
g 参数进一步映射为:
sensor 曝光时间 sensor 增益 ISP 增益等设备控制参数。 如前所述,曝光时间可以提高图像信噪比,所以在约束边界内应尽可能先将曝光时间用满,然后依照sensor 的硬件约束分配sensor 增益,最后将剩余的增益全部分配给ISP 数字增益。
2.4.7.5 参数同步
前面分解出来的控制参数必须同步生效才能使画面获得预期的曝光。如果某一项参数未能与其他几项同步生效,则画面会因为短暂过亮、过暗等原因出现闪烁,这是需要避免的。 另一方面,所有参数都需要在一个特定的时间窗口内生效,即前一帧图像已经结束,新一帧图像尚未开始的这段时间,也就是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算法完成所有计算,此时则需要考虑继续增加一帧的缓冲时间。 注意:有些低端Sensor本身就支持自动曝光功能,如果不小心打开了,就会与camera ISP的AE算法产生竞争,画面会不停地随机闪烁。当遇到闪烁问题时,应首先注意排除这个问题 。
2.4.8 AE的工作流程
2.4.8.1 AE Loop
得到正确的图像亮度 :
Sensor 给定一组初始值输出图像 进入ISP中AE 进行统计得到 AE Target 若欠曝,则增加曝光量,若过曝,则减小曝光量,得到新的AE Target 新的AE Target 分解得到一组新的曝光参数(不同sensor again、sensor dgain、isp dgain、光圈、快门速度的组合) 将新的曝光参数写入sensor 几帧重复上述循环,得到正确的图像亮度 AE的输入 :为当前图像的亮度值YAE的输出 :为sensor的曝光时间和增益,ISP增益和镜头光圈(如果镜头光圈可调)当AE算法得到当前帧的亮度后,与target Y做比较,然后计算出下一次需要调整的参数,以便让图像的亮度越来越接近target Y,如下所示 Target并非一个固定值,而是一个range
2.4.8.2 曝光表
知道了平均亮度后和标准的18%灰做差,就可以通过调节曝光时间、光圈、增益来进行曝光 当计算出一个曝光量,曝光参数很多种组合方式。一般情况下有曝光曲线,每个曝光量对应一组参数 如下表所示,tuning 过程中要根据不同特征场景使用不同的曝光参数 (数码相机中是有不同的拍照模式对应固定的曝光表):
1、高亮情况下,就不宜通过加大增益来提高亮度,这会带来噪声,而是通过加大曝光时间 2、低亮场景下,提高曝光时间就会带来运动模糊,需要加大增益来提高亮度 为什么增大曝光时间,运动物体就会有拖影?
由于运动物体整个运行过程都是在cmos上成像的,所以拍出的照片就有拖影,只有当曝光时间足够快,物体相对于相机就是相对静止的,也就看不到有拖影了
2.4.9 亮度、照度、光通量的关系
简而言之,就是灯泡发出的光的数量(光通量)在某一方向以一定的强度(光强)入射到某一表面,此时可测得这一表面的照度 不管这一表面是黑色的还是白色的,是木头的还是石材的,照度值都是一样的 该表面会反射光线,可能是镜面反射,更可能的是漫反射,往空间中很多方向都有光的反射 当我们站在某一位置观察受照面的时候,我们就看到了这个表面的明亮程度(亮度) 光通量(Φ)──单位时间内光源发出光的能量总和。单位:流明(lm),1lm =发光强度为1坎德拉(cd)的点光源 光强── 指的是一光源在给定方向上的发光强度,单位:坎德拉(cd),1cd≈蜡烛烛光在1米以外的所显现出的亮度, 亮度(B)──发光物体表面或被光源照明的景物反光表面,在人眼观察方向所看到的亮暗程度。单位:熙提(sb),1sb = 10^4 [cd/m²] 照度(E)──不发光物体被光源照明的程度,用单位面积上接收的光通量表示 。单位:勒克司(Lux) 1lux=1 lm/m²
2.5 ALSC/LSC (消息亮度阴影和色彩偏差)
LSC作用:根据标准光源的raw图生成相应的LSC table,以补偿该光源下的中心到四周的亮度阴影 和色彩偏差 。 ALSC作用:自动计算生成适合当前场景的LSC table,以消除该场景下的中心到四周的亮度阴影 和色彩偏差 。 调试ALSC/LSC之前,必须确认BLC,因为BLC会影响LSC table的值,故调试前请确认BLC正确设置 。
2.6 AF
AF的目的在于通过收到的统计值将画面对焦在一个理想的状态
3. ISP Tuning流程图
3.1 调试流程描述
1、配置AE表:通过收到的统计值将画面整体亮度控制在一个理想的状态 2、标定OBC/BLC:调整sensor的黑电平 3、标定ALSC/LSC:Sensor和Lens搭配后会出现不同程度的镜头阴影现象 (抓图时亮度不要过高) 4、标定AWB:调整色温曲线,确定白色仍然为白色,消除色温的影响 5、调整Gamma,DRC确定亮度
颜色很容易受到亮度的影响,所以在调整颜色前需要先把亮度调好,而亮度除了受AE影响,还受到Gamma,DRC的影响,尤其是HDR时画面的亮度几乎都是DRC拉起来的。在拉Gamma曲线时要注意勾选Sync RGB。注意,这里的Gamma是RGB域的Gamma,如果是YUV域的Gamma可以只拉Y Gamma曲线,也是调节亮度的曲线。相比于RGB域的Gamma,Y Gamma拉出来的亮度噪点会比较小,但是拉高之后画面发朦,饱和度比较低。在夜视场景下如果可以牺牲掉一些清晰度可以拉Y Gamma。 DRC是亮度的映射,区域性的加强影像动态范围。HDR中的大部分亮度都是由DRC拉起来的。一般主要是将暗处的细节拉亮,将亮处的细节压暗 。 6、调整CCM、HSV确定颜色
调整CCM主要是为了使调整机与对比机颜色相近,将颜色还原成真实的颜色。可以借助imatest工具测试,查看色块的偏差方向,一般来说CCM是用来调整全局的颜色 变化,如果无法用CCM解决,则可以调试HSV来配合。 HSV会将整个色域24等分(局部的颜色 ),我们可以根据要求来修改具体色块的色相以及饱和度。 调整Denoise、2D、3D降噪
2D降噪一般是在平面上进行降噪,3D降噪则是对比每一帧,作用在静止区域上的降噪。Denoise一般可以用来调整迷宫纹,摩尔纹,也可以去伪彩,去紫边。使用DPC可以消除一些噪点,但是如果开的过强会导致细节变差。3DNR主要是用来降低时间噪声,主要作用于静态区域,如果开的过强,有运动物体经过时会出现拖影现象。NRLuma则可以用来降低物体移动时带来的噪声。 Sharpness调整噪点,锐利度
3DNR 中调整Y.PK LUT 主要是为了让动态区静态区有适合自己的锐化强度,至于其他区分条件的锐强度调整则由Sharpness 完成,例如不同亮度的锐化强度,与画面中心距离的锐化强度,黑边白边的锐化强度等等。他不仅可以增加白边黑边的锐化强度,也可以增强无方向性、有方向性的细节纹理。
3.2 调试流程表
调整目标 调整工具或内容 曝光 调整AE表 OBC 去除黑电平 ALSC 去除镜头阴影,对暗角进行补偿 AWB 调整色温曲线,去除色温导致的偏色 亮度 AE Target Gamma WDR YUV Gamma(会产生偏色) Gamma Style AE和Gamma是影响亮度的主要因素 颜色 CCM HSV 清晰度/噪点 Sharpness DP Bay Denoise DP Bayer Compensation YNR(会默认) 3DNR CNR(会影响颜色) 注:当清晰度差,用sharpness无效果时,关DP和YNR
4. 标定 (Calibration)
每颗Sensor及Lens特性不尽相同,当拿到一颗新Sensor或Lens时,首要动作就是针对其特性去做标定及参数设定,完成后才能去做后续的画质调整。
4.1 AWB色温曲线范围调整
在执行过程中虽然AWB在Lens Shading(LS)校正之后,但Len Shading校正需会要AWB根据统计资料推算出来的CCT值,且Lens Shading是否校正对AWB影响较小,因此需要先做AWB色温曲线范围的调整,等ALSC校正完后再回来检查AWB色温曲线范围是否需要微调。
前提条件 :OBC已做且已经应用
工作环境 :使用Macbeth(麦克白)标准灯箱,灯箱内放置灰卡,让灰卡占满整个画面,若没有灰卡就直接利用灯箱内的灰墙来做分析
调节方式 :调整色温框的大小和位置,尽量是本色温下的统计信息点落入本色温框中。
位置控制点(三角形)及范围控制点(菱形)
4.2 AE Exposure Table 设定
不同的Sensor及Lens特性及能力皆不同,预设的AE exposure table不见得适合目前的module,因此需要去检查,并将其修改为适合目前module的设定。 第一字段:镜头光圈值(Fn)x10。例如光圈1.6则填入16。 第二字段:快门(usec)。 第三字段:Total gain (1024 = x1 gain),也就是Sensor gain x ISP gain 。 第四字段:Sensor gain (1024 = x1 gain)。
4.3 Gamma Fitting (亮度)
Color fitting的结果容易受到亮度差异的影响,而亮度差异主要来自AE和gamma,因此在color fitting前务必先做gamma fitting。此步骤主要目的是将调整摄像机的gamma fit到与对比机的gamma接近。校正前请先确认dynamic range是full range。 因为相机是线性转换,而人眼是非线性转换,伽马就是执行人眼的光敏感度和相机的光敏感度之间的转换。
4.3.1 Gamma基本概念(保留暗部细节)
4.3.2 模拟一个对比机的Gamma Curve
4.3.2.1 校正环境
使用OECF chart,让光线均匀打在chart上,拍摄时让chart摆在画面中间,不要占满整个画面,否则容易受到shading的影响。
4.3.2.2 校正界面
由于曝光会影响亮度,因此gamma fitting要在相同曝光的基准上会比较准确。要得到接近的曝光,最简单的方式就是拍摄时(待校准的摄像机(source)拍raw,对比机(target)拍jpg )让OECF最亮色块尽量接近255但不要刚好255,因为我们不知道对比机gamma长甚么样子,但通常gamma最亮点是不会变的,因此拿它来当基准会比拿其它点当基准要好。 把target与source进行拟合,选择fitting的相关设定,取值方式建议使用patch values,fitting的方式建议使用Exponenitial。理想gamma curve要smooth且递增
4.3.3 Gamma曲线手动调整
4.3.3.1 Gamma曲线调整界面
4.3.3.2 Gamma曲线调整方式
初始化在座标上可以看到RGB三条曲线。勾选Gamma Red、Gamma Green、Gamma Blue后可以利用鼠标控制十字符号移动点击控制曲线,如果点击的地方刚好三条曲线交叉重叠,优先顺序为Red、Green、Blue,先以R曲线为例可以按鼠标左键新增控制点,右键移除控制点,移动控制点可以改变曲线,控制点旁也会有两个辅助点,用来微调贝兹曲线。R、G、B各有有256个pixel值,参考上图。
4.4 颜色校准 (颜色:调整为与对比机一样)
每个色温都需要进行校正,并为每个色温生成一个CCM 颜色校准主要目的是使调整机与对比机的颜色接近,调整主要包含两个部分:
1)最主要的部份是color matrix的fitting; 2)HSV微调的部分,可依需求做局部颜色饱和度与色相的调整。 Color matrix与HSV最多可支持16组色温的设定,填参数时务必按照规则,Index0到Index15代表色温由低到高。
4.4.1 CCM调整 (根据不同色温做切换)
4.4.2 HSV调整 (颜色:根据色温切换)
当CCM应用后仍有颜色希望微调,则可使用HSV来达成。HSV会将整个色域平均切成24等分,使用者可依需求调整个等分的色相及饱和度。HSV的参数与CCM相同,都是根据不同色温来做切换,不是根据gain 。 HueLut : 可依需求局部调整色相,值域-64~64,0代表不改变,参数根据色温切换 SatLut : 可依需求局部调整饱和度,值域0~255,64代表不改变,参数根据色温切换 HueLut_ForUnitCCM : 搭配unit matrix的色相调整,值域-64~64,0代表不改变,参数切换是根据色温 。SatLut_ForUnitCCM : 搭配unit matrix的色相调整,值域0~255,64代表不改变,参数切换是根据色温 。GlobalSat :调整整体颜色的饱和度,值域0~255,64代表不改变,参数切换是根据gain 。建议降饱和度时利用这里来降对noise level降低较有效,提高饱和度时则利用Saturation API来升比较不会增加noise level。
4.4.3 Saturation调整
根据亮度(Y)及饱和度(UV)做UV的调整,分为adjust uv by y及adjust uv by uv,主要是留一些颜色调整弹性在YUV domain上,且因为亮度与饱和度的独立性,可保持亮度恒定,又达到局部调整饱和度的效果。在感测器用到高曝光值的时候,也可适度降低暗处色躁。亦或根据使用者喜好调高或降低饱和度,使画面看起来更鲜艳或较柔和。 Sat.AllStr : 整体饱和度的可变强度数值,值域范围:0 ~ 127 (32=1x) Sat.ByYsft、Sat.BySsft :根据Y/UV调整UV的X轴间距可以通过此调整,但有特殊限制: 节点为2的幂次方并向上相加,例:Sat.ByYsft[5] = { 3, 3, 5, 7, 7}; 第一点为0,第二点为0+23,第三点为0+2 3+23,第四点为0+2 3+23+2 5,以此类推 则X轴间距点为:{ 0, 8, 16, 48, 176, 255},最后一点超过卡到255特殊限制为:X轴前四点总和小于255,最后一点一定要大于等于256。 例:Sat.ByYsft[5] = {8, 0, 0, 0, 0},第一点为0,第二点为0+2^8=256,则违反规则 Sat.ByYLut、Sat.BySYLut : 节点的数值可以自由决定。 特殊应用:HDR 效果开启后,高亮度会过于饱和,以此可以通过Sat.ByYLut/ Sat.BySLut将高亮度/高饱和度的UV向下压,让影像在HDR效果下更显自然。