【计算摄影】相机成像原理:从光到JPEG图像

3,158 阅读30分钟

​        本文我们将从最基本的相机成像原理开始论述,再讨论光线进入相机后,经过一系列处理成为JPEG图像的大致流程。

image-20220802171214765

图1:从入射光到JPEG图像的大致流程

1、光学相机的定义

        顾名思义,光学相机就是利用光学原理进行成像的相机,而且市面上的相机几乎都是光学相机,只不过随着时代的发展,胶卷式存储图像的形式已经被数字图像所代替。

2、光学相机的构造

​ 相机由如下三部分所组成:

img     img     image-20220722154329718
光学部分(镜头)        传感器部分        图像处理部分

图2:相机的三大部件

​ 以上三个部分在相机中对应的位置如下:

image-20220804110858724

图3:三大部件在相机中位置

        (图3)中的蓝框是光学部分,绿框是传感器部分,红框是图像处理部分。这三部分是相机成像的核心,随后我们将按照这三部分对成像原理逐一讨论。

3、光学部分

3.1、小孔成像由来

​        在开始讨论相机的光学器件之前,我们不得不先谈谈小孔成像原理。

​        在大约两千四五百年前的《墨经》之中,描述过墨子和他的学生做过的实验,其中发现一种自然现象:用一个带有小孔的板遮挡在墙体与物之间,墙体上就会形成物的倒立实像。现在,我们把这样的一种现象叫小孔成像。

img

图4:光线透过小孔在墙上投影出倒立的实像

3.2、小孔成像原理

​        为了更加直观地去阐述小孔成像的原理,现在我们假设:在物体与墙之间没有小孔,物体反射的光直接映射到墙上,那么最终的成像会是什么样子?

image-20220801222200950

图5:物体反射的光直接在墙上投影

        首先,我们知道世界上的万物之所以能够被我们的眼睛所看到,是因为白天光照到物体上,物体上的各个点皆会向无数个方向折射出光,光线越弱,则所看到的物体越不清晰。

        当没有小孔时,物体与投影墙之间没有任何隔板,因此,物体上所有点发出的光将重叠地映射在墙上:

image-20220801222931891

图6:物体反射的光将重叠地映射在墙上

        对于墙上的某个点接收了来自物体上每个点所发出的光,重叠在一起,此时就会出现图像模糊现象:

image-20220801223453933

图7:投影的图像出现模糊

        为了避免出现图像模糊现象,我们在物体与墙之间加入一个隔板,该隔板上有一个小孔:

image-20220801224012822

图8:物体与墙之间用隔板隔开

        那么此时的光线传播情况就是这个样子:

image-20220801224129154

图9:大多数光线被阻挡,每个物体点只有一束光线投影到墙上

        隔板挡住了物体的光线传播,物体上的每一个点只有一条光线穿过了隔板上的小孔,并且墙上每个点的光子只由物体上的一个点所贡献,最终的成像效果如下:

image-20220801224736277

图10:小孔成像

        在这个例子中,隔板就是相机快门,小孔就是镜头的光圈。

        在接下来,我们将深入探讨影响成像的两个关键相机参数。

3.2.1、焦距

        隔板与传感器平面之间的距离就称为焦距。

image-20220801225926256

图11:何为焦距

        当我们保持物体与隔板之间的距离不动,并缩小传感器与隔板之间的距离时,就发生了有趣的现象:当焦距缩短一半时,成像的尺寸大小也会缩小一半;当焦距扩大一倍时,成像的尺寸大小也会扩大一倍。如下图所示:

image-20220801230314071

图12:焦距缩小一半的成像效果

3.2.2、孔径

        ​隔板小孔的直径就被称为孔径,也就是相机的光圈直径。

image-20220801230434049

图13:孔径

        当小孔的直径扩大时:

image-20220801230548971

图14:随着孔径扩大,成像效果的变化

        当孔径比较大时,传感器上一个点的像素由物体上多个点发出的光所贡献,也就导致孔径越大,所呈现的图像越模糊。那是不是孔径越小就越好呢?会不会让呈现的图像更加清晰?

        如果按照几何光学的理论来讲,该假设是对的,几何光学认为:光是直线传播的,也就是粒子。但是光具有波粒二象性,光即是粒子也是波,当一束波通过一个小孔后,会发生衍射现象,并且孔越小,衍射现象就会越严重:

