计算机图形学-12:相机与透镜
成像
图像有两种来源。渲染是合成 Synthesis:场景、几何和光照由数据描述,光栅化或光线追踪计算每个像素。相机是捕捉 Capture:真实世界中已经存在的光经过成像系统,被记录成照片。二者都要回答同一个问题:哪些光线被保留,哪些光线被积分掉。
普通相机包含光圈、透镜、快门和传感器。关于辐亮度与辐照度,传感器上的一个像素记录的是到达该点的总辐照度,而不是带有来向信息的单条辐亮度。如果把感光元件不加镜头地放在物体前面,每个位置都会收到来自物体许多方向的光,方向被相加后,各位置读数会很接近,结果就是一片模糊。
光圈限制光束的横向范围,透镜把来自某个深度的光重新汇聚到传感器,快门控制积分时间,传感器把光转换为电信号。现实相机的镜头由多片透镜组成,但相机模型可以先把它们压缩成一个薄透镜。小孔成像是理解方向选择的极限:孔径越小,单个传感器位置接收的方向越单一,通光量按孔面积下降;孔径过大时会丢失空间分辨率。

人物不同位置发出的光可以落到感光平面的同一个位置,平面上不同位置也接收混合来向。把所有方向相加后,读数失去物点对应关系;小孔和透镜分别通过限制或重新汇聚光束建立这种对应。
针孔只允许一小束方向明确的光通过。物体上的每一点发出的光穿过针孔后,在另一侧形成倒立像;孔太大时,一个物点会覆盖多个传感器位置,孔太小时通光量极低并最终受到衍射限制。理想几何针孔没有离焦带来的景深变化;实际小孔仍受孔径大小和衍射限制,不能获得无限分辨率。

上排光线只经过小孔,物点在另一侧形成倒立像;下排透镜让经过不同孔径位置的光汇聚到对应像点,可以在保留成像关系时增加通光量。左侧实拍对比还显示,小孔照片并不自动拥有更高分辨率。
传感器与胶片都是感光记录介质:它们负责把到达的光量转换并保留下来。数字图像文件的编码、量化和压缩属于记录之后的输出步骤,不能把胶片说成数字输出格式。计算摄影还研究更丰富的成像方式,例如 transient imaging 在极短时间尺度记录光在空间中的传播过程,这属于 computational photography 的方向,本篇只把普通相机作为基础模型。
视场
视场角 Field of View,FOV 描述相机能够看到的角度范围。传感器在某一方向的尺寸为 、针孔到传感器的距离为 时,相似三角形给出
固定传感器时,焦距越短,视场越宽;焦距越长,视场越窄。配图只改变焦距,左侧的 17 mm 视场最宽,1000 mm 最窄;传感器尺寸保持不变。

更换传感器尺寸也会改变视场。为了让不同画幅的焦距数值可以比较,摄影通常以 35 mm 画幅为基准。手机标注的 28 mm 往往是等效焦距,而不是机身内部真的放入了 28 mm 的光学长度。若传感器宽度为 ,一种水平等效焦距写法是
透视主要由相机位置决定;换焦距而保持相机位置不动,首先改变的是视场和构图。
视场公式来自把传感器高度 对半分:半视角的正切是 ,取反正切再乘 2 得到完整视场。水平、垂直和对角视场分别应使用对应方向的传感器尺寸;有限物距时传感器到透镜的像距未必等于焦距,严格计算应使用实际像距和入瞳位置。
曝光
快门打开期间,传感器积累辐照度。一般形式是
当辐照度在曝光期间近似恒定时,才可写成 。 是曝光量, 是传感器平面的辐照度, 是曝光时间。光圈改变单位时间的进光量,快门改变积分时间,ISO 改变传感器信号或输出标度而不增加实际光子数。
光圈扩大时进光量增加,景深 Depth of Field,DOF,即可以接受为清晰的一段物距范围,通常变窄;快门越长,接收能量越多,但运动模糊越明显;ISO 放大已有信号,也会放大暗部噪声。ISO 100 与 ISO 12800 的对比图中,后者暗部颗粒和彩色噪声明显增加。

