专栏算法工具链谈谈成像中的亮度控制

谈谈成像中的亮度控制

lanzhe2024-04-07
86
0
如何把你拍得更光鲜靓丽?
--谈谈成像中的亮度控制

为什么需要控制画面亮度

日常生活中,常见中的亮度范围较宽,照片中亮、暗元素都可以看清楚是拍照的基本要素。
Description人眼中有杆状细胞(rods)和锥状细胞(cones),其中杆状细胞用于提取亮度信息,椎状细胞用于提取色彩信息。
Description
日常生活中真实世界的亮度范围约为10(-6)-----109,人眼可以识别的范围为10(-6)-----106(调节瞳孔、虹膜)。
Description
常见的模组为12bits,单帧照片可以捕捉的亮度范围较窄,捕捉的亮度范围与现实世界的对比如图所示。在不同的环境下需要改变曝光策略,可以清楚捕捉照片中的物体。
Description
Description

# hdr(High Dynamic Range Imaging) 宽动态范围

“HDR就是:亮的地方贼亮,暗的地方贼暗,细节还贼多。”
为了改善拍照的动态范围,使用了多帧合成技术)。合成可以在sensor端完成,也可以在isp(Image Signal Processing)中完成。以IMX390为例,在sensor端采用3帧合成技术,不同曝光状态的帧合成一帧,扩展动态范围。

hdr合成方式

Description
Description

数据压缩

Sensor 端合成后图像单帧数据量较大,为了降低传输带宽需要将数据压缩后传输。数据压缩后需要在后端isp中进行还原,最大限制减少压缩带来的损失。raw图数据压缩方式有pwl(piecewise linear)压缩和log压缩。
Description

合成效果

采用多帧曝光合成拍摄的图像能够看清楚一幅画面中的室内和室外都可以清晰辨识。
Description

画面亮度控制

通过调节影响成像亮度的变量,保持成像亮度的稳定性。即在不同环境下,尽量保持画面亮度稳定。

AE(auto exposure) 控制

在外部环境不改变时,图像保持稳定亮度时的曝光参数是相对固定的。当环境改变时需要改变曝光参数适配当前环境。在实际应用中,系统只能获得当前帧图像的亮度,无法准确预测下一帧拍照时外部环境的变化,故无法直接设置曝光参数达到目标亮度范围。因此AE控制通过测量当前帧的亮度与预设值比较,改变曝光参数,迭代达到画面亮度稳定的目标。AE控制是一个闭环控制,可以采用如图所示框图来描述控制过程。其中sensor为此框图中的被控对象,外部环境改变为此框图中的干扰,亮度预设值为此框图中的给定值,根据直方图统计计算画面亮度为此框图中的测量。当然测量亦可以测量画面的信息熵等其他特征,但本文仅叙述测量亮度。
Description
自动曝光控制的步骤:
对当前图像进行亮度统计
根据当前图像亮度确定曝光值
计算新的曝光参数
将新的曝光参数设置到sensor
循环上述步骤

AE控制--控制方式

环境+光圈+曝光时间+感光比+增益共同决定画面亮度,其中光圈、曝光时间和增益是可以作为被控量改变。 Cmos sensor 感光的示意如图所示。
Description

光圈

光圈是可以改变进光量机械结构,在AIOT场景会改变光圈大小,但在AUTO场景一般都采用固定光圈。光圈不仅可以改变物体的进光量,同时可以改变景深。如图所示不同光圈下成像示意图。
Description
不同光圈拍照效果如图所示。
Description

曝光时间

光电转换的过程是一个对时间积分的过程,在一定的时间间隔内光电流通过积累成为电荷,这个积分时间长度就是曝光时间。sensor 中用来控制曝光长短的寄存器参数称为积分时间,一般是以行为单位的。
CMOS模组的曝光方式分为rolling shutter/Global shutter。Global shutter模式整幅场景在同一时间曝光实现的。Sensor所有像素点同时收集光线,同时曝光。即在曝光开始的时候,Sensor开始收集光线;在曝光结束的时候,光线收集电路被切断。然后Sensor值读出即为一幅照片。rolling shutter模式通过Sensor逐行曝光的方式实现的。在曝光开始的时候,Sensor逐行扫描逐行进行曝光,直至所有像素点都被曝光。
模式时间不仅会改变画面的亮度,同时也会影响拍摄画面中移动物体的拖影。曝光时间越长,拖影越大。相同场景下使用不同的曝光时间拍摄移动物体的效果如图所示。
Description