image-20220801230800190

图15:光的波粒二象性

        从傅里叶光学的角度来讲:衍射的模式实际上对应着小孔的傅里叶变换。越小的孔,其衍射模式越宽,光的波动性更加显现,而越大的孔,其衍射模式越窄,光的粒子性更加显现:

image-20220801231003718

图16:光的衍射宽度与孔径大小的关系

        所以,孔径并不是越小越好。

3.3、光学相机原理

        在2.2节中,我们利用小孔进行成像,当光线透过小孔后,将会在传感器上投影出倒立的实像。然而,由于隔板阻挡了物体反射的绝大部分光线,将导致投影出的实像并不是很清晰。为了弥补小孔成像的不足,我们由凸透镜来代替小孔,使之成为光线的汇聚组件:

image-20220802092513864

图17:利用凸透镜进行成像

        在(图17),我们可以发现:物体上一个点所反射的光线将被凸透镜汇聚在传感器上的一个点。凸透镜能够汇聚物体的反射的光线在某点投影,而不是像小孔一样隔开大部分的光线,因此凸透镜成像将会比小孔成像更加清晰。正是因为凸透镜成像的优势,现代相机都采用凸透镜进行成像,采用凸透镜的相机也被称为现代光学相机。

4、传感器

4.1、传感器的分类

        在第1节,我们通过光学部分将光汇聚在传感器上成像之后,就需要利用传感器获取图像信息。

        目前,相机传感器可以分为单个传感器、条带传感器、环形条带传感器和阵列传感器:

img     img

单个传感器(左)      线性条带传感器(中)      环形条带传感器(右)


img    img

CCD队列传感器                         CMOS队列传感器

        阵列传感器是数字相机中采用的主要传感器,它具有较宽范围的传感特性,并能封装成具有大量单元的稳定阵列,其主要优点是将能量聚焦到阵列表面即可获取到一张完整的图像。

4.2、传感器的构造与原理

4.2.1、传感器构造

        在3.1节中,我们了解了传感器的外观,接下来我们将深入了解传感器的构造与原理。

        线条传感器和阵列传感器的单元阵列分布:

image-20220802095836631

图18:传感器的阵列分布

        阵列传感器的基本组成结构:

image-20220804111945269

图19:阵列传感器的组成结构

        (图19)中,微透镜可以帮助光电二极管收集更多的光,颜色滤镜可以吸取固定颜色的光线,光电二极管负责将光子转换为电子,势阱负责存储电子。

4.2.2、颜色滤镜原理

        ​ 在3.3.1节中我们提到了颜色滤镜,何为颜色?颜色滤镜的作用又是什么?

4.2.2.1、什么是颜色?

        光是一种电磁波,光的颜色并不是客观属性,客观属性是光的波长。下图展示了几乎完整的电磁波谱,而我们人眼所能看到的只是其中400nm—700nm的一小段,而颜色则是我们对这一小段电磁波的主观感觉而已。

image-20220802180736702

图20:电磁波谱

        在(图20)中,从左到右,光波(Wavelength)长度逐渐变长,频率(Frequency)逐渐变小。注意: 波长越短,频率越大,则热量越高;波长越长,则频率越小,相应的热量越低。这也为什么紫外线和一系列射线会危害人体生命安全的原因。

        人眼对颜色的主观感受与入射光的功率谱分布(SPD) 和人眼对不同光源的光谱敏感度(spectral sensitivity) 都有关。我们接下来分别探讨这两个概念。

4.2.2.2、光源的功率谱分布(SPD)

        在日常生活中,我们常常会发现不同光源所发出的颜色有所不同,正如(图21)所示:

image-20220802184129885

图21:不同光源所发出的颜色

        那么如何形容不同光源所发出的光?

        通常光源是由多个波长的光所组成,而每种波长的光的功率一般都不一样。例如画出每种波长的功率与它波长之间的关系,我们就可以得到光源的功率谱分布(SPD)。如下图所示:

image-20220802184818558

图22:不同光源的功率谱分布

