相机成像,就是利用相机进行拍摄,获得一张影像。这个过程我们可以将其分为两大块来说:几何和辐射。在几何方面,又可以进一步细分为硬件、成像模型、畸变模型等内容。 这些在以前的博客中或多或少都有提到。这篇博客介绍了相机的硬件相关内容,这篇博客则从硬件层面介绍了相机的果冻效应。这篇博客和这篇博客则从理论层面介绍了最简单的几何成像模型——针孔模型。这篇博客和这篇博客则从理论和实际的角度出发,介绍了相机的畸变模型。 而关于辐射方面的内容,之前的博客涉及的较少。因此本篇博客主要从辐射的角度介绍相关内容,主要是《Computer Vision: Algorithms and Applications》这本书Chaper 2 Image formation部分的笔记和一些思考(不一定对,欢迎讨论交流)。
1.相机的成像
这里我们忽略几何因素,只考虑辐射相关内容,一个简化的相机辐射成像过程(Photometric image formation)可以表示如下。 简单一句话来说就是:光线照射到物体上被其反射,反射光线进入相机被传感器感知,从而进行成像。从这句话也可以看出,正常成像至少有三个方面的因素:光照、被摄物体和相机,缺一不可。如果一个场景完全没有光线,再厉害的相机也没法成像,再厉害的暗光增强算法也没有用处。而如果前两个因素都OK,但相机不行,那么最终也得不到好的影像。
1.1光照
简单来说,光源可以被分为点光源(Point Light)和面光源(Area Light)两大类。常见的点光源比如远处的灯泡、太阳(有时也被认为是面光源)等,常见的面光源比如长条的荧光灯、房间里的吸顶灯等。当一束光照射到某个物体时,其就会被反射(Reflectance)与散射(Scattering)。对于反射而言,又进一步可以分为镜面反射(Specular Reflection)和漫反射(Diffuse Reflection,又被称为Lambertian Reflection)。 这里涉及到一个小的“技术点”,就是光线追踪(Ray Tracing)。如前文所述,我们看到的物体都是光源发出的光经过物体反射,进入我们的眼睛,最终看到了它。而光线追踪则是与这个过程恰好相反,或者说是成像的“逆过程”。根据光路的可逆性,我们假设从眼睛发出很多光线,然后让它们和物体“相遇”并反射,对于某束光线而言,我们寻找到离它最近的那个光源。并以此根据物体到光源的距离计算光线的强弱,最终作为我们看到的灰度值。这便是光线追踪最核心的思想。如果一个场景中大部分都是镜面反射,那么就非常适合光线追踪,因此被广泛用于游戏领域。
1.2镜头
毫无疑问,真正的相机如果只有一片CCD/CMOS传感器是没法成像的(一个很简单的实验就是把可更换镜头的单反或微单镜头拆掉然后打开相机),必须要镜头将光准确汇聚于传感器平面。一般而言,我们可以将镜头简化成理想的针孔模型。但实际上真实的相机都会有镜头,通过镜头机械或电子部件的改变,实现对焦、曝光等操作。一个基本的单片镜头模型(thin len model)如下所示。 这个图非常精准的描述了成像的光路。Lens law公式如下:
\[\frac{1}{z_{0}} + \frac{1}{z_{i}} = \frac{1}{f}\]如果\(z_{0}\)趋于无穷,可以得到\(z_{i}=f\)。比如当像平面为图中灰色线段所示时,则表示为没有对上焦的情况。像平面距离镜头中心的距离和\(f\)不相等。光线在灰色的像平面上有了一小段蓝色的投影,这其实就是拍照时经常看到的相片中模糊的部分。这种散焦(misfocus)可以通过混淆圈(circle of confusion)来衡量,它的范围可以由焦距、光圈大小(镜头光圈直径)来决定,这种范围就是这个镜头的景深(depth of field)。
另外介绍一下摄影中经常见到的f-number:\(f/N\)和\(N\)(要么是直接一个数字,要么是数字前面再加个\(f/\)),如下图所示。 简单来说就是:
\[f/N=N=f/d\]注意这里\(f/N\)中的\(f\)没有什么意义,不是焦距,只是习惯性的写法而已。可以看到f-number(没有单位)等于焦距\(f\)(单位:mm)除以镜头光圈直径大小\(d\)(单位:mm)。所以如果我们知道了f-number和焦距\(f\),就可以很容易求出光圈大小。另外需要注意的是,一般f-number都是\(\sqrt{2}\)的整倍数,这被叫做full stop。
1.3色彩畸变
色彩畸变(Chromatic aberration)由于镜头对于不同波长光线的折射率(refraction)是不同的,所以可能会导致同一个镜头不同颜色的光焦点不同,也就是出现色彩的失真,示意图如下所示。 为了解决这个问题,现在绝大多数的镜头都配备了多个镜头,构成镜头组,因此这些镜头也不能被简单的建模成只有一个中心点。感兴趣可以搜索相关内容。
1.4镜头暗角
镜头暗角(Vignetting)也是常见的一种现象,具体来说就是越靠近影像边缘的地方亮度越暗(brightness of the image to fall off towards the edge of the image)。这种现象主要有两个原因:
第一是自然暗角(natural vignetting),示意图如下所示。 在书中,推导了一系列公式,最后得到如下公式。 可以看到,在光照不变的情况下,主要是受到光圈大小\(d\)、焦距\(f\)和离轴角\(\alpha\)的影响。在光圈、焦距不变的情况下,离轴角越大,\(cos\alpha\)越大。公式2.102反应了场景辐射L(radiance)和到达传感器像素的辐照度E(irradiance)之间的关系。
第二是机械暗角(mechanical vignetting)。简单来说就是镜头内部的边缘会对入射光线存在一定的遮挡,从而导致暗角的出现。这种暗角可以通过减小光圈的大小在一定程度上缓解,也可以通过特殊的设备进行标定、校正。
2.数码相机成像
在继续介绍之前,先贴一句书里的话,觉得写的十分地道和优美:After starting from one or more light sources, reflecting off one or more surfaces in the world, and passing through the camera’s optics(lens), light finally reaches the imaging sensor. 描写很优美,像是在描写光的旅程一样。在前面我们说了光照、镜头等等,这里终于要到传感器部分了。相机是如何把接收到底光子转换成电信号,进一步又转换成我们看到的色彩(RGB)呢?在具体介绍之前,先放一张图,十分清晰地介绍了传感器在接受到光子之后进行的操作。 可以看到,整个流程涉及到三块硬件:Camera body、Sensor chip和Image Signal Processor。Camera body主要负责控制光线的进入。然后Sensor chip则主要负责对传入的光信号进行感知、模数转换,变成电信号,它的输出是Raw数据。最后ISP拿着Raw数据进行一系列的处理,最终生成我们熟悉的JPEG彩色照片。
在进一步介绍之前,先简单介绍一下常见的图像传感器。一般而言,目前的相机都是通过主动感知区域(active sensing area)实现对于光线的感知,感知的时间就被称为曝光时间(duration of exposure,通常以多少分之一秒来表示,也叫快门速度shutter speed)。然后感知到的信号再经过感知放大器(sense amplifier)进行处理并输出。目前常见的有两种传感器CCD(charge-coupled device)和CMOS(complementary metal oxide on silicon)。示意图如下所示。
在CCD中,光子通过在每一个主动感知井(active well)中进行累积。然后进入转移(transfer)阶段,每个井中积累的电荷以“队列”的形式层层传递,直到到达感知放大器(sense amplifier)。感知放大器会将这些信号进行放大并且传给模数转换器(ADC,analog-to-digital converter)。
在CMOS中,到达传感器的光子直接被光子探测器(photodetector)接收,然后转换为电信号。在一些质量要求比较高的场景,CCD比CMOS好,但CMOS更加高效,现在大部分数码相机都是CMOS传感器。对CMOS传感器细节感兴趣的话,可以进一步参考这个网页。所以可以看出,CCD和CMOS最大的区别就是CCD是一列一列读取数据,而CMOS是一个一个像素读取数据。
在简单了解了影像传感器以后,下一个问题是,最终成像的质量主要受哪些因素影响呢?简单来说包括:快门速度(shutter speed)、单位像元尺寸(sampling pitch)、传感器填充因子(fill factor)、传感器芯片尺寸(chip size)、模拟增益(analog gain)、传感器噪声(sensor noise)以及模数转换分辨率(resolution of the analog-to-digital converter)。下面对每个方面进行简单的介绍。
2.1快门速度
快门速度又称为曝光时间(exposure time),在遥感中有时我们也称它为积分时间(integrate time),尤其是在线阵CCD推扫成像时。快门速度直接控制到达传感器的进光量,所以决定了影像是欠曝还是过曝。同时,如果场景中有运动物体,较长的快门也更容易导致运动模糊,这也是符合常识,很好理解的。
2.2单位像元尺寸
传感器上单位像元的物理尺寸显然也是影响影像质量的因素之一。简单来说,单位像元的物理尺寸越大,则表示它能够累积的光子越多,也就意味着能够有效感知更亮的亮度。如果传感器芯片大小固定了,单位像元尺寸越小,则能够容纳的像元个数就越多,换句话说就是像素越高。但需要注意的是,单位像元尺寸变小以后,就意味着“很容易满”,传感器的感知能力就变差了,更容易收到噪声的影响。所以不要以为像素个数越高越好(比如之前某米宣传的1亿像素),而更应该关注单位像元尺寸。但对于很多不懂的人来说,就会认为像素越高越好,交了智商税。
2.3传感器填充因子
所谓传感器填充因子(fill factor)是指传感器芯片上有效感知区域(active sensing area)的大小,等于水平和竖直方向上的采样像元个数相乘。既然有有效感知区域,自然就有“非有效感知区域”,也就是传感器芯片上非成像的区域。由于工艺的限制,这些区域不可避免,会放一些电子管之类的东西。显然,在同样的传感器芯片上,有效感知区域自然越大越好。这个概念有点类似于手机的屏占比,屏占比当然是越高边框越窄,道理是一样的。另外说个“题外话”,现在的CMOS元件普遍是背照式(backside illumination/back-illuminated),它对应前照式元件。一句话来说就是前照式元件光线要先进过配线才能到受光面,而背照式这把顺序反过来,先接触受光面,再到配线,示意图如下所示。 感兴趣可以参考这个网页。
2.4传感器尺寸
传感器尺寸就很好理解了,一般而言,传感器尺寸越大越好。也就是摄影圈里经常说的“底大一级压死人”。更大的传感器尺寸一般意味着可以感知更多的光子,效果更好。但大底的传感器制造工艺和成本也会越高,而且底大了损坏的可能性也越高。
2.5模拟增益
一般而言,在进行模数转换ADC之前,感知到的信号会由感知放大器(sense amplifier)进行放大。对于普通相机而言,这个增益由自动增益控制逻辑(automatic gain control, AGC)进行控制,我们可以通过调整,获得全局曝光都比较好的影像。更进一步而言,一般对应于相机的ISO设置。ISO越高可以理解为增益越高,对信号的放大作用也就越明显。调高ISO在暗场景下可以提升拍摄的效果。但过高的ISO也会带来更大的噪声(因为传感器噪声(sensor noise)也同时被放大了)。
2.6传感器噪声
通过前面也可以看到,相机成像是一个漫长的过程,这期间可能会引入各种噪声,如fixed pattern noise, dark current noise, shot noise, amplifier noise, quantization noise。当然,也包含incoming light, exposure time, sensor gain等。
2.7模数转换分辨率
因为我们感知到的信号最终是以数字形式存储的,所以自然涉及到模拟信号到数字信号的转换。这个过程需要终点关注两点:转换分辨率(resolution,量化级数是多少bit)和噪声水平(noise level,实际可用是多少bit)。一般而言JPEG是8bit,而手机提供的RAW数据是10bit。遥感领域一般至少为10bit,一般为12bit或者更高。
如果我们把感知井比作一个水桶,光子就是进来的水。感知井的感知能力有限,说白了就是一次能装的水有限,而这个限度就是传感器的最原始的“量程”。比如最多能容纳100个光子,那么它的量程就是0到100。不管之后的模数转换分辨率是多少(8bit或10bit),其能感知到的原始光亮是固定的。255也好,1023也好,代表的都是100个光子的亮度。只是说不同的量化级数会把这100个光子的亮度切割的更细致一些。比如8bit,每个灰度级代表100/256个光子,10bit就是100/1024。所以从某种程度上来说“相机未经压缩的Bayer Raw数据相比于压缩后的JPEG数据后期潜力更大”也是由传感器本身决定的。如果传感器本身对于光线的感知能力较弱,感知井动态范围很小,很容易就满了,那么你再用10bit Raw也没用,还是过曝的。Bayer Raw数据相对于JPEG最大的优势就在于去除了量化压缩和后期处理对感知到的场景灰度造成的影响。
2.8数字后处理
最后,转换成数字bit的信号还会经过一系列后处理,如CFA(color filter array) demosaicing, white point setting, mapping of the luminance。最终再经过一系列压缩,就得到了我们看到的像素值。
3.颜色滤镜阵列
最后再简单介绍一下彩色相机中的颜色滤镜阵列(color filter array)。现在比较常用的是Bayer在1976年提出的Bayer阵列(Bayer pattern)-以棋盘格的样式将绿色滤光片排布在传感器上,剩余的部分分别放上红色和蓝色滤光片。如下图所示。 之所以绿色滤光片数量是红色、蓝色的两倍,有两个原因:(1)光的强度主要是由绿色波段决定;(2)人的视觉系统对于亮度的高频细节比色彩方面要敏感的多。
4.如何提升影像亮度
至此,我们又把相机成像的过程介绍了一遍,也就可以从更细致的角度对一些现象进行分析。这里我们以增加拍摄影像亮度进行讨论。首先,我们需要明确一下,什么是亮度?从数字图像上来说就是经过离散化的灰度值(grayscale),往上一层说就是感知到的模拟电流信号(analog current),再往上一层说就是传感器感知井中接收到的光子的数量(photon)。根据第二部分的示意图,整个成像过程包含:光源发光、物体反射、光线传输、进入相机、感知成像。我们可以将其分为拍摄与感知两部分。光线到达相机传感器之前属于拍摄过程,到达传感器之后属于感知部分。拍摄部分对应于一些物理实体层面的过程,而感知成像则对应一些信号处理层面的过程。两个过程共同决定了影像的亮度。对于物理层面的拍摄过程,其核心目标就是尽可能增加传感器在物理层面接收的光子数量;而在软件层面的处理过程,其核心目标就是尽可能把感知到的有限的光子转化为更强的信号。基于这两个思想,每个方面都有各自的办法。
对于拍摄部分,其主要包含光源发射光线、物体反射光线(光线传输)、光线进入镜头这三个过程。我们的核心目标是增加光子的数量。对于光源,提升光源的亮度是最直接的办法。对于光线传输,则尽可能缩短和被摄物体的距离,减少光线因传播而产生的消耗。而对于光线进入镜头,增大光圈,单位时间内就可以有更多的光子进来。此外,我们还可以增加单位像元的大小/感光面积或者整体传感器芯片的大小,从而提升单位时间内的进光量。
对于感知部分,其主要包含光子积分、信号放大、模数转换、后处理等过程。我们的核心目标是,在可感知的光子数量确定的条件下,尽可能产生更强的输出信号。 对于光子积分,一个显而易见的操作就是增加积分时间,也就是增加增加曝光时间(或减小快门速度),这样就可以累积更多的光子。对于信号放大步骤,可以通过提高放大倍数(对应于相机的ISO设置)来增加输出信号的强度。这里需要注意的是模数转换并不能增加影像的亮度,只是把感知到的信号离散、量化,换了一种模态,并不存在实际意义上的提升亮度。在后处理部分,我们也可以在已经量化以后的灰度值上进行灰度拉伸、Gamma变换等一系列处理,增强影像亮度。甚至还可以利用一些专门设计的暗光增强算法(传统或者深度学习)进行暗光增强。
所以增加影像亮度用一句话来概括就是:在拍摄时增加输入的光子,在感知时产生更强的信号。我们可以把上面的内容总结成一张图。
当然这是没有什么约束条件的情况。更现实的情况是我们已经有了一个相机,它的传感器尺寸等因素都不可更改,我们要拿着它去拍摄某个光源不可控、相机也没办法非常靠近物体的场景。可以看到,这个时候其实我们能做的已经“不多了”。在拍摄层面可以考虑增大拍摄光圈、增加曝光时间;在感知层面提高放大倍数(ISO)、利用后处理提升亮度。如果我们不考虑后处理的话,真正可控的只有三个因素:光圈、曝光时间和放大倍数(ISO)。更糟糕的情况是,有些镜头不支持调节光圈,这样最终就只剩曝光时间和放大倍数(ISO)两个因素了。这里我们就先认为光圈可调,这样就有三个因素:光圈越大进光量越多,曝光时间越长进光量越多,放大倍数(ISO)越大信号越强。
目前的CCD或CMOS传感器成像,从本质上来说是一个对光子积分的过程。这就有点类似于向一个木桶里倒水。水就是光子,木桶就是感知井。增加亮度就是让桶里的水尽可能的多。就光圈、曝光时间、ISO这三个因素而言,可以用下面的动图来表示。 调大光圈相当于调大了水龙头,增加了单位时间内的进水量。所以相同曝光时间和ISO的情况下,大光圈接的水会更多。 调大曝光时间相当于增加了接水时间,在光圈和ISO一样的情况下,可以接到更多水。 最后,调大ISO相当于加了某种“魔法”,在光圈和曝光时间一样(进光量一样)的情况下,把原本100ml的水变成了200ml的水(类似于电影《泰囧》里的“油霸”一样)。
5.参考资料
- [1] https://baike.baidu.com/item/EV%E5%80%BC/3646201?fr=aladdin
- [2] https://www.zhihu.com/question/298901781/answer/1225388016
- [3] https://www.sohu.com/a/229540211_793144
- [4] https://en.wikipedia.org/wiki/Exposure_value
- [5] https://blog.csdn.net/qq_21842097/article/details/117668852
- [6] https://www.sohu.com/a/289690675_468626
本文作者原创,未经许可不得转载,谢谢配合