Physical Address:
ChongQing,China.
WebSite:
不知不觉做Camera相关的工作已经满了一年多了,但大部分工作内容都基于Android FrameWork框架,包括Camera2与EVS架构。对于底层Camera驱动的开发了解很少,于是一边学习一边做记录,这篇文章记录的内容将尝试解释清楚我们的摄像头如何将现实世界的事物带到我们的数字世界。
这篇文章将主要从如何感知图像、如何处理图像、如何传输图像这三个方面来进行,其大致的工作流程如下图所示:
我们从物理学知识中可以知道,我们人眼之所以可以看到物体,实际上是由于物体反射光,进入到人眼后成像,自此物体也就被我们“看”到了。在Camera中,其实也有类似的过程。我们先从摄像头的物理组成来看看:
在摄像头模组前端,最重要的部分就是图像传感器(Sensor),图像传感器的作用,就是感知光的存在,并将光信号转换为电信号,在此过程中完成A/D转换。
目前常用的图像传感器主要分为两类:CCD Sensor与CMOS Sensor。
CCD Sensor:成像质量好,制造工艺复杂,成本较为昂贵,实际使用时耗电量也高。
CMOS Sensor:制造成本较低,功耗也更低,但是成像质量会差一些。
在原理上,都是基于光电转换原理将光强转换为电压值,再由电压值模数转换为数字信号。
图像传感器的组成与工作原理可以参考下图:
这里面需要重点理解颜色滤波这个环节,我们都知道三原色的概念,即以红(R)、绿(G)、蓝(B)三色按照不同的比例可以组合成绝大多数颜色。所以图像传感器颜色滤波也是过滤这三个颜色,以每一个最小的感光单元而言,分别过滤红、绿、蓝三色。这里为了达到最好、最高效的滤光效果,我们一般采用拜尔阵列来进行颜色滤波。通常我们也将这种滤波阵列简称为CFA(Color Filter Arrays)。
在光线到达感光器前,还需要经过Lens镜头、滤光片等。Lens镜头的作用很好理解,接收光信号并汇聚到感光器件上。Lens决定了Sensor的采光率,整体效果上类似于凸透镜。
滤光片的作用主要分为两点:
1.滤除红外光线,因为红外光线本身并不对肉眼可见,为了避免这部分光线对信号采集造成影响,一般需要滤去,且过滤后可以使得成像效果更好,更清晰。
2.修正光线入射角,因为Sensor由感光体构成,成像效果最好时需要让光线直射。但在实际情况中光的入射角不可能都是直角,因此使用滤光片来过滤掉斜射部分的光线。
在经过Sensor的感知之后,我们现在已经知道了每个感光单元对应的颜色以及对应的电压值(对应着光强,也对应着颜色的深浅),在这个过程中完成了对图像的感知。接下来是如何处理图像。
现在我们已经通过前面地步骤得到了每个最小感光单元上的电压值,那么如何将其进行转换使得我们的芯片能够识别处理呢,自然是需要经过AD转换的,这是其一;其次,我们的最小感光单元上获得得电压值其实只代表了一种颜色的强度,但由最小感光单元到像素点转换时我们往往需要获得其他颜色的比重,这时候就需要经过额外的处理了,重要的处理步骤其实包含两部分:图像重建与色彩重建。而这两者,都是在ISP(Image Signal Processor)上完成的。
这里简单把整个步骤以下图进行表示:
在ISP内部,可能会经过如下步骤:
1)AF
AF英文全称为Auto Foucus,即自动对焦。先判断图像的模糊程度,通过合适的模糊度评价函数求得采集的每一副图像的评价值,然后通过搜索算法得到评价值的峰值,最后通过电机驱动将采集设备调节到峰值所在的位置,得到最清晰的图像
2)AEC
AEC英文全称为Automatic Exposure Control,自动曝光控制。在不同场景下时,周围环境的光照强度差异大,图像传感器没法自适应。此时需要通过AEC来控制曝光,来得到比较均衡的效果。AEC的实现一般通过统计图像的像素光强及场景分析,设定曝光时间和增益来实现
3)BLC
BLC英文全称为Black Level Correction,黑电平补偿。其主要目的就是为了解决暗电流对原始数据带来的噪声问题。为什么会有暗电流呢,因为物理器件(这里指感光元器件)本身就会有电荷流动产生暗电流,这些暗电流就会对结果产生干扰。黑电平补偿就是为了消除这部分暗电流的影响。我们也可以简单得出,做了BLC之后,图像是会变暗的,因而BLC会影响图像的对比度。
4)LSC
LSC全称为Lens Shading Correction,镜头矫正,这部分涉及到的是光学原理的知识,不做过多赘述。简单来讲就是图像光照通过镜头投射到感光器件上时,由于入射角度问题导致边角失光,感光单元获取的光信息有限,从而影响我们最终得到的图像结果。表现在图像上时,图像的中间地带较边缘地带亮一些,为了补偿边缘地带的亮度损失,就需要进行LSC矫正。
5)BPC
BPC全名为Bad Pixel Correction,坏点矫正。坏点的产生因素有很多,主要还是由于物理器件自身的原因。所谓坏点,我们可以在全黑环境下看到图像输出的白点,或者高亮环境下输出的黑点。出现坏点时,一般可以采取两种方式进行修复,一种是自动检测坏点并自动修复;另一种是建立坏点像素链表进行固定位置的坏点像素修复。
6)Demosic
Demosic 又称其为颜色插值。前面我们已经讲到,为了获取到最好、最高效的滤光效果,我们采用了拜尔色彩滤波阵列(Bayer Color Filter Array),这样每个像素点其实只有一种颜色。有点类似于马赛克的效果。我们在处理时需要通过颜色插值的办法来将每个像素点的采样变成完整的RGB图像。有很多算法可以完成这项工作,如最近邻域法,biliner插值,cubic插值登。
7)Bayer Denoise
Bayer Denoise其实就是采用过程中产生的噪声。使用 cmos sensor获取图像时,光照程度和传感器问题是生成图像中大量噪声的主要因素。同时, 当信号经过ADC 时, 又会引入其他一些噪声。这些噪声会使图像整体变得模糊, 而且丢失很多细节, 所以需要对图像进行去噪处理空间去噪传统的方法有均值滤波、 高斯滤波等。
但是, 一般的高斯滤波在进行采样时主要考虑了像素间的空间距离关系, 并没有考虑像素值之间的相似程度, 因此这样得到的模糊结果通常是整张图片一团模糊。所以, 一般采用非线性去噪算法, 例如双边滤波器, 在采样时不仅考虑像素在空间距离上的关系, 同时加入了像素间的相似程度考虑, 因而可以保持原始图像的大体分块, 进而保持边缘。
8)AWB
AWB全称为Automatic Whitle Balance,需要白平衡的原因是由于我们的感光元器件获取到的数据本身是容易受到温度的影响的。在人类视觉中的一张白纸,在不同光线下,采光元器件输出的效果是不一样的,在低色温下偏黄,在高色温下偏蓝,这并非我们所期待的。所以我们需要通过AWB来使得感光元器件在不同色温光线下对白色物体的采样效果接近于人眼中的真实效果。比较常用的AWB算法包括灰度世界、完美反射法。
9)CSC
10)RGB TO YUV
这一步其实是色彩空间的转换,前面已经讲到我们拿到的图像信息原本是基于RGB滤波采样的。但是原始的RGB数据通常数据量较大,不便于存储与传输。此时我们会通过ISP将其由RGB格式转换为YUV格式。同时在将其进行转换后,对图像的处理会更加方便(因为数据量变小了)。
RGB与YUV之间的转换,可以参考如下公式:
Y=0.299R+0.587G+0.114B
Cb=0.564(B-Y)
Cr=0.713(R-Y)
R=Y+1.402Cr
G=Y-0.344Cb-0.714Cr
B=Y+1.772Cb
如何把Camera生产出的图像传输到远端,其实也就是涉及到传输协议的问题,这里先简单直接地列出我们常见的图像传输方式:MIPI\LVDS\SLVS\HDMI。
MIPI:Mobile Industry Processor Interface
LVDS:Low Voltage Differential Signaling
HDMI:High Definition Multimedia Interface
其中MIPI与LVDS是比较常用于嵌入式设备的,这类设备的图像传输数据相对会较小一些,同时也要求低功耗与较低的噪声。关于这两者的主要差异如下:
1)LVDS通常只用户传输图像数据,而MIPI除了图像数据也可以传输控制指令。
2)LVDS接口主要是将RGB 信息的电平信号按照SPWG/JEIDA格式转换成LVDS信号进行传输,MIPI DSI接口则按照特定的握手顺序和指令规则传输屏幕控制所需的视频数据和控制数据。
SLVS则是由索尼半导体制定与开发的一套传输标准,适用于高速、高分辨率的Camera系统。与LVDS相比具有跟高的传输速率。
而HDMI则通常用于PC,液晶电视等设备,对图像质量的要求会较高一些,图像的数据量也较大,基本不会用于Camera图像的传输。
以上内容均来源于个人笔记,可能未给出相应出处,在此表示抱歉~