4.2.2.3、光谱敏感度函数(SSF)

        在4.2.2.1节中,我们提出颜色只是人眼对光的主观感觉,那么人眼对不同波长的敏感度将会决定最终人眼所看到的颜色。实际上人眼包含三种对不同光波敏感的视锥细胞,对光波的敏感度可以用光谱敏感度函数(SSF) 来表示。最终的感觉由这三种细胞的响应共同构成:

shortS=λΦ(λ)S(λ)dλ  mediumM=λΦ(λ)M(λ)dλ  longL=λΦ(λ)L(λ)dλ(1)''short''\quad\quad\,S=\int_\lambda \Phi(\lambda)S(\lambda)d\lambda\\\ \\\ ''medium''\,\,\,\,M=\int_\lambda \Phi(\lambda)M(\lambda)d\lambda\\\ \\\ ''long''\quad\quad\,L=\int_\lambda \Phi(\lambda)L(\lambda)d\lambda \tag{1}

        在式子(1)中,Φ(λ)\Phi(\lambda)代表入射光线的SPDf(λ)f(\lambda)代表人眼的SSF

        传感器为了模拟人眼成像的原理,同样对不同波长的入射光线会有不同的敏感度,可以用光谱敏感度函数(SSF) 来衡量。传感器对入射光的响应是一个累加了对所有光波响应的值,表示为:

R=λΦ(λ)f(λ)dλ.(2)R=\int_\lambda\Phi(\lambda)f(\lambda)d\lambda.\tag{2}

​         正如公式(2)所示,传感器对光波的响应是入射光SPD与传感器本身的SSF乘积的积分。

4.2.2.4、颜色滤光阵列(Color Filter Array)

        从上面的讨论中我们知道了人眼对不同的光波有着不同的光谱敏感度函数,那么传感器如何模拟人眼的SSF?这里涉及到两个问题:(1)如何设计滤光静对不同光线的敏感度;(2)如何设计不同颜色滤光镜的最佳空间排列。

        在传感器中,颜色滤镜以预先设定好的形式来排列,构成颜色滤光阵列(Color Filter Array)。那何为颜色滤镜?         数码相机中使用数百万个微小的感光元来记录图像(图23)。当按下相机的快门并曝光时,每个感光元都会收集光子并转换为电子进行存储。当曝光结束、快门关闭时,相机将尝试测量电信号的强度来评估每个感光元中的电子数量,然后将电信号量化为数字信号,其数字精度由图像位深确定。例如JPEG照片的图像深度为32位,有RGB三种颜色,将用8位二进制存储每一种颜色的数值,那么对于一种颜色的像素值就有28=2562^8=256种情况,可以发现:位数越高,则颜色越精细。

image-20220804112120884

图23:感光元捕获图像信息

        ​ 但是存在一个问题:感光元无法区分每种颜色电子的数量,因此通过上述方法只能捕获灰度图像。为了捕获彩色图像,我们必须为每一个感光元上方设置一个滤镜,该滤镜仅允许特定颜色的光子通过:

图24:颜色滤镜过滤颜色

        从(图24)可以得知:每一个感光元只会捕获三种原色之一,会丢弃23\frac{2}{3}的入射光。因此为了尽可能多地捕获图像的色彩,我们就需要设置合理的颜色滤镜阵列。

        如何设置颜色滤光阵列是一个很热门的研究领域,不同的颜色滤光阵列:

image-20220802223804798

图25:各种类型的颜色滤光阵列

        到目前为止,我们常用是Bayer颜色滤光阵列。以2×22×2的小区域来看,Bayer阵列包含的绿色传感器是红色或蓝色传感器的两倍。这样设计的原因有两个方面:①人眼对绿色更为敏感,所以使用了更多的绿色滤光片采集绿色;②与每种颜色均等相比,带有绿色像素的冗余所产生的图像看起来噪声更少,并且具有更好的细节。

        设置颜色滤光阵列的过程,其实就是模拟人眼的SSF,不同的颜色滤光阵列会很大程度上影响最终图像的色彩。下图是Canon 40D和50D的光谱敏感函数图的比较。每个相机厂商,甚至是同一厂商的不同型号的相机传感器的SSF都可能存在不同。