增益

Sensor 内部结构如图所示,cmos 感光后模拟信号经放大后使用ADC转换变成数字信号,数字信号处理后输出。模组内部有数字增益和模拟增益。
Description

噪声

模组从感光到输出数字信号的链路中会引入不同的噪声,不同的噪声具有不同的统计特性。噪声主要包括:
散粒噪声(photo shot noise)是由于光子离散特性导致的统计涨落
暗噪声(Dark current shot noise)是由于电子的离散特性导致的统计涨落
读出噪声(readout noise)是由于电路放大导致的统计涨落
量化噪声(ADC noise)是由于ADC转换导致的统计涨落
引入不同噪声噪声的位置图示所示。
Description
使用方差(Variance)对噪声进行绝对度量,
Description
使用SNR(Signal-to-noise ratio, 信噪比)对噪声进行相对度量,
Description
模拟/数字增益都会把信号和噪声同时放大。模拟增益在量化前将真实噪声和信号同时放大,在后级放大中不会级联,故模拟增益满足需求时建议仅使用模拟增益。然而模拟增益一般控制精度比较低,数字增益控制精度比较高。一些低端的sensor模拟增益只有几档,完全无法满足控制需求,因此需要把模拟增益和数字增益混合着用。使用模拟增益和数字增益放到信息误差对照表。

XJ3/J5 gain lut

sensor-gain控制方式采用表索引方式。
WHAT?
通过一个数组表示倍率与寄存器值之间的映射关系。
WHY?
Isp 的gain控制是线性离散的点,且控制精度有限,能用有限数组表示。以J3/5为例,范围为[0,255],共256个控制点。
Gain 控制点是固定的,可通过y=2^(x/32)转化为倍数。
Sensor gain 控制是多样的,无法使用有限个公式表示不同类型的转换方式。
将寄存器与倍数的对应关系剥离出系统控制有利于简化系统代码,降低代码维护成本。
HOW?
明确当前模组的again/dgain的特性(仅支持从sensor-spec获取,点亮模组需获取两个信息)
1.初始化寄存器列表
2.当前模组ae控制方式及特点
确定again/dgain 单独控制or 协同控制。
1.当again 控制精度较高时(控制点精度与isp控制点精度相当或大于),可again,dgain单独控制;
2.当again 控制精度较低时(控制点精度远小于isp控制点精度),可again,dgain 协同控制。
通过spec 提供的信息,计算固定的倍率应该填入的寄存器值。

AE控制--测光

AE控制是一种闭环负反馈控制。闭环控制需要清楚控制变量的状态才能进行针对性调节。测光方式有多种(光强度传感器、直方图统计等),通常使用直方图估计画面,即计算出当前的画面亮度。
ISP统计模块计算直方图时会将画面平均分成MN块(可单独设置每块的权重),统计结果分为global/local两种。常见的global分为1024bin,local分为5bin。下文将以M = 5,N = 5说明不同的测光方式。画面分为MN块后,不同的测试方式即修改不同块的权重,不同的测光方式没有优劣之分,只是适用的场景不同。
画面平均亮度计算mean = sum(c[i]*i),其中i为直方图下标。

点测光

点测光方式又分为单点测光、多点测光,测光时只考虑某一块或者某几块画面亮度,常见的应用有感兴趣区域曝光、人脸曝光等。
{0,0,0,0,0}
{0,1,0,0,0}
{0,0,0,0,0}
{0,0,0,1,0}
{0,0,0,0,0}

中心测光

中心测光方式只考虑画面中心区域的画面亮度,当拍照时为突出中心景物时通常采用该类测光方法。
{0,0,0,0,0}
{0,1,1,1,0}
{0,1,1,1,0}
{0,1,1,1,0}
{0,0,0,0,0}

平均测光

平均测光方式整体考虑画面的亮度,不做取舍。A
{1,1,1,1,1}
{1,1,1,1,1}
{1,1,1,1,1}
{1,1,1,1,1}
{1,1,1,1,1}

区域测光

区域测光可固定权重区域法、可变权重区域法。通常在取景拍照时不同区域的重要程度不同,可分为前景区域和背景区域,背景区域设置较小的权重,增加前景区域的测光准确性。有人将画面分成如图区域,不同区域设置不同的权重来适用不同的场景。
Description