镜头有效孔径直径为 、焦距为 时,f-number 定义为
理想像面照度近似满足
从 f/4 换到 f/8 时孔径直径减半,面积变成四分之一,若要维持相近曝光量,曝光时间需增加四倍,例如从 秒变为 秒。两张照片的亮度可以接近,但景深和运动模糊不会相同。
标准整档 f-number 近似为 ,相邻两档的孔径面积相差一倍。f-number 不能只写成孔径直径的倒数,因为不同焦距的镜头在同一孔径下的像面照度不同; 才提供了可比较的量。实际有效孔径使用入瞳 Entrance Pupil 的直径,即从物体一侧透过前方镜片看到的光圈像,可能与机械开口不同。
ISO 可以在传感器读出之前使用模拟增益,也可以在数字信号中乘一个比例。两种实现对读出噪声的放大位置不同,但都不会增加曝光期间到达传感器的光子数。为了保持输出亮度,可以在光圈、快门和 ISO 之间调整设置;只有光圈和快门直接改变实际曝光量 ,ISO 的补偿不能消除低曝光带来的光子噪声。
快门与运动模糊
机械快门从关闭、打开到再次遮住传感器,需要有限运动时间;单反的反光镜抬起也不等于已经开始曝光。不同位置打开的时刻可能不同。先用全局快门 Global Shutter 理想化为全部像素共享同一曝光区间,归一化的时间平均为
曝光期间物体从一个位置移动到另一个位置,传感器把中间所有位置的光平均起来,因此物体出现拖影。物体速度越大或快门时间越长,模糊越明显。运动模糊也具有抗锯齿作用:它是在时间维度上对连续运动进行积分。

滚动快门 Rolling Shutter 按行或区域依次曝光,不同行对应不同起始时刻。高速旋转的螺旋桨或快速转动的相机因此会出现倾斜、弯曲和扭曲。高速摄影用极短快门冻结运动,通常需要大光圈或较高 ISO;长曝光摄影则利用运动模糊形成流水、车灯和星轨的连续轨迹。
全局快门的时间平均可以写成
滚动快门则让每一行拥有自己的起始时刻:
两者在静止场景中等价,运动场景中会因为不同行记录不同时间而产生几何扭曲。
运动模糊并非总是缺陷。赛车和高速摄影常故意保留拖影来表达速度;高速摄影用很短的 冻结运动,长曝光则让流水、车灯和星轨形成连续轨迹。将一张静止图像统一做二维卷积不能正确处理运动中的遮挡、反射变化和非线性轨迹,渲染时应在快门时间区间内采样场景状态。
薄透镜
真实镜头由多片曲面透镜组成,用来修正球差、色差和畸变。薄透镜近似忽略厚度和像差,假设平行光经过透镜后通过焦点,经过焦点的光反向传播后变成平行光,通过光心的光线近似不偏折。
物距为 、像距为 、焦距为 时,利用两组相似三角形可以推得
一组相似三角形来自通过光心的光线:
另一组来自平行于光轴、折射后经过焦点的光线:
消去高度比,得到 ,再除以 得到 Gaussian Lens Equation。负号表示真实像倒立。焦距是透镜属性,实际成像位置则由焦距和物距共同决定;对焦就是让传感器与该成像位置重合。
若把通过光心的光线与平行光线分别画出,左侧相似三角形给出物高/物距关系,右侧相似三角形给出像高/焦距关系。两式共享同一个放大率,消去高度后才得到透镜公式;因此像距、物距和焦距的符号约定必须在整篇中保持一致。本文采用真实物体、真实倒立像和实焦距均取正值的约定。
由共轭关系还可得到 Newton 形式:
若 、,则 ,即物、像距改为从各自焦点测量后,乘积为 。两个焦点本身并不互相成像;物体位于物方焦点时,出射光平行,像在无穷远。焦点的几何定义是平行光经过它,或经过它的光反向传播后变成平行光;它不等于任意物体的实际成像位置。