image-20220802222920694

图26:Canon 40D和50D相机的SSF

4.2.3、光电二极管原理

        光电二极管原理: 爱因斯坦发现在高于某特定频率的电磁波照射下,某些物质内部的电子吸收能量后逸出而形成电流,这被称为“光电效应”(图27)。

image-20220802102609895

图27:光电效应

        以阵列传感器为例:当能量(或光)投影到传感器上时,首先入射光子会被微透镜汇聚,由颜色滤镜吸收对应颜色的光线,然后光电二极管将入射光子转换为电子并存储在势阱中。

image-20220802095328400

图28:传感器的对入射光处理过程

        上面就是传感器处理入射光的全流程,最终输出电子。

4.3、传感器的性能指标

        ​ 衡量传感器性能的基本指标:

  • Photodiode quantum efficiency(QE): 光电二极管量子效率

  • Photodiode response function: 光电二极管响应函数

  • Photodiode full well capacity: 光电二极管满阱容量

        光电二极管量子效率: 衡量有多少入射光子会被光电二极管转换成电子,也就是转换的电子数量与入射的光子数量的比值:

QE=#electrons#photons.(2)QE=\frac{\#\,electrons}{\#\,photons}.\tag{2}

        光电二极管响应函数: 通常来说,当不断改变入射光的强度时,转换的电子数量也会发生改变,并且光子数量与电子数量之间是线性关系,可以用一个线性函数来表示,而这个函数就是光电二极管的响应函数。注意:当势阱饱和(过曝)、光线过暗或者产生噪音时,响应函数将不会是线性的。

image-20220802153405865

图29:光电二极管响应函数

        光电二极管满阱容量: 势阱的最大容量称为满阱容量,衡量势阱最多可以存储多少电子。由于硅中光子的有限和固定的吸收长度,基本上满阱容量就是关于像素面积的函数。(图23)展示了常见相机传感器的满阱容量。

image-20220802154443108

图30、光电二极管满阱容量

4.4、模拟前端

4.4.1、模拟前端的工作流程

        入射光经过传感器的处理之后,转换为电子,但如何将电子转换为数字图像信号?

        模拟前端用于将电子转为数字信号,它的转换流程如下图所示:

image-20220802161708673

图31:模拟前端的工作流程

        首先,当相机镜头关闭时,模拟前端从传感器的势阱中读出电子,并转为模拟信号。在将模拟信号转换为数字信号之前,我们需要利用Analog Amplifier(Gain) 放大信号。相机设置中的ISO就是关于信号放大的倍率,并且相机的Vignetting(渐晕) 也与模拟前端部分有关。

        经过放大后的模拟信号将由Analog-to-digital converter(ADC) 转为10bits-16bits的数字信号,常见为12bits。详见3.4.3节。

        ​ Look-up table(LUT) 用于在一定范围内修正传感器响应的非线性,同时还能修复一些损坏的像素输出。

4.4.2、Vignetting(渐晕)

        在3.4.1节中,我们提到了一种现象叫做Vignetting(渐晕),它实际上是指生成的图像四周比中间暗:

image-20220802165924816

图32:Vignetting现象

        Vignetting的产生原因包括:

  • 机械原因: 边缘的光线被滤镜遮挡
  • 镜头原因: 边缘光线被镜头内组件遮挡
  • 物理原因: 光衰减与光入射到传感器阵列角度的余弦的四次方成比例(cos4定律)
  • 像素原因: 在正常角度下的入射到传感器上的而产生的信号比以斜角入射光的信号强

        Look-up table(LUT) 可以产生非线性的Gain从而纠正Vignetting现象,如下图所示:

image-20220802172538275

图33:LUT纠正Vignetting现象

4.4.3、模拟信号转为数字信号

        Analog-to-digital converter(ADC) 将模拟信号转为数字信号的过程中,主要包含两种处理:取样和量化。

        取样和量化的基本概念:如下图所示,一副连续的图像ff,图像的xx坐标和yy坐标都是连续的,其幅度也是连续的,想要将其图像数字化就需要对该图像的坐标和幅度进行取样,对坐标值进行数字化被称为取样,对幅度值进行数字化被称为量化。

image-20220723154412353

