最近参与公司项目,了解一下 AE 算法,觉得讲得很好,收藏一下
本文转自以下博客 :
AE (自动曝光)系统简介
AE系统简介
1. 简介
现代成像系统已经很普及了,不仅有给人看的各类相机、手机、行车记录仪,还有用于机器视觉的各类摄像头。在这些成像系统中,一般都有AE功能(自动曝光),它直接关系到画面的亮度和图像质量,是成像的基础。这里对AE系统进行一个简单介绍,相机中的具体实现可能有所区别。
2.APEX系统
提到曝光,不得不提APEX(The Additive System of Photographic Exposure),它是由美国国家标准机构(ASA)为了方便计算胶片机的曝光参数,提出的一个经验公式,也称为曝光方程。下面将会对该方程的推导做简单介绍。
在拍摄平均亮度为LsLs的场景时,满足如下方程的曝光参数,认为可以得到一个亮度合适的照片:
F2t=LsSK(2.1)
(2.1)F2t=LsSK
其中,tt表示曝光时间,FF表示光圈值(即常说的F-number),LsLs表示环境光平均亮度,SS表示是相机感度。KK是任意常数,一般由相机厂商决定,它和相机厂商所认为的正确曝光有关,现在一般将KK取值为12.5。在(2.1)(2.1)式两边同时取对数,有
log2(F2)+log2(1t)=log2(S∗N)+log2(LsK∗N)(2.2)
(2.2)log2(F2)+log2(1t)=log2(S∗N)+log2(LsK∗N)
其中,NN为一个常数,近似为0.3。将(2.1)(2.1)取对数后,乘性方程变成了加性方程(2.2)(2.2),方便了AE算法的计算和计算量的减少。将Av=log2(F2)Av=log2(F2),Tv=log2(1tTv=log2(1t,Sv=log2(S∗N)Sv=log2(S∗N)和Bv=log2(LsK∗N)Bv=log2(LsK∗N)代入(2.2)(2.2),可以得到APEX变量表示的曝光方程:
Av+Tv=Sv+Bv(2.3)
(2.3)Av+Tv=Sv+Bv
从直观意义上理解这几个变量:
AvAv表示光圈大小,其值每增1加个单位,表示进光量减少一半。
TvTv表示快门快慢,其值每增1加个单位,表示进光量减少一半。
SvSv表示相机感度,其值每增1加个单位,表示相机对同样进光量的敏感度增加一倍,体现在照片上就是亮度增加一倍。
BvBv表示环境光的平均亮度,其每增加1个单位,表示环境光平均亮度增加一倍。
从直观上理解(2.3)(2.3)式:当等式右边增加时,表示相机敏感度或环境光增加,为了保持照片同样亮度,需要减少进光量,即减少等式左边的和。同理,当相机敏感度或环境光减少时,需要增加进光量,即增加左边的和。因此,在测出环境光亮度BvBv时,根据等式(2.3)(2.3)可以计算出合适的曝光参数光圈、快门、ISO组合(当然这里有很多组合可以满足等式(2.3)(2.3),具体选择方法会在文章第4部分进行简介)。
以上就是APEX系统的曝光方程,下面将会简单介绍相机的测光系统,以计算合适的相机曝光参数。
注:不要将这里的AvAv和TvTv与相机上的AvAv与TvTv混淆,相机上的这个两个档位分别表示的是曝光模式为光圈优先和快门优先模式。
3.测光系统
在相机AE系统中,(2.3)(2.3)左右两边的和称为EvEv值,即:
Ev=Av+Tv=Sv+Bv(3.1)
(3.1)Ev=Av+Tv=Sv+Bv
根据(3.1)(3.1)式,当我们测出BvBv值时,即可获得满足曝光方程的参数组合。决定这个BvBv值的过程,我们称之为测光。现代相机测光系统一般分为两个部分:标定和测光。标定是在开发阶段为相机标定一个测光表,其步骤为:
将相机对着灯箱,调节灯箱的亮度为LsLs,计算出对应的BvBv值。
调节相机曝光参数(Av,Tv,Sv)(Av,Tv,Sv),使得照片亮度适合人眼。同时,根据ISP给出的统计值,计算出一个加权平均值(计算方式包括点测光模式、中央重点测光、全局平均测光等),即为的AEtargetAEtarget。
3.重复步骤1,2,不断改变灯箱的亮度LsLs,可以产生很多的(Bv_i−>(Av_i,Tv_i,Sv_i,AEtarget_i))(Bv_i−>(Av_i,Tv_i,Sv_i,AEtarget_i))对,这些(Bv_i)(Bv_i)-曝光参数-AEtarget_iAEtarget_i对称为测光表。
测光,是相机在使用时,计算环境光亮度(即计算BvBv),步骤如下:
给定相机一组初始曝光参数(Av_0,Tv_0,Sv_0)(Av_0,Tv_0,Sv_0),根据ISP的统计值获得加权平均值M_0M_0,可得参数对(Av_0,Tv_0,Sv_0,M_0)(Av_0,Tv_0,Sv_0,M_0)。
根据步骤1中曝光参数,在测光表中选择与之最近的一组参数(Bv_i−>(Av_i,Tv_i,Sv_i,AEtarget_i))(Bv_i−>(Av_i,Tv_i,Sv_i,AEtarget_i))。根据(Av_0,Tv_0,Sv_0)(Av_0,Tv_0,Sv_0)与(Av_i,Tv_i,Sv_i)(Av_i,Tv_i,Sv_i)差的档数δδ,调节M_0M_0至M′_0=M_0+δM_0′=M_0+δ。(例如,当Av_0−Av_i=1Av_0−Av_i=1而其他参数一样时,M′_0=M_0+1M_0′=M_0+1)。
实际获得的测光值为Bv=Bv_i+log2(M′_0AEtarget_i)Bv=Bv_i+log2(M_0′AEtarget_i)。
通过上面的测光,即可获得当前环境光的强度BvBv。
注:这一部分找到的资料甚少,上面不少过程都是猜测所得,具体实现可能不一样。
4.曝光表
根据(3.1)(3.1)式,当测出BvBv并选定SvSv时,可以确定EvEv。从前面的描述可知,在获得BvBv后,有很多组曝光参数(Av,Tv,Sv)(Av,Tv,Sv)可以满足方程(3.1)(3.1)。本节将要介绍的曝光表,就是从众多组曝光参数中选择比较合适的曝光参数组合。曝光表也称为曝光线图,如图1所示。
图1 程序自动曝光线图
图1中的曝光线图分为曝光方程部分和程序线部分,他们分别用来确定ISO/EVISO/EV和Av/TvAv/Tv(即光圈/快门)。
4.1 曝光方程部分
图1的左上部分,是一个二维坐标系,其中横坐标为BvBv值,纵坐标为EvEv值。由(3.1)(3.1)可知,
当SvSv(即ISO)固定时,EvEv和BvBv在该坐标系中是斜率为1,截距为SvSv的直线,即为图1中左上部分的红色直线。当我们测出BvBv,选定SvSv(ISO)(一般倾向选低ISO,以减少图像中的噪声),即可确定EvEv值。
4.2程序线图部分
图1右下角的红色线是相机设计的曝光程序线,三条红色线对应的最大光圈值是不一样的(zoom镜头在不同焦段的最大光圈是不一样的),线上对应的横坐标是快门值,纵坐标是光圈值,线上每个点都对应不同的EvEv值。EvEv值刚好可以和4.1中的BvBv和SvSv对应起来,从而确定快门和光圈值。
程序线图可以有很多种设计方式,这取决与各家相机厂商的做法。这里给出佳能设计线图的三个原则:
在EvEv值变化时,在快门和光圈值允许范围内,尽量以同等增量去改变光圈和快门,即保持快门和光圈组成的直线的斜率为1。
在光圈不可避免的达到最大或者最小值时,直线会变成水平线(即光圈保持最大或最小值,只改变快门的值)。
在EvEv值相同时,长焦对应的快门应该越快(为了防止相机抖动带来的画面模块)。
曝光方程和程序线图构成了相机的曝光表,在AE系统工作时,可以给出合适的曝光参数。
5.AE流程
上面的第3章和第4章只是描述了一个理想的AE工作方式,即认为测光是完全准确的,通过一次曝光参数调整即可获得亮度理想的照片。其实,这往往是不现实的,测光系统获得的BvBv值并不一定准确,所以需要多次迭代解决。记得在第3章标定测光表时,给每个Bv_iBv_i记录了一个AEtarget_iAEtarget_i,这个实际上就是用来判断AE是否收敛的目标值。假设调整完曝光参数后,根据ISP统计值获得的均值为M_iM_i,可以根据log2(M_iAEtarget_i)log2(M_iAEtarget_i)的值来调高或者调低AE参数。如果当前Bv_iBv_i下无法收敛,可以重新计算BvBv,再进行迭代计算。
下面是一个简单的AE流程图(相机中的具体实现可能不完全一致):
环境光 ---->
相机模组 ---->
ISP统计值,M ---->
获得Bv值和AEtarget ---->
abs(M-AETarget)
输出曝光参数 ---->
选定ISO,查表得Shutter和Aperture ---- >
yes/no
参考文献
Douglas A. Kerr. 2007. APEX-The Additive System of Photographic Exposure.
Douglas A. Kerr. 2005. Programmed Automatic Exposure
in Canon EOS Digital Cameras