景深
传感器固定在某个像距时,只有一个物平面能精确成像。其他深度的点在传感器前后会聚,传感器截取的是一个圆,称为弥散圆 Circle of Confusion,CoC。若理想像面为 、传感器位置为 、孔径直径为 ,相似三角形给出
代入 :

黑色 Image Plane 是该物点本应汇聚的像面,蓝色 Sensor Plane 是固定传感器。光锥在蓝线处还没有收缩成点,于是截出直径 C。图中 A 标记孔径直径,对应正文 D;光锥相似三角形给出 C/D 与离焦距离、理想像距之比。
孔径越大( 越小),同样的离焦量产生越大的弥散圆。若允许弥散圆不超过 ,人眼会把对应的一段物方距离都看作清晰,这段范围就是景深。景深不是“所有点都精确对焦”,而是由输出尺寸、观看距离和可接受模糊阈值定义的范围。
把这个关系改写成物方距离,可以完整得到景深边界。相机对焦在物距 ,由薄透镜方程,传感器位于
另一个物点的物距为 时,其理想像距为
将 、 和 代入 CoC 关系,先得到
再把分式化简为
对焦位置使 ;同样的物距偏移在近处产生更大的弥散圆,因为分母含有物距 。令 ,在近界 处去掉绝对值得
移项得到
在远界 处,
因此
远界分母为零时,景深延伸到无穷远;分母为负时也不能把负值当成真实距离,应同样解释为无穷远。令该分母为零得到超焦距
当 时近界为 。这只是“弥散圆不超过阈值”的可接受清晰范围,并不意味着整段距离都精确聚焦。
允许弥散圆的阈值可以用像素尺寸帮助理解:若模糊斑不超过一个像素,输出中可能无法分辨它和点像的差异。阈值不是物理常数,而取决于最终输出尺寸、观看距离和观察者的清晰度标准。对焦距离两侧的景深一般不对称,近界更靠近相机,原因正是 的分母包含物距 。
小光圈使景深增大,大光圈使焦外模糊增大;短焦距通常给出更深景深,但比较不同焦距时必须说明是否保持构图、相机位置和观看条件不变。

交互示意展示了焦距、f-number、物距和允许弥散圆如何共同影响景深;它适合用来说明参数关系,不应替代上面的 CoC 几何推导。

透镜采样
薄透镜相机的光线生成可以按四步实现:
- 在像素覆盖区域中采样传感器点 ;
- 从针孔中心穿过 ,求它与选定焦平面的交点 ;
- 在透镜孔径圆盘上采样点 ;
- 从 指向 发射相机光线。

对固定的传感器采样点,经过透镜不同位置的虚线在选定 Subject Plane 上对应同一点。焦平面之外的兔子并不共享这个交点,所以多个孔径样本会在其他深度形成模糊。生成光线时应先找到焦平面点,再由孔径采样点朝它发射。
固定一个像素内采样位置时,不同孔径样本生成的光线在焦平面交于同一点,焦外交点随孔径样本变化,平均后形成散焦。圆盘半径为 时要做均匀面积采样,令 :
平方根来自圆盘面积累积分布 。直接令 会使样本过度集中在中心,破坏孔径积分的权重。针孔相机每个像素只有一个原点,薄透镜相机同时对像素面积和孔径面积积分,有限样本会让散景出现噪声,需要增加样本或使用分层采样。
光线方向的坐标约定要和传感器平面一致。若使用真实传感器平面,传感器到透镜再到场景的方向需要反向延长;若使用相机前方的虚拟像平面,则可直接朝场景发射。像素面积采样和孔径面积采样都属于蒙特卡罗积分,应在估计中使用相应的 PDF。孔径采样越充分,焦外散焦斑的亮度分布越接近真实透镜。
真实传感器在透镜后方,反向追踪应从传感器朝透镜延长到物方焦平面;虚拟前像平面则采用对应的前向约定:
1 | GenerateThinLensRay(pixel): |