图34:提取图像的幅度值

        首先,我们沿着上图的ABAB线段提取出图像幅度值的曲线,得到对于如下的一维函数图,接下来我们将对其进行取样和量化操作。

image-20220723154847280

图35:像幅度值的曲线

        对于一个连续的幅度值曲线,将样本由叠加在函数上的小方框来表示,每个小方框的离散位置由图像底部对应的刻度标记指出,并将亮度值也转换(量化)为离散量,最终将一条连续的曲线转换了数个离散的样本点:

image-20220723160949170

图36:图像幅度值的采样和量化

        图像取样和量化之后的效果:

image-20220723161341457

图37:传感器输出的连续图像;图像取样和量化后的结果

        经过图像取样和量化后,我们获取了数字图像。存储数字图像十分简单,例如对于一张灰度图来说,灰度值被归一化到区间[0,1],每一个像素点的灰度都是0、0.5或1,分别代表黑色、灰色或白色,如下图所示:

image-20220723162515287

图38:数字图像的存储

4.4.4、生成RAW图像

        RAW格式的全称是(RAW Image Format),记录了由相机拍摄所产生的一些元数据,如ISO的设置、快门速度、光圈值、白平衡等信息。注意: 每个相机厂商有自己的RAW格式,并不一定以.raw当后缀的文件才是RAW图像。

        当入射光经过传感器转换为电子,模拟前端再将电子转换数字信号生成RAW图像时,图像会变成什么样呢?可以看到RAW图像显示出马赛克一样的方块,并且还有大量的噪声。所以,接下来就是通过相机内的图像处理系统对图像进行一系列处理,来使之变成最终美观的RGB图像。

image-20220803103631394

图39:JPEG图像(左);RAW图像(右)

5、图像处理部分 ISP(Image Signal Processing)

        在第4节中,我们获取了RAW图像,为了获取更加美观的JPEG图像,我们将在本节中对图像白平衡、去马赛克、去噪、颜色空间转换、色调重建以及最终压缩成JPEG图像:

image-20220803104929013

图40:ISP的工作流程

5.1、白平衡(white balance)

        由于不同的传感器使用的材料和工艺上有所不同,再加上光源差异,经过颜色过滤阵列捕获的RGB三个通道的数据相差很远,这就会导致本来应该是黑白灰的颜色变成其他颜色。幸运的是人眼可以纠正颜色,从而在不同的光源下,我们仍然可以正确地感知颜色。

image-20220803105327502

图41:在不同光源下,人眼自动纠正物体的颜色

        但相机不具备这样的功能,因此如果不经过颜色的校正,拍出来的图片的颜色就会很失真。这就是白平衡的作用:它使我们人眼所感知的白色与最终照片上呈现的白色保持一致。

image-20220803110116477

图42:白平衡前后的效果对比

        自动白平衡是一个很热门的研究领域,这里我们介绍两种基本的白平衡算法。正如前面所讲,白平衡是要使得我们人眼感知到的白色最后成像也是白色,那么首先就要确定图像中哪些是白色。这里有两种假设:

  • 灰色世界假设(Gray World Assumption)         假设图像的平均颜色是灰色,其算法可以表示为:

image-20220803110910773

  • 自世界假设(While World Assumption)         假设图像中最亮的区域是白色,其算法可以表示为:

image-20220803111023583

5.2、去马赛克(Demosaicing)

        RAW图像只包含一个通道,我们想要获取彩色图像就必须把RGB三个通道分离出来。如何分离?

图43:如何从RAW图像中分离RGB三通道

        去马赛克的方法主要是通过“插值”的方法来完成。常见的插值方法:

  • Bilinear插值
  • Bicubic插值
  • Edge-Aware插值

        在这里,我们使用Bilinear插值来完成去马赛克。思路很简单,就是用待定像素的四个邻居像素的平均值来填充该像素:

图44:Bilinear插值方法

        对于不同的颜色通道则独立的重复这一过程。

image-20220803113406889

图45:不同领域的Bilinear插值

​        最终分离出RGB三个通道:

image-20220803113548393

图46:去马赛克的效果

5.3、去噪(Denoise)

        经过去马赛克处理之后,RAW图像将变为彩色图像。此时的图像效果如下图所示,不难看出图像中存在着一些噪声。

