目录
- 前沿
- 一. 自动曝光AE
- 1.1. 自动曝光
- 1.2. 18%灰
- 1.3. 测光区域
- 1.4. 摄影曝光加法系统
- 1.5. AE算法
- 1.5.1. 考虑事项
- 1.5.2. AE实现过程
- 1.6. AE算法
- 二. 自动对焦AF
- 2.1. 什么是自动对焦
- 2.2. 图像清晰度评价方法
- 2.2.1. Brenner 梯度函数
- 2.2.2. Tenengrad 梯度函数
- 2.2.3. Laplacian 梯度函数
- 2.2.4. 方差函数
- 2.2.5. 能量梯度函数
- 2.3. 聚焦函数
- 2.4. 自动对焦原理
- 2.5. 对焦算法
- 2.5.1. 测距法
- 2.5.2. 图像分析法(被动聚焦)
- 2.5.2.1 相位检测
- 2.5.2.2. 对比度检测聚焦
- 三. 自动白平衡AWB
- 3.1. 色温和颜色恒常性
- 3.2. 白平衡矫正
- 3.3. 矫正方法
- 3.3.1. 灰度世界理论
- 3.3.2. 完美反射法
- 3.3.3. QCGP
- 3.3.4. 模糊逻辑算法
- 3.3.5. 基于白点的算法
- 3.3.6. 基于边缘的方法
前沿
最近在学习3A技术,简单记录一下。
我们先来看下什么是3A技术?
3A即自动对焦(AF),自动曝光(AE),自动白平衡(AWB)
补充:通常在进行3A算法的时候会有一个先后顺序:AWB->AE->AF
- AF:控制对焦马达的移位,使镜头定焦在合适的位置
- AE:Auto Exposure即自动曝光,是相机根据外界光线的强弱自动调整曝光量和增益,防止曝光过度或者不足的一种机制。通过调节快门,光圈,感光度(ISO),使得图像达到合适的亮度
- AWB:通过调整图像的R/B通道的增益值,调节图像的色温/色调表现
问:为什么调节白平衡只有R和B的增益
答:简化电路,减少调节过程以及带来的工作量相应的增加。2、通过合理调节R-Drive和B-Drive,配合固定的G-DriVe完成亮平衡校对工作。这好比一只三条腿的桌子,一条腿固定,调节另外两条腿的长短,使桌面达到水平状态。亮平衡只有R和B,一般是长虹彩电的特征。
AF控制着对焦马达,是镜头的基本功能,AE与AWB自动白平衡算法来实现图像对比度最大、改善主体拍摄物曝光或曝光不足、使画面在不足光线照射下的色差得到补偿。3A是每个相机的基本算法功能,每个A都代表了成像的基本组件,总结一下:
- AE控制着ISO/快门,是sensor的基本功能
- AF控制着对焦马达,是镜头的基本功能
- AWB是camera色彩系统的第一个基础模块,3A准确率是成像的基本保证
关于上面的光圈,快门,ISO的含义知乎上有一个很绝的解释:
感兴趣的也可以跳转到这个话题看一下:如何理解 ISO、快门、光圈、曝光这几个概念?。
一. 自动曝光AE
1.1. 自动曝光
先来看下自动曝光的概念,然后在看几个跟其相关的概念:
- AE的基本概念
Auto Exposure即自动曝光,是相机根据外界光线的强弱自动调整曝光量和增益,防止曝光过度或者不足的一种机制。
可见,AE的输入为当前影像的亮度值Y,输出为sensor的曝光时间和增益,isp增益和镜头光圈(如果镜头光圈可调)。当AE algorithm得到当前帧的亮度后,便会与target Y做比较,然后计算出下一次需要调整的参数,以便让影像的亮度越来越接近target Y,如下所示(target只是一个范围):
- 曝光是什么?
以摄影为例,曝光指摄影过程中进入镜头照射在感光元件上形成影像的过程就是曝光,这个过程由光圈、快门、感光度的组合来控制。 - 什么是曝光量?
图像传感器所接受的光量,用H表示,单位是勒克斯·秒,公式如下:
H = E × t H = E \times t H=E×t
- E为照度,单位是勒克斯(lx )
- t为感光材料受到光线照射的时间,单位是秒( s )
- 曝光量H的单位为勒克斯·秒( lx·s )
解释下上面照度的意思:
照度又称为投射光,是描述被摄体受照表面被照明的程度。照度定义为单位面积上所接受的光通量,照度E用公式表示为:
E = Φ / A E=\Phi/ A E=Φ/A
Φ \Phi Φ 为光通量, 单位为流明 ( I m ) (I m) (Im) ; A A A 为受照面积, 单位为平方米 ( m 2 ) \left(\mathrm{m}^2\right) (m2) 。
- 什么是曝光强度
曝光强度 = 曝光时间 × 光圈大小 × I S O 曝光强度 = 曝光时间\times 光圈大小\times ISO 曝光强度=曝光时间×光圈大小×ISO
相机上的光圈是固定的,所以只需要考虑曝光时间和ISO(增益值的一种表示,这里的增益又分为Analog Gain,Digital Gain以及ISP
增益。这里记住ISO指的就是信号增益大小就行了)。
4. 自动曝光
有了上面的三个概念,我们再来看下相机的自动曝光怎么定义的,相机上的自动曝光就是让相机根据当前的图像信息自动配置曝光大小,也就是曝光时间和ISO的值。下面是一组不同曝光强度下的相机成像对比。
1.2. 18%灰
我们再来看下曝光相关的另一个概念,18%灰。在介绍这个概念之前,我们需要了解两个相关概念:韦伯定律和曝光分区系统。
- 韦伯定律
即感觉的差别阈限随原来刺激量的变化而变化,而且表现为一定的规律性,可用如下公式来表示:
Δ Φ / Φ = C \Delta \Phi / \Phi=C ΔΦ/Φ=C
其中 Φ \Phi Φ 为原刺激量, Δ Φ \Delta \Phi ΔΦ 为此时的差别阈限,C为常数,又 称为韦伯率。看起来有点难理解,说人话就是人对自然刺激的感知是非线性的,刺激以一定比例的增长,对人而言是均匀增长的。 - 曝光分区系统
再来看下曝光分区系统。这是由 Ansel Adams 和 Fred Archer在1940年左右所阐述,如下图所示,将人眼对于从黑到白渐进的变化分为11阶,将处于当中的块5认为是适中的曝光强度,称为中灰。而5块的光照反射率是18%,也就是定义的18%灰。因此专业摄影师通常会使用测光表来判断环境光,来决定拍照的曝光强度,使得照片的整体曝光强度在18%灰左右。但是也要结合具体情境进行设置,比如说在拍摄雪景的时候再把曝光度调为18%的话就会使得照片偏黑,即我们说的“白增黑减”。
1.3. 测光区域
再来看一个相关概念,测光区域。通常一个图片中同时存在亮与暗的区域,如果把所有区域都纳入考虑来算一个平均值,可能不能如实反映拍照者的期望,所以会有个重点测光区域。根据不同算法,测光区域也不同。比较原始的是将整个区域分为 M × N M \times N M×N个区域,取中心的 X × Y X \times Y X×Y区域;手机上通常有针对人脸区域测光、中心测光与点测光。测光区域也有一定的权重分布,通常在中心的区域权重会更大一些。
1.4. 摄影曝光加法系统
E V = A V + T V = B V + S V EV =AV+ TV= BV+ SV EV=AV+TV=BV+SV
- EV:Exposure Value,将相机的曝光形成数字化,曝光值
- AV:Aperture Value 光圈值
- TV:Time Value 快门值
- SV:Sensitive Value 感光值 (ISO)
- BV:Brightness Value亮度值,环境亮度
关于上面每个值的计算方法如下:
根据上面的公式可以得到 E V = A V + T V = B V + S V EV =AV+ TV= BV+ SV EV=AV+TV=BV+SV的公式为:
2 ∗ log 2 ( F number ) − log 2 ( 1 exposure time ) = log 2 ( B / 0.3 K ) + log 2 ( 0.3 S ) 2 * \log _2(\mathrm{F}_ \text {number })-\log _2\left(\frac{1}{\text { exposure time }}\right)=\log _2(B / 0.3 K)+\log _2(0.3 S) 2∗log2(Fnumber )−log2( exposure time 1)=log2(B/0.3K)+log2(0.3S)
其中
- F n u m b e r F_{number} Fnumber是镜头光圈值大小,我们常说的 F 1.4 F_{1.4} F1.4, F 4.0 F_{4.0} F4.0等
- B B B是景物亮度单位是 C d / c m 2 Cd/cm2 Cd/cm2
1.5. AE算法
在了解了上面的基本概念之后,我们来看下AE的算法步骤以及需要考虑的问题。
1.5.1. 考虑事项
在一个响应周期内,AE算法需要处理的具体事项如下:
- 根据ISP硬件生成的图像曝光统计数据评估当前图像的曝光质量
- 如果曝光质量需要调整,则根据当前的工作参数和理想曝光目标生成下一帧图像的工作参数
- 将新的工作参数写入各硬件设备,驱动光圈、sensor快门及增益达到新的位置
1.5.2. AE实现过程
- 对当前图像进行亮度统计
- 根据当前图像亮度确定曝光值
- 计算新的曝光参数,曝光时间,光圈和增益
- 将新的曝光参数应用到相机中
- 重复1-4的步骤,直到满足亮度需求
1.6. AE算法
- 均值法AE
- 直方图改进的均值法AE
- N段式统计法
二. 自动对焦AF
2.1. 什么是自动对焦
自动对焦是利用物体光反射原理,将反射的光被相机上的传感器CCD(光电转换器,将光信号转换为电信号的传感器)所接受,通过计算机处理,带动电动对焦设备进行对焦的方式叫做自动对焦。就是移动对焦设备使得成像清晰。
在了解自栋对焦算法之前我们需要知道几个常见名词,有些是初中物理已经见过的。
- 像距:像距是像(CCD传感器)到平面镜(或透镜的光心)之间的距离,一般用v表示。
- 物距:物体到透镜中心的距离,一般用表示u表示。
- 焦距:镜头中心点到行程码清晰影像胶片或者CCD的距离,也就是焦距反映的是清晰成像的距离,一般用f表示。
- 景深:拍摄一张照片的时候,照片中的最近物体和最远物体之间能够清晰成像的部分就是景深。
- 凸透镜:就是我们说的放大镜,中间厚两边薄。相机镜头通常都是凸透镜构成。
我们来看一下凸透镜成像原理:
人眼其实就是个可变焦的凸透镜。视网膜可以等效成CCD,人的大脑会自动的把倒立的像给处理成正向的。
成像公式:
1 f = 1 u + 1 v \frac{1}{f} = \frac{1}{u} + \frac{1}{v} f1=u1+v1
- f,u,v分别表示焦距,物距,像距。
2.2. 图像清晰度评价方法
既然自动对焦是要让CCD接受清晰的图像,我们知道人眼很容易判断一个图像是否清晰,那么相机应该怎么判断一个图像是否清晰呢?方法有很多,我们简单介绍常用的几个。
2.2.1. Brenner 梯度函数
Brenner梯度函数是最简单的梯度评价函数,它只是简单的计算相邻两个像素灰度差的平方:
其中:f(x,y) 表示图像f对应像素点(x,y)的灰度值,D(f)为图像清晰度计算结果。
2.2.2. Tenengrad 梯度函数
Tenengrad 梯度函数采用Sobel算子分别提取水平和垂直方向的梯度值,基与Tenengrad 梯度函数的图像清晰度定义如下:
G(x,y) 的形式如下:
2.2.3. Laplacian 梯度函数
Laplacian 梯度函数与Tenengrad梯度函数基本一致,用Laplacian算子替代Sobel算子即可,该算子定义如下:
因此基于Laplacian 梯度函数的图像星清晰度的定义如下:
其中G(x,y)是像素点(x,y)处Laplacian算子的卷积。
2.2.4. 方差函数
因为清晰聚焦的图像有着比模糊图像更大的灰度差异,可以将方差函数作为评价函数:
其中 μ \mu μ为整幅图像的平均灰度值,该函数对噪声比较敏感,图像画面越纯净,函数值越小。
2.2.5. 能量梯度函数
能量梯度函数更适合实时评价图像清晰度,该函数定义如下:
2.3. 聚焦函数
图像对比度通常也称为锐度,是用来描述图像细节分辨程度和清晰度的度量值。对比度检测聚焦采用锐度来评价聚焦的准确程度,图像锐度越大也就是聚焦值越大,说明越接近准确聚焦的位置。在聚焦调节范围内,每 个调焦位置会对应个锐度值,也就是聚焦值,这些聚焦值形成 曲线,通常称为聚焦曲线 。锐度值通过锐度评价函数计算获得,锐度评价函数有时也称为聚焦函数。一个良好的锐度评价函数对应的聚焦曲线应该是 个如下图所示的单峰曲线,并且曲线峰值对应的调焦位置即为准确聚焦的位置。
什么是聚焦峰值,聚焦的准确位置对应于锐度评价函数(锐度评价函数就是聚焦函数)的最大峰值,也只有找到最大峰值才能知道准确聚焦的位置。那么最大峰值应该怎么确定吗?可以看出,锐度评价函数决定了聚焦的精度,而聚焦的峰值搜索算法决定了自动聚焦的速度。下图展示几种搜索算法:
这部分的内容详细可以参考:自动聚焦技术(AF)。
补充:
图像清晰评价函数用来后期评估聚焦的效果,聚焦函数是用来找图像焦点的,注意区分两者的差别。
2.4. 自动对焦原理
- 对焦过程中图像仍在一直不断产生,把镜头在某个位置时的那帧图像送到图像处理器(ISP)处理,得出该图像的统计信息,再把这信息送到对焦算法库(可能在isp硬件上执行,也可能在驱动程序软件执行),对焦算法库根据硬件规范和上述统计信息算出下一步镜头该往哪个方向移动多少距离,并驱动镜头到达那个位置;
- 接着在此位置得到新图像,又计算统计信息,计算再下一步的镜头位置…图像清晰度渐渐变化,如此经过几个循环收敛,图像到一定程度,就认为对焦成功。
统计信息是和聚焦算法以一一对应的,什么样的算法就需要ISP计算相应的统计信息。不同的对焦算法就又形成了不同的自动对焦方式,不同的对焦方式有不同的对焦速度和硬件需求及设计(主要针对摄像头传感器)。不管什么对焦算法,他的目的都是要快准狠迅速完成高质量的对焦。
2.5. 对焦算法
我们来介绍几个常见的对焦算法。
2.5.1. 测距法
一种主动聚焦方式,摄像头发出红外光或超声波并接收返回光线,实现测距,然后借此距离计算物距实现对焦,此方法精度略差,高端机上已较少使用,或作为其他方法的补充。(现在也有激光实现快速准确聚焦,如iPhone的LiDAR)
2.5.2. 图像分析法(被动聚焦)
2.5.2.1 相位检测
相位检测聚焦是单反相机中用的最普遍的自动对焦方法,这种聚焦系统一般由反光镜、微透镜,以及多个成像敏感器等硬件构成 其对焦原理如图所示,简单地说,通过镜头的光束被分为两个部分,分别在不同的两组成像敏感器上成像 如果对焦准确,则两幅图像相同;如果对焦不准 ,则两幅图像会出现偏移 通过比较两幅图像而检测这个偏,就能检测出聚焦的偏离状态。 相位检测自动聚焦的优点在于对焦迅速且比较精确, 缺点在于 要独特的硬件构造,造价高,且其复杂的构造不适合需要结构紧凑的情况,比如不适合在一般的数码相机及移动手机等平台上应用。如下图所示:
2.5.2.2. 对比度检测聚焦
对比度检测聚焦是另外一种被动聚焦方法,这种方法不需要额外的硬件构造,它仅仅通过对连续获得的实际图像进行分析处理,根据前后两帧或多帧图像的对比度计算结果来控制调焦的方向和大小。其基本原理是随着调焦向准确位置越 近,图像越清晰,对应的图像对比度也越大。由于不需要额外的硬件支持,这种聚焦方法广泛应用于摄像机、数码相机等成像系统。
会有以下缺点:
- 聚焦速度相对较慢;
- 对光照较为敏感,尤其是在低照度情况下容易失效;
- 当目标物缺乏明显的纹理细节(比如白色墙壁)时,难以准确聚焦;
下面是一个对比度检测聚焦的框架,对比度检测聚焦的关键因素有两点: ①锐度评价函数:②峰值判定和搜索策略。
三. 自动白平衡AWB
先看一组图。同一光源下,左边的图是在AWB没开的情况下显示的图像,右边的是在AWB打开的情况下拍摄的。
3.1. 色温和颜色恒常性
在学习AWB之前,我们需要先了解几个概念:
- 色温:色温描述的是具有一定表面温度的“黑体”(blackbody)的辐射光的光谱特性。简单的理解就是颜色随温度的变化规律,比如生铁就是黑色,加热会变成橘红色,继续加热到液态会呈现偏白的颜色,这种随温度而产生的颜色变化就光谱特性;
- 颜色恒常性:颜色恒常是指在照度发生变化的条件下人们对物体表面颜色的知觉趋于稳定的心理倾向;
- 白平衡原理:传感器不具有人眼的不同光照色温下的色彩恒定性,白平衡模块就需要将人眼看来白色的物体进行色彩的还原使其在照片上也呈现为白色,通俗的讲就是讲人眼看到的白色还原为白色。
3.2. 白平衡矫正
- 手动白平衡:在拍照前通过拍摄一个18度灰的卡片,然后计算出当时环境的白平衡的gain值对后面的图片进行校正;
- 自动白平衡:camera通过自己本身的算法,通过获取的图像自动计算出gain值对图像进行校正的方式;
3.3. 矫正方法
下面我们来看几个矫正方法。
3.3.1. 灰度世界理论
任一幅图像,当它有足够的色彩变化则它的RGB分量的均值会趋于相等。这是一个在自动白平衡方面应用极为广泛的理论。算法流程如下:
- 计算各个颜色通道的平均值 R m e a n R_{mean} Rmean, G m e a n G_{mean} Gmean, B m e a n B_{mean} Bmean;
- 寻找一个参考值K,因为人眼对于 G G G通道比较敏感,一般一般情况选取 G m e a n G_{mean} Gmean作为参考;
- 计算 R g a i n = G m e a n R m e a n R_{gain} =\frac{G_{mean}}{R_{mean}} Rgain=RmeanGmean, B g a i n = G m e a n R m e a n B_{gain} = \frac{G_{mean}}{R_{mean}} Bgain=RmeanGmean;
- 对图像中的每个像素都乘以对应的gain值进行校正;
3.3.2. 完美反射法
完全反射也是基于一个假说:基于这样一种假设,一幅图像中最亮的像素相当于物体有光泽或镜面上的点,它传达了很多关于场景照明条件的信息。如果景物中有纯白的部分,那么就可以直接从这些像素中提取出光源信息。因为镜面或有光泽的平面本身不吸收光线,所以其反射的颜色即为光源的真实颜色,这是因为镜面或有光泽的平面的反射比函数在很长的一段波长范围内是保持不变的。完美反射法就是利用用这种特性来对图像进行调整。算法执行时,检测图像中亮度最高的像素并且将它作为参考白点。基于这种思想的方法都被称为是完美反射法,也称镜面法。通俗的意思就是整个图像中最亮的点就是白色或者镜面反射出来的,那么最亮的点就是光源的属性,但是该点本身应该是白点,以此为基础就可计算出gain值从而进行校正。下面怡红色通道为例展示怎么计算的:
3.3.3. QCGP
这种方法将灰度世界和完全反射以正交的方式结合。下面仍以红色通道为例演示怎么计算的:
u r R a v e 2 + v r R a v e = K a v e ; u r R max 2 + v r R max = K max K a v e = R a v e + G a v e + B a v e 3 ; K max = R max + G max + B max 3 \begin{aligned} & u^r R_{\mathrm{ave}}^2+v^r R_{\mathrm{ave}}=K_{\mathrm{ave}} ; \\ & u^r R_{\max }^2+v^r R_{\text {max }}=K_{\max } \\ & K_{\mathrm{ave}}=\frac{R_{\mathrm{ave}}+G_{\mathrm{ave}}+B_{\mathrm{ave}}}{3} ; \\ & K_{\max }=\frac{R_{\max }+G_{\max }+B_{\max }}{3} \end{aligned} urRave2+vrRave=Kave;urRmax2+vrRmax =KmaxKave=3Rave+Gave+Bave;Kmax=3Rmax+Gmax+Bmax
通过上面的方程组就可以解出和 然后对原像素进行校正:
R n e w = u r R o r g 2 + v r R o r g R_{new} = u^rR_{org}^{2} +v^rR_{org} Rnew=urRorg2+vrRorg
3.3.4. 模糊逻辑算法
如图圆圈表示该颜色本身应该在坐标系中所处的位置,箭头分别表示随色温的变化发生的偏移,这个是通过先验知识得到的,后面再通过这个进行校正。
通过以上两种方式将图像分成8块,然后通过模糊逻辑的方式计算出每个快的一个权重,这个权重和亮度和色度相关,然后通过模糊逻辑方式进行确定。求得权重后就可以计算出整个图像的加权均值,如下图10a,黑点表示八个块的分布,X表示加权后整个图像的位置。然后目的是要让加权的这个值往白点上靠,就通过调整增益的方式调试,调整完增益后,每个块儿的均值又会发生变化,然后又重新计算出每个块的权重,再通过权重计算出整个图像的均值,如图10b,整个图像的均值已经靠近原点了。然后如果X和白点的差距在一个设定的范围内则认为完成白平衡,否则继续调整增益重复上述步骤进行校正。
3.3.5. 基于白点的算法
-
将RGB颜色空间转换到YUV空间,转换公式如下:
[ Y U V ] = [ 0.3 0.59 0.11 − 0.15 − 0.29 0.44 0.51 − 0.52 − 0.095 ] [ R G D ] \left[\begin{array}{l} Y \\ U \\ V \end{array}\right]=\left[\begin{array}{lll} 0.3 & 0.59 & 0.11 \\ -0.15 & -0.29 & 0.44 \\ 0.51 & -0.52 & -0.095 \end{array}\right]\left[\begin{array}{l} R \\ G \\ D \end{array}\right] YUV = 0.3−0.150.510.59−0.29−0.520.110.44−0.095 RGD -
通过限定YUV的区域来判断是否为白点,如下论文通过四个限制条件俩限制白点,满足条件的点就是白点,参与后续的计算,否则不是点直接舍弃
-
通过以上四个限制条件找到白点集合后,就可以对白点集合运用GW算法或者其他算法计算gain值从而进行后续的校正。
3.3.6. 基于边缘的方法
- 先通过一定的手段,比如梯度的方式求出图像中的边缘,然后在边缘各侧各取两个点参与计算;
- 通过上述得到的参考点集合,就可以运行灰度世界或者其他的算法求出gain值;
优点:减少的大色块的干扰,因为一般认为边缘就是色块变化的的分界线,那么提取边缘两侧的样本点就可以满足颜色充分的条件,那么就可以运用灰度世界法求出gain.而且有大色块的时候计算的也是也只是选取边缘的几个点,就可以避免大色块分量太大造成白平衡异常的问题。
下面看展示几个白平衡算法效果图:灰度世界理论,完全反射,QCGP算法。