AE控制--补偿

计算出画面的亮度该如何调节控制变量,保持画面亮度稳定在一定范围内呢?g = target / mean,其中target 为理想画面亮度, mean 为当前画面亮度的实测值。由于sensor 的本质是一个线性元件,若暂不考虑像素饱和等非线性因素,只要在当前曝光总量(exposure)的基础上乘以系数g,就可以使画面目标亮度达到理想值。
实际情况中,由于exposure会分配给line/sensor_again/sensor_dgain/isp_dgain,且不同的参数生效帧不同,且控制参数都为离散的,故会增加一个阻尼(s)来减弱亮度控制的变化,同时防止系统震荡。exposure(n)= exposure(n-1) * g(n) / s。
Description
计算出来exposure后需要将该参数分解为曝光/增益等参数,分解后exposure = line * sensor_again * sensor_dgain * isp_dgain。分配的方式有曝光优先、增益优先等策略,不同的策略适应不同的使用场景。但总体来说rolling shutter模组,如果期望噪声较小则采用曝光优先策略,如果期望无拖影则采用增益优先。
使用平均测光方式时,背景颜色会影响测光的准确性,故在不同背景下需要对ae补偿进行微调使得目标物的亮度保存恒定。
Description
Tuning 参数
ae控制时需要根据不同模组及应用场景适配不同的参数。tuning 参数主要有阻尼(调整速度),目标亮度,容忍度,补偿及曝光表(exposure 根据曝光比分配gain/line)。

AE控制--评价

静态评价

18%中性灰是指对光的反光率是18%,人眼对其明亮程度的感觉恰好介于黑色和白色之间(即亮度是50%)的灰色。ae 调整的效果以中性灰区域的亮度为平均指标。ae评价的如图所示。
Description
Description

动态评价

AE算法的要求是“快,准,稳”,即要很快的能收敛到target附近,而且亮度要准确,收敛过程要平滑,收敛完成后要稳定。使用不同的收敛系数(阻尼参数),其收敛特性差异较大,故在实际应用中需要根据场景需求调整tuning参数达到使用需求。
Description
简单判断
1.无论是动态评价还是动态评价都需要一定的环境和经验。那么如何能零基础判别现在环境的AE调节是否正常呢?在正常室内环境下,用手遮挡镜头,如果查阅画面中某一区域是否变亮,如果变亮,即可初步判断AE调节正常。当然极暗,极亮场景除外。
Description
2.画面中不一定有中度灰,故采用整幅画面的平均亮度(y-mean or g-mean)来评价(亚萌已实现)。
常见问题
Flicker/LFM
Flicker: 图像因为sensor曝光时间不是光源频率的整数倍导致图像上出现Banding即明暗相间的条纹。当只有曝光时间=光源周期的整数倍,flicer 消除。xj3 平台上实现了flcker探测功能,探测到flicker会调整曝光时间消除。
Description
LFM: 消除交通信号灯和汽车LED照明的高频LED闪烁,令交通信号阅读算法能于所有光照条件下工作。
Description
过曝/欠曝
Description
AE震荡(video中体现)
视屏流中画面亮度忽明忽暗。
Tolerance 过小导致ae 震荡(呼吸效应)
AE 测量到容差偏大时就会触发微调,但是由于设备的实际参数是离散的,原本的微调参数会被四舍五入到下一个离散点,实际导致超调,于是下一帧AE 不得不回到过去的参数,如此循环往复,形成呼吸效应
实际使用场景中 target 约等于 raw_mean,当一定的容忍度范围内视为达成控制目标,否则会导致画面在一定范围内震荡。
Description
曝光参数不匹配导致sensor 出图异常
当pwl模式下,sensor 长曝光设置过小,对应的短曝光处于极限值时会出现画面闪烁。
sensor未使用group-hold功能导致sensor 出图异常
当ae控制参数非同步生效时会导致raw画面震动,导致画面闪烁。当然现在有些sensor已经支持shadow功能。用户将同步生效的参数(曝光时间和增益)可以在任何时间点写入shadow寄存器,当sensor开始捕捉新的一帧图像之前,会自动把shadow 寄存器的内容同步到实际生效的寄存器。
其他模块导致画面闪烁(ltm/gamma/auto-level 等).
算法工具链
社区征文前沿技术技术深度解析
+1
评论0
0/1000