image-20220803140636484_1__1__1_.png

图47:未去噪的图像

        未经过去噪处理的图像往往在光线暗淡时,噪声会更多。噪声的种类:

  • 散粒噪声

        散粒噪声是光子发射的随机性所导致的。比如一个光子可能出现在P1和P2位置,其概率分别为0.2和0.8,那么如果有10个光子,本来应该是2个在P1位置,8个在P2位置,但是存在量子涨落,P1只有1个光子,而P2有9个,那么实际情况与理论情况产生偏差,这个就是所谓的散粒噪声。散粒噪声是最主要的噪声来源。

  • 暗粒噪声

    ​        传感器发热导致逸出电子从而产生的噪声,温度越高,噪声越大。

  • 读取噪声

    ​        由于读取电路所引起的噪声。

​        那么如何去噪? 在本文中,我们只讨论相机内部的去噪算法。由于大部分相机本身的运算能力不高,所以意味着我们只能选取较为简单且利于硬件处理的算法。考虑篇幅问题,本文只介绍均值滤波和中值滤波两种算法:

image-20220803143654554(1)(1)

图48:均值滤波和中值滤波的算法思想

5.4、色彩空间转换(Color space transform)

​        色彩空间(Color space) 是对色彩的组织方式,是一个颜色的范围。JPEG这种压缩格式最多可以包含1670万色,但目前尚未有任何一种色彩空间使用到完整的1670万色。而色彩空间就是允许使用者在这1670万色中使用较宽或是较窄的范围。比如:XYZ和sRGB这两种色彩空间设置的色彩范围如下图所示,大范围是XYZ色彩空间,RGB三点所构造的范围是sRGB色彩空间:

image-20220803145650135(1)(1)

图49:XYZ和sRGB色彩空间

​        我们常说的RGB色彩空间是与设备相关的,也就是说在不同的领域,不同的设备中存在不同的RGB空间。由于RGB色彩空间与设备相关,因此同一张照片在不同的设备上将会出现色彩差异。

​        为了解决上述问题,CIE提出了CIE XYZ,微软和惠普提出sRGB。这两种色彩空间都是标准色彩空间且与设备无关,意味着,只要相机和电脑采用相同的色彩空间,图像就不会存在色彩差异。

​        回归主题,在传感器生成RAW图像的过程中,采用的便是与设备相关的RGB色彩空间,因此在生成JPEG图像之前,我们还需要将图像的色彩空间转换为标准的、与设备无关的色彩空间。

​        颜色空间的变换。其实,不同色彩空间的的转换就是一个线性变换的过程,因此只需要乘上一个变换矩阵,就可以变换为相应的色彩空间。例如,Sensor RGB色彩空间sRGB色彩空间转换的流程如下所示:

image-20220803152714959(1)(1)

图50:Sensor RGB向sRGB的变换流程

​        可以看到为了得到sRGB图像,我们经过了Sensor RGB->XYZ->LMS->WB->XYZ->sRGB的过程,其中WB(白平衡)放在了这里,与我们原来描述的白平衡在前的方式不同(这取决于设备生产商,不同的厂商做法不一样,总的来说,在工业界更加倾向于白平衡在前的做法)。

​        颜色转换与随后的Tone reproduction共同构成了“颜色渲染"部分,这一步每个设备生产商甚至同一生产商的不同设备的做法都是不一样的。这也是为什么我们用不同设备拍摄同一场景时,所看到的照片颜色不一样的原因:

image-20220803153806193(1)(1)

图51:同一场景中,不同相机的拍摄效果

5.5、色调重建(Tone reproduction)

​        色调重建,也叫做Gamma校正。 我们知道传感器对光线的响应基本上是线性关系,但是人眼对于光的响应是非线性的。也就是说,如果不对传感器处理的图像进行校正,那么我们会感觉照片的颜色过暗(图52)。

image-20220804102709667

图52:传感器与人眼对光的响应不一致导致照片颜色过暗

​        如何理解人眼对于光的响应是非线性?假如我们在一间漆黑的房间里面,点亮一根蜡烛,那么人眼会很敏锐地注意到这根点燃的蜡烛。

image-20220803162804354(1)(1)

图53:点燃一根蜡烛

​        然后我们继续点燃更多的蜡烛,在最开始蜡烛的数量很少时,哪怕点燃一根蜡烛,我们也会很快注意到它的存在,但是当已经点燃很多蜡烛之后,再去点燃几根蜡烛时,人眼已经无法轻易判断出是否有新蜡烛被点燃。

image-20220803163206258(1)(1)

图54:当点燃的蜡烛很多时,再点燃一根蜡烛已无法意识到它的存在

​        对于上述现象,究竟是什么原因导致的?其实这就是人眼对光的非线性响应。人眼天生就对黑暗敏感,在光线很暗时,哪怕有一点亮度,也会引起人眼的巨大响应,而随着亮度不断增强,人眼对光的响应也将逐渐降低。如下图所示:

image-20220803164746652(1)(1)

图55:人眼对光的非线性响应

​        (图47)中,当我们感知到0.5程度的亮度时,而实际的光强度其实只有0.2程度。如果相机不对图像校正,意味着当为了获取数字图像而进行采样、量化时,会采用线性的方式完成:

image-20220803165533023(1)(1)

图56:线性采样、量化

​        (图48)中,对亮度线性采样的结果为纵轴左边的量化图。可以发现,对于暗部的划分很粗糙,0.1程度的光强度将对应一大块的暗部,而对亮部的划分又很细腻。线性采样保留了大量的亮部细节,而忽略了暗部细节,但人眼恰好对暗部很敏感,而对亮部不敏感,导致最终生成的图像会过暗。

​        为了避免线性采样的不足,我们可以尝试下列几种采样方式:

img     img

图57:密集型线性采样(左);非线性采样(右)

​        密集型线性采样把暗部也进行了细致地划分,但是整体所保留的细节信息过多。非线性采样既细致地划分暗部细节,同时还节省了大量的空间。再对比一下线性采样与非线性采样的差别:

image-20220803174331073(1)(1)(1)(1)(1)

图58:线性采样与非线性采样的效果差异

​        由于相机是按照非线性对亮度进行采样,因此显示端同样也需要通过非线性的方式对图像进行渲染。注意:相机生成图像是把光强度映射为亮度编号,显示器则是把亮度编号映射为光强度,因此显示端的图像亮度渲染函数与相机映射图像亮度的函数是相反的。

image-20220803174619743(1)(1)(1)(1)(1)(1)

图59:相机采样方式与显示渲染方式

​        简单来讲,为了解决传感器与人眼对光亮的响应差异性,我们对传感器所采集到的图像进行了Gamma校正,使线性响应变为非线性响应,从而模拟人眼的对光亮的响应:

image-20220804103123213

图60:加入Gamma校正之后效果

5.6、小节

​        在本节中,为了将RAW图像转换为JPEG图像,我们对图像进行白平衡、去马赛克、去噪、色彩空间变换和Gamma校正等一系列处理,最后只需要将图像压缩成JPEG格式的图像即可。

6、总结

        本文从入射光开始讨论相机的成像原理,物体所反射的光线通过光学器件进入相机内部之后会映射到传感器上,传感器利用光电效应将光子转换为电子并存储在势阱中,再由模拟前端将电子读出并转为数字信号,生成RAW图像,最后经过ISP对图像进行白平衡、去马赛克、去噪、色彩空间转换、色调重建和压缩图像之后生成JPEG图像。

参考文献

1、Wang Hawk—小孔相机

2、从入射光到JPEG相片-数码相机内部的秘密—Wang Hawk

3、CMU 2017 Fall Computational Photography Course 15-463, Lecture 2

4、CMU 2017 Fall Computational Photography Course 15-463, Lecture 3

5、数字图像处理(第四版)Digital Image Processing,Fourth Edition (Rafael C.Gonzalez, Richard E.Woods)

6、南京航天航空大学——计算机视觉三维测量与建模

7、【音视频基础】(四):俗称照片的彩色数字图像二

8、 从相机raw图像到日常看到的jpeg图像

9、rawRGB、RGB和YUV数据格式与转换

10、Raw格式图像原理简述

11、何为散粒噪声