图像采集

从光子到像素

你每天用手机拍几十张照片,但有没有想过:三维的世界是怎么变成手机屏幕上这个二维的像素矩阵的?为什么同一个人在广角自拍和长焦拍摄下看起来像两个人?为什么微距下昆虫的一只眼睛清晰而另一只模糊?

上一讲中,我们把图像定义为一个二维函数 f(x,y)f(x,y),也简单提到了世界坐标系、相机坐标系和图像坐标系之间的关系。本讲要回答一个更根本的问题:这个 f(x,y)f(x,y) 是怎么从三维世界中「生成」的?

这就是成像(Image Formation)的问题——从场景中的一个三维点,到传感器上的一个像素值,中间经历了光学聚焦、几何投影、光电转换和数字化等一系列步骤。理解成像过程是理解后续所有视觉算法的前提:上一讲说过,计算机视觉本质上是一个病态问题——三维到二维的投影不可逆。但只有精确知道这个「投影」是怎么做的,才可能尽量多地恢复丢失的信息。

本讲将沿着光的传播路径,从相机的物理结构出发,建立小孔成像和薄透镜的数学模型,再讨论景深、畸变、视场角和曝光等实际问题。到本讲结束时,开头的三个问题都会有清晰的答案。

数码相机的基本结构

一台数码相机由三大部分组成:

  • 光学部分:镜头(透镜组),负责将光线聚焦到传感器上
  • 传感器部分:感光元件阵列,将光信号转化为电信号
  • 图像处理部分:内置的图像信号处理器(ISP),完成去马赛克、白平衡、降噪等后处理

传感器阵列是数码相机区别于胶片相机的核心——它用一个由光敏二极管组成的网格替代了胶片,每个单元将入射的光子转化为电子。常见的传感器类型有 CCDCMOS 两种,其中 CMOS 传感器因功耗低、集成度高、成本低而成为当今主流。每个传感器单元记录的是来自一小范围入射角的光的总量。

动态范围与相机响应

真实场景中的光强跨越极大范围。相机的响应曲线在中间段(像素值约 15-240)近似线性,但在两端出现非线性——太暗时欠饱和(Undersaturation),太亮时饱和(Saturation),信息都会丢失。场景的这种巨大亮度跨度称为动态范围(Dynamic Range)。

Bayer 滤色阵列

每个传感器单元本身只能感知光强,无法区分颜色。为了获取彩色信息,大多数相机在传感器前放置一层 Bayer 滤色阵列——由红、绿、蓝三种滤光片按 RGGB 模式排列(绿色是红或蓝的两倍,因为人眼对绿色最敏感)。

这意味着每个像素只记录了 RGB 中某一个通道的值。缺失通道需要通过去马赛克(Demosaicing)算法从相邻像素插值得到。最终,三通道合成完整的彩色图像。

为什么绿色多一倍?

Bayer 阵列中绿色滤光片的数量是红色或蓝色的两倍(RGGB 排列)。这是因为人眼对绿色波段最敏感——人类亮度灵敏度函数在约 555 nm\pu{555nm}(黄绿色)处达峰值。多采样绿色通道相当于在人眼最敏感的区域获取更高的空间分辨率,使最终图像在主观上更清晰。

从传感器到彩色图像的完整链路如下:

flowchart LR
    A["入射光"] --> B["Bayer 滤色阵列<br/>(RGGB 马赛克)"]
    B --> C["传感器阵列"]
    C --> D["RAW 数据<br/>(每像素单通道)"]
    D --> E["去马赛克<br/>+ 白平衡<br/>+ 降噪"]
    E --> F["三通道<br/>RGB 图像"]

    classDef light fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
    classDef process fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
    classDef data fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px

    class A light
    class B,C,E process
    class D,F data

有了传感器和色彩采集机制,下一个问题是:光是怎么到达传感器上正确位置的?

小孔成像

为什么需要光学系统

假设没有任何光学系统——把传感器直接放在物体前方,会发生什么?物体上每个点发出的光会发射到传感器的每个像素上,最终得到的是一片模糊的混合光。这种「每个像素看到所有东西」的情况显然无法成像。

解决方案的核心思想很简单:让每个像素只「看到」场景中的一个点

小孔的魔法

在物体和传感器之间加入一块不透光的隔板,上面只开一个很小的孔。这样,传感器上每个像素接收到的光子只来自场景中沿直线对准这个小孔的那一个点——于是在传感器上形成了清晰的倒像。

这就是小孔成像(Pinhole Camera)的原理。它最早的实验记载来自约 2500 年前的《墨经》:

景。光之人,煦若射,下者之人也高;高者之人也下。足蔽下光,故成景于上;首蔽上光,故成景于下。

墨子描述的正是小孔成像的倒像现象。古希腊的亚里士多德也观察到了类似现象,并记录了暗箱(Camera Obscura)的原理。

小孔相机的参数

小孔相机由两个关键参数决定:

焦距(Focal Length)ff 是小孔到传感器平面的距离。保持物体与小孔的距离不变,移动传感器改变焦距,成像的大小会随之变化——焦距越大,像越大。

孔径(Aperture)是小孔的直径。理想情况下孔径应该无穷小,这样每个像素只接收一条光线,成像最锐利。但现实中:

  • 孔径太大:同一个像素接收来自多个物点的光,图像模糊
  • 孔径太小:光的衍射(Diffraction)效应变得显著(光不再沿直线传播而是发生弯曲),反而导致模糊;同时进光量极少,信噪比很低

只有在两者之间取得平衡,才能获得既清晰又有足够亮度的图像。

光的波粒二象性

小孔越小越好只在「光是粒子」的假设下成立。但光同时也是波——波长约 400700 nm\pu{400-700nm}。当孔径缩小到接近光波长的量级时,衍射效应会使光线散开,成像反而变模糊。这为小孔成像的清晰度设定了物理上限。

小孔相机的数学模型

小孔相机虽然结构简单,却完整地体现了三维到二维投影的几何本质。接下来我们将为这个投影建立精确的数学模型——这个模型在计算机视觉中无处不在,从三维重建到增强现实,几乎所有涉及相机几何的算法都以它为基础。

整个成像过程可以分解为一系列映射的组合:世界坐标系 → 相机坐标系(3D→3D 刚体变换)→ 像平面坐标系(3D→2D 透视投影)→ 图像坐标系(2D→2D 平移和缩放)。为了统一表示这些变换,我们需要先引入一个关键工具。

齐次坐标

齐次坐标(Homogeneous Coordinates)为投影几何提供了一个统一而优雅的表示框架。对于二维点 (x,y)(x, y),其齐次坐标为 (x,y,1)(x, y, 1)——在原有分量上附加一个常量 1。

齐次坐标的核心性质是:乘以任意非零常数后表示同一个点。即 (x,y,1)(x, y, 1)(2x,2y,2)(2x, 2y, 2)(kx,ky,k)(kx, ky, k) 都代表同一个二维点。要从齐次坐标 (a,b,c)(a, b, c) 恢复笛卡尔坐标,只需除以最后一个分量:(a/c,b/c)(a/c, b/c)

例如,齐次坐标 (6,4,2)(6, 4, 2)(3,2,1)(3, 2, 1) 表示的是同一个二维点 (3,2)(3, 2)

这个看似多余的操作有什么好处?它让透视投影可以用矩阵乘法表示。透视投影的本质是除法——x=fX/Zx' = fX/Z,其中 ZZ 在分母上。在普通坐标下,这种非线性操作无法写成矩阵乘法。而在齐次坐标下,我们可以先做矩阵乘法得到 (fX,fY,Z)(fX, fY, Z),最后再统一除以第三个分量得到 (fX/Z,fY/Z,1)(fX/Z, fY/Z, 1)——除法被「延迟」到最后一步,整个投影过程变成了线性代数。

齐次坐标的物理意义

齐次坐标 (kx,ky,k)(kx, ky, k) 可以理解为三维空间中从原点出发、经过 (x,y,1)(x, y, 1) 的一条射线上的所有点。这条射线上的点在投影后都映射到同一个二维位置——这恰好对应了「无穷多个三维点投影到同一个像素」的事实。

投影公式

设三维空间中一个点在相机坐标系下的坐标为 (Xc,Yc,Zc)(X_c, Y_c, Z_c),小孔到传感器的距离为 ff。根据相似三角形:

fZc=xXc=yYc\frac{f}{Z_c} = \frac{x'}{X_c} = \frac{y'}{Y_c}

其中 (x,y)(x', y') 是该点在像平面上的坐标。这给出投影关系:

x=fXcZc,y=fYcZcx' = f\frac{X_c}{Z_c}, \quad y' = f\frac{Y_c}{Z_c}

虚拟像平面

实际的小孔相机中,像在小孔后方呈倒像。但在数学推导中,为了方便,常在小孔前方假设一个虚拟像平面(Virtual Image Plane),距离小孔也是 ff,上面呈正像。两者在数学上完全等价,只是省去了处理倒像的符号麻烦。

用齐次坐标表示,这个投影可以写成矩阵形式:

Zc[xy1]=[f0000f000010][XcYcZc1]Z_c \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix}

左边乘了 ZcZ_c,但在齐次坐标下这不影响结果——最后除以第三个分量即可。

从相机坐标到图像坐标:内参矩阵

上面的公式给出的坐标 (x,y)(x', y') 是以光轴与像平面的交点(称为主点,Principal Point)为原点的像平面坐标系,单位是物理长度(如毫米)。但计算机中存储的图像使用的是图像坐标系(也叫计算机图像坐标系),原点通常在左上角,单位是像素,且水平和垂直方向上像素的物理尺寸可能不同。

从像平面坐标到图像坐标,需要考虑两个修正:

  1. 主点偏移:主点在图像坐标系中的位置为 (cx,cy)(c_x, c_y)
  2. 尺度因子:水平和垂直方向上焦距的像素等效值分别为 fx=αff_x = \alpha ffy=βff_y = \beta fα,β\alpha, \beta 是单位转换系数)

综合后,图像坐标 (u,v)(u, v) 与相机坐标的关系为:

u=fxXcZc+cx,v=fyYcZc+cyu = f_x \frac{X_c}{Z_c} + c_x, \quad v = f_y \frac{Y_c}{Z_c} + c_y

写成矩阵形式:

Zc[uv1]=[fx0cx0fycy001]K[XcYcZc]Z_c \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \underbrace{\begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}}_{\bm{K}} \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix}

内参矩阵

K\bm{K} 称为内参矩阵(Intrinsic Matrix),也叫标定矩阵(Calibration Matrix)。它完全由相机自身的参数决定——焦距 (fx,fy)(f_x, f_y) 和主点位置 (cx,cy)(c_x, c_y),与拍摄的场景无关。这些参数可以通过相机标定(Camera Calibration)实验测定。

从世界坐标到相机坐标:外参矩阵

相机坐标系描述的是以相机光心为原点的局部坐标,而我们通常更关心场景点在世界坐标系中的位置。两者之间通过刚体变换(旋转 + 平移)联系。

设相机在世界坐标系中的位置为 o\bm{o},相机坐标系相对于世界坐标系的旋转矩阵为 R\bm{R}3×33\times3 正交矩阵)。那么世界坐标系中的点 pw\bm{p}_w 在相机坐标系下的坐标为:

pc=R(pwo)=Rpw+t,t=Ro\bm{p}_c = \bm{R}(\bm{p}_w - \bm{o}) = \bm{R}\bm{p}_w + \bm{t}, \quad \bm{t} = -\bm{R}\bm{o}

其中 t\bm{t} 是平移向量。用齐次坐标写成 4×44\times4 矩阵:

[pc1]=[Rt01]外参矩阵[pw1]\begin{bmatrix} \bm{p}_c \\ 1 \end{bmatrix} = \underbrace{\begin{bmatrix} \bm{R} & \bm{t} \\ \bm{0}^{\intercal} & 1 \end{bmatrix}}_{\text{外参矩阵}} \begin{bmatrix} \bm{p}_w \\ 1 \end{bmatrix}

外参矩阵(Extrinsic Matrix)描述的是相机在世界中的位姿(位置和朝向),共 6 个自由度(3 个旋转 + 3 个平移)。

完整投影矩阵

将内参和外参联立,就得到了从世界坐标到图像坐标的完整投影矩阵 P\bm{P}

P=K[Rt]\bm{P} = \bm{K} \begin{bmatrix} \bm{R} \mid \bm{t} \end{bmatrix}

其中 K\bm{K}3×33\times3 内参矩阵,[Rt][\bm{R} \mid \bm{t}]3×43\times4 的外参矩阵。投影过程为:

Zc[uv1]=P[xwywzw1]=[p11p12p13p14p21p22p23p24p31p32p33p34][xwywzw1]Z_c \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \bm{P} \begin{bmatrix} x_w \\ y_w \\ z_w \\ 1 \end{bmatrix} = \begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\ p_{21} & p_{22} & p_{23} & p_{24} \\ p_{31} & p_{32} & p_{33} & p_{34} \end{bmatrix} \begin{bmatrix} x_w \\ y_w \\ z_w \\ 1 \end{bmatrix}

这个 3×43\times4 的矩阵 P\bm{P} 将三维世界中的任意一点映射到图像上的一个像素——整个成像过程的几何本质浓缩在 12 个数字中。

投影计算示例

假设一个简化的相机,焦距 fx=fy=500f_x = f_y = 500 像素,主点在图像中心 (cx,cy)=(320,240)(c_x, c_y) = (320, 240),相机位于世界坐标系原点且朝向 zz 轴正方向(即 R=I\bm{R} = \bm{I}t=0\bm{t} = \bm{0})。

世界中有一个点 pw=(1,0.5,5)\bm{p}_w = (1, 0.5, 5)(在相机前方 5 m\pu{5m} 处),它的图像坐标为:

u=500×15+320=420,v=500×0.55+240=290u = 500 \times \frac{1}{5} + 320 = 420, \quad v = 500 \times \frac{0.5}{5} + 240 = 290

如果将物距变为 10 m\pu{10m}Zc=10Z_c = 10),则 u=370u = 370v=265v = 265——物体在图像上「缩小」并靠近中心,这就是近大远小。

用 Python 来实现这个投影过程非常直观:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np

# 内参矩阵
K = np.array([[500,   0, 320],
              [  0, 500, 240],
              [  0,   0,   1]])

# 外参(相机在原点,无旋转)
R = np.eye(3)
t = np.zeros((3, 1))

# 投影矩阵 P = K @ [R | t]
P = K @ np.hstack([R, t])

# 世界坐标点(齐次)
pw = np.array([1, 0.5, 5, 1])

# 投影
p_img = P @ pw             # [u*Zc, v*Zc, Zc]
uv = p_img[:2] / p_img[2]  # 归一化 → [u, v]
print(uv)  # [420. 290.]

投影丢失了什么

3×43\times4 矩阵 P\bm{P} 将四维齐次坐标映射到三维齐次坐标——维度减少了,信息不可避免地丢失。具体来说,深度信息被彻底抹去:同一条从光心出发的射线上的所有点(远近不同但方向相同)都会投影到同一个像素上。这就是上一讲提到的「病态问题」的数学根源——从二维图像反推三维结构本质上有无穷多解,必须借助先验知识(如双目视觉、运动信息或学习得到的深度先验)来消除歧义。

flowchart LR
    W["世界坐标系<br/>(x_w, y_w, z_w)"] -->|"外参 [R|t]<br/>旋转+平移"| C["相机坐标系<br/>(X_c, Y_c, Z_c)"]
    C -->|"内参 K<br/>透视投影+像素化"| I["图像坐标系<br/>(u, v)"]

    classDef world fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
    classDef camera fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    classDef image fill:#fff3e0,stroke:#ef6c00,stroke-width:2px

    class W world
    class C camera
    class I image

透视投影与正交投影

有了投影矩阵,我们可以精确计算任意三维点在图像上的位置。但投影不仅仅是一个数学运算——它带来了一系列视觉效应,直接影响我们如何理解和使用图像。

透视投影的特性

小孔相机的投影模型是透视投影(Perspective Projection),它最显著的特性就是「近大远小」:物体成像的放大倍率与物距 ZZ 成反比,与焦距 ff 成正比。

放大倍率fZ\text{放大倍率} \propto \frac{f}{Z}

一个自然的问题:如果同时把焦距和物距都缩短一半(ff/2f \to f/2ZZ/2Z \to Z/2),放大倍率 f/Zf/Z 不变,那成像是否一样?

答案是不一样。物体本身有深度——鼻子离镜头比耳朵近。关键在于透视投影的非线性:每个点的放大倍率取决于各自的物距 ZZ,而不是某个统一的 ZZ

考虑一个具体例子:假设鼻尖距镜头 50 cm\pu{50cm},耳朵距镜头 65 cm\pu{65cm}(头部深度约 15 cm\pu{15cm})。焦距 f=50 mmf = \pu{50mm} 时:

  • 鼻尖的放大倍率 f/Z=50/500=0.1\propto f/Z_{\text{鼻}} = 50/500 = 0.1
  • 耳朵的放大倍率 f/Z=50/650=0.077\propto f/Z_{\text{耳}} = 50/650 = 0.077
  • 比值:0.1/0.077=1.300.1/0.077 = 1.30,鼻子比耳朵大 30%

现在改用 f=200 mmf = \pu{200mm} 长焦镜头,退后到 200 cm\pu{200cm} 处保持相同构图:

  • 鼻尖:200/2000=0.1200/2000 = 0.1
  • 耳朵:200/2150=0.093200/2150 = 0.093
  • 比值:0.1/0.093=1.070.1/0.093 = 1.07,差异缩小到 7%

头部深度 15 cm\pu{15cm}50 cm\pu{50cm} 物距中占 30%,但在 200 cm\pu{200cm} 物距中只占 7.5%——物距越大,物体内部的深度差异越不显著,透视畸变越弱。这就是透视畸变(Perspective Distortion)的本质。

短焦距(广角)拍摄时,近处的鼻子比远处的耳朵离镜头近得多,因此鼻子显得异常大——这就是为什么用手机前置摄像头近距离自拍时脸看起来会变形。长焦距拍摄时,物距远大于面部深度,各部分的放大倍率接近相同,面部比例更自然。

正交投影

如果让焦距 ff 和物距 ZZ 同时趋向无穷大,且 f/Zf/Z 保持为常数,会发生什么?

此时所有光线都近似平行于光轴传播,成像缩放比例对所有点都相同——不再有「近大远小」效应。这就是正交投影(Orthographic Projection)。正交投影下,平行线在图像中仍然平行,物体不会因距离产生形变。

实际上,从透视投影到正交投影是一个连续过渡。随着焦距增大,透视效应逐渐减弱,投影关系从透视投影过渡到弱透视投影(Weak Perspective Projection),最终趋向正交投影。

不同投影模型的应用场景

模型 特点 典型应用
正交投影 无透视效应,平行线保持平行 建筑设计(AutoCAD)、工业设计
弱透视投影 简化的透视,数学更简单 图像识别(物体较小且较远时准确)
透视投影 完整的 3D→2D 映射 运动恢复结构(SfM)、SLAM

薄透镜成像

为什么需要镜头

小孔成像虽然原理简洁,但在实际中面临两难困境:

  • 孔径太小 → 衍射 + 低信噪比(进光量不足)
  • 孔径太大 → 多个物点的光混合在同一像素上 → 模糊

镜头的作用就是打破这个两难:它能在保持大口径(高进光量)的同时,将来自同一物点的光线汇聚到像平面上的同一点——兼顾了清晰度和亮度。

薄透镜模型

薄透镜(Thin Lens)是一种理想化的光学元件,满足以下性质:

  • 穿过透镜光心的光线不改变方向,沿直线传播
  • 平行于光轴的光线穿过透镜后汇聚到焦点上
  • 焦点距透镜的距离为焦距 ff,由透镜的形状和折射率决定
  • 透镜的直径 DD(光圈)限制了通过的光线范围

从一个物点发出的光线穿过薄透镜后,会汇聚到像平面上的一点。要理解为什么,考虑从物点发出的两条特殊光线:

  1. 穿过光心的光线不受透镜影响,沿直线传播
  2. 平行于光轴的光线穿过透镜后,汇聚到焦点上

这两条光线在像侧的交点就是物点的像。所有从同一物点发出、经过透镜的光线都会汇聚到这个交点上——这就是透镜的聚焦能力。

更重要的是,位于同一平面(与透镜平行)上的所有物点,都会在同一个像平面上成像。

薄透镜方程

物距 DD(物体到透镜的距离)、像距 DD'(像到透镜的距离)和焦距 ff 之间满足:

1f=1D+1D\frac{1}{f} = \frac{1}{D} + \frac{1}{D'}

这是薄透镜成像的基本方程。给定焦距和物距,像距就唯一确定了。

这个方程可以从上面的两条特殊光线推导出来。设物体高度为 hh,像的高度为 hh'

  • 从穿过光心的光线,由相似三角形得 h/h=D/Dh'/h = D'/D
  • 从平行于光轴、经焦点汇聚的光线,由另一组相似三角形得 h/h=(Df)/fh'/h = (D' - f)/f

两式相等:D/D=(Df)/fD'/D = (D' - f)/f,整理得 fD=D(Df)=DDDffD' = D(D' - f) = DD' - Df,两边除以 fDDfDD' 即得薄透镜方程。

直觉上,薄透镜方程告诉我们:物距和像距是此消彼长的。物体越远(DD 大),像距 DD' 越接近焦距 ff;物体越近(DD 小),像距 DD' 越大——这就是为什么对焦近处物体时需要把镜头「伸出来」(增大像距)。

放大率

利用相似三角形,可以得到薄透镜的放大率(Magnification)。设物体高度为 hh、像的高度为 hh',穿过光心的直线同时连接了物体顶端和像的顶端,由此构成两个相似三角形:

hh=DD=m\frac{h'}{h} = \frac{D'}{D} = m

mm 就是放大率——像的大小与物体大小之比等于像距与物距之比。

两个特殊情况值得注意:

  • D=fD' = f:由薄透镜方程可得 DD \to \infty。这意味着无穷远处的物体在焦点处成像——这就是「对焦到无穷远」的含义。
  • D=D=2fD' = D = 2f:此时 m=1m = 1,物体所成像的尺寸与物体本身完全一致。

人眼的成像模型

人眼本质上也是一个透镜系统:角膜和晶状体构成透镜组,视网膜充当传感器。与相机一样,视网膜上的图像是倒立的——但视神经将信号传导到大脑皮层的视觉中枢后,会自动完成翻转。

景深

并非所有距离都清晰

有了镜头,是不是所有物体都能得到比小孔相机更清晰的像?并非如此。

薄透镜方程告诉我们,给定焦距和像距,只有特定物距上的物体才能精确聚焦在传感器平面上。位于同一物距上的物点确实可以成像在同一个像平面上——但其他距离的物点就没有这么幸运了。

想象一个太近的物点:按照薄透镜方程,它应该在传感器后方更远处才能聚焦成点,但传感器挡在了前面。此时光线还没汇聚成一个点就被「截断」了,在传感器上形成的不是一个点而是一个小圆盘——这就是弥散圆(Circle of Confusion, CoC)。同理,太远的物点会在传感器前方聚焦,到达传感器时又散开成一个圆。

弥散圆越小,图像看起来越清晰。当弥散圆小到人眼无法分辨时(小于某个可接受的阈值 cc),我们就认为物体是「清晰」的。在这个可接受范围内的物距区间,就是景深(Depth of Field, DoF)。

景深的决定因素

景深的近似计算公式为:

DoF2NcU2f2\text{DoF} \approx \frac{2NcU^2}{f^2}

其中:

  • NNF 值(F-number),即焦距除以光圈直径:N=f/DN = f/D
  • cc 是可接受的弥散圆直径
  • UU 是物距(对焦距离)
  • ff 是焦距

从这个公式可以直接读出景深与各参数的关系:

参数 关系 直觉
F 值 NN(光圈值) DoFN\text{DoF} \propto N 光圈越小(NN 越大),景深越大
物距 UU DoFU2\text{DoF} \propto U^2 物距越远,景深越大(二次方关系!)
焦距 ff DoF1/f2\text{DoF} \propto 1/f^2 焦距越长,景深越浅

景深的实际效果

  • 用手机拍远处的风景(大物距 UU),整个画面都是清晰的——景深很大
  • 用长焦镜头拍人像(大 ff,适中 UU),背景被虚化——景深很浅
  • 微距摄影(极小 UU),即使用很小的光圈,景深也极浅,拍摄昆虫复眼时连触角前后都无法同时清晰

散景

散景(Bokeh,源自日语「ボケ」,意为模糊)是指浅景深产生的背景模糊效果。在人像和电影摄影中,散景被视为一种美学特质——它让主体从模糊的背景中突出,营造出「梦幻感」。散景的形状由光圈的形状决定(圆形光圈产生圆形散景,多边形光圈产生多边形散景)。

在计算机视觉实验中,通常希望景深尽可能大(即 NN 大、ff 短),以确保场景中所有物体都清晰。而在计算摄影学中,如何从单张图片中模拟散景效果(如手机的「人像模式」),则是一个活跃的研究方向。

真实镜头的缺陷

前面的薄透镜模型假设透镜是完美的——没有厚度、没有色散、光线严格按照几何光学传播。真实镜头远没有这么完美,它们引入了多种需要校正的缺陷。对于计算机视觉来说,了解这些缺陷至关重要,因为畸变校正(Distortion Correction)几乎是所有视觉系统的第一步预处理。

透镜组

薄透镜模型假设透镜没有厚度,这在现实中不可能。为了逼近理想性能并校正各种光学缺陷,实际相机使用多片透镜组合而成的透镜组(Lens Group)。无论是单反相机的大型镜头还是手机上几毫米厚的微型镜头,内部都包含多片不同材质、不同曲率的透镜。

几何畸变

几何畸变(Geometric Distortion)是透镜固有的透视失真,使直线在图像中变成曲线。主要有三种类型:

  1. 桶形畸变(Barrel Distortion):图像边缘向外膨胀,正方形变成「桶」形。常见于广角镜头和手机超广角镜头。
  2. 枕形畸变(Pincushion Distortion):图像边缘向内收缩,正方形变成「枕」形。常见于长焦镜头。
  3. 鱼眼畸变(Fisheye Distortion):桶形畸变的极端形式,画面边缘严重拉伸扭曲,视场角可达 180° 以上。

径向畸变

径向畸变(Radial Distortion)是最主要的畸变类型——像素点以光轴为中心,沿径向方向产生位移。其根本原因是透镜的球面特性:

  • 远离光轴的光线更加向内弯曲 → 桶形畸变
  • 远离光轴的光线更加向外弯曲 → 枕形畸变

径向畸变与像素到光轴中心的距离有关——离中心越远,畸变越严重。

切向畸变

切向畸变(Tangential Distortion)相对轻微,由镜头与传感器之间的装配偏差造成——理想情况下镜头光轴应与传感器平面完全垂直,但实际制造中难免存在微小偏差。切向畸变表现为图像中物体的轻微倾斜和偏移,与距光轴的远近无关,而是均匀分布在整个图像中。

特殊镜头的畸变

  • 鱼眼镜头:极端径向畸变,需要专门的畸变模型,校正难度大
  • 全景镜头:通常由多个镜头拼接,需同时处理单镜头畸变和拼接畸变
  • 微距镜头:轻微枕形畸变,且畸变程度随拍摄距离变化

色差

色差(Chromatic Aberration)源于透镜对不同波长光的折射率不同(色散现象)。它有两种表现形式:

  • 纵向色差(Longitudinal Chromatic Aberration):不同波长的光对焦到不同深度的平面上。蓝光折射角较大,焦点偏近;红光焦点偏远。这导致无论传感器放在哪个位置,至少有一种颜色是失焦的。
  • 横向色差(Lateral Chromatic Aberration):不同波长的光在同一像平面上成像位置不同,在物体边缘产生彩虹般的色边。

将两片不同材质的镜头组合成消色差双合透镜(Achromatic Doublet)可以部分减轻纵向色差,但一般无法完全消除。

球差

球差(Spherical Aberration)是另一种常见缺陷。薄透镜模型假设平行于光轴的所有光线穿过透镜后汇聚到同一焦点——这要求透镜的剖面是双曲线。但实际镜头大多是球面的(因为球面更容易制造),导致远离光轴的光线和近轴光线的焦点不同,图像整体变模糊。

哈勃望远镜的球差

1990 年发射的哈勃太空望远镜,其主反射镜的打磨误差仅 2.2 μm\pu{2.2\mu m}(约为人类头发直径的 1/50),却导致了严重的球差,使得早期拍摄的图像明显模糊。NASA 在 1993 年的维修任务中安装了矫正光学组件,才恢复了望远镜的设计性能。

视场角

视场角(Field of View, FoV)描述相机能「看到」多大范围的场景,是镜头最直观的参数之一。当你透过一个树洞观察外面的风景时,凑得越近看到的范围越大——这就是视场角的直觉。

对于传感器半宽为 hh'、像距为 DD' 的系统,半视场角 ϕ\phi 满足:

tanϕ=hD\tan\phi = \frac{h'}{D'}

全视场角则为 2ϕ2\phi

视场角受三个因素影响:

焦距:焦距越长,像距越大(对焦无穷远时 D=fD' = f),视场角越小。这就是为什么长焦镜头(如 200 mm\pu{200mm})只能看到很窄的区域但能把远处物体拍得很大,而广角镜头(如 24 mm\pu{24mm})视野宽广但远处物体很小。增大焦距的效果非常类似于对广角图像进行裁剪——画面内容没有本质变化,只是截取了中央的一小块并放大。

物距:对同一个镜头,物体越近需要增大像距才能对焦(薄透镜方程中 DD 减小 → DD' 增大),DD' 增大导致视场角减小。这就是为什么微距拍摄时视野会变得很窄。

传感器尺寸:传感器越小(hh' 越小),视场角越小。这就是为什么全画幅相机(传感器 36×24 mm36 \times \pu{24mm})和 APS-C 画幅相机(传感器约 23.5×15.6 mm23.5 \times \pu{15.6mm})用同一个镜头,后者的等效焦距更长(视角更窄)——更小的传感器只截取了镜头投射图像的中央部分。这个现象有时被称为裁切系数(Crop Factor)。

曝光控制

曝光决定了传感器接收到多少光。过多则过曝(高光区域信息丢失),过少则欠曝(暗部细节消失)。三个参数共同控制曝光:

快门速度

快门(Shutter)控制传感器的曝光时间。快门速度越快,单次曝光时间越短,适合拍摄高速运动的物体。快门速度不够时,运动物体在曝光期间的位移会导致运动模糊(Motion Blur)——图像中出现方向性的拖尾。

光圈

光圈(Aperture)控制通光面积。前面提到的 F 值(F-number)N=f/DN = f/D 是衡量光圈大小的标准方式。注意 F 值与光圈口径成反比:NN 越小意味着光圈越大、进光越多。

F 值 光圈 进光量 景深
f/1.4
f/5.6
f/32

ISO

ISO 控制传感器信号的电子增益。提高 ISO 相当于放大传感器输出的信号,使暗光场景也能拍得明亮。但增益在放大信号的同时也放大了噪声——高 ISO 拍摄的图像往往布满颗粒状的噪点。

快门、光圈和 ISO 被称为曝光三角(Exposure Triangle):

flowchart TD
    E["<b>曝光</b>"]
    S["快门速度<br/>控制时间"]
    A["光圈<br/>控制面积"]
    I["ISO<br/>控制增益"]

    E --- S
    E --- A
    E --- I

    S -.- SM["慢 → 运动模糊"]
    A -.- AD["大 → 浅景深"]
    I -.- IN["高 → 多噪声"]

    classDef main fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
    classDef param fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    classDef effect fill:#fff3e0,stroke:#ef6c00,stroke-width:2px

    class E main
    class S,A,I param
    class SM,AD,IN effect

三者之间需要权衡:增大光圈可以用更快的快门冻结运动,但景深变浅;提高 ISO 可以在暗光下保持快门速度,但噪声增加。没有完美的设置——只有根据拍摄需求做出的最优折中。

亮度成像模型

最后,让我们从宏观角度建立一个关于图像亮度的简单模型。

光度学基础

亮度(Luminance)衡量光源沿某个方向的单位投影面积、单位立体角内发出的光通量,单位为 cd/m2\pu{cd/m^2}(坎德拉每平方米)。

照度(Illuminance)衡量被照射表面单位面积接收的光通量,单位为 lx\pu{lx}(勒克斯),1 lx=1 lm/m2\pu{1lx} = \pu{1lm/m^2}

亮度 = 照度 × 反射率

一幅灰度图像在坐标 (x,y)(x, y) 处的亮度值可以分解为两个因素的乘积:

f(x,y)=i(x,y)r(x,y)f(x, y) = i(x, y) \cdot r(x, y)

其中:

  • i(x,y)i(x, y)照度函数(Illumination),描述该点接收到的光照强度,0<i<0 < i < \infty
  • r(x,y)r(x, y)反射函数(Reflectance),描述该点表面反射光的比例,0<r<10 < r < 1

这个模型虽然简单,却揭示了一个重要事实:图像亮度本身是光照和材质的耦合——同一个灰度值可能来自强光下的深色物体,也可能来自弱光下的浅色物体。

为什么同一张图片中左右两侧的亮度会不同?原因可能完全不同:一种可能是光照不均匀(i(x,y)i(x,y) 在空间上变化,如窗户一侧比墙壁一侧亮),另一种可能是材质不同(r(x,y)r(x,y) 不同,如白色墙壁旁边是深色书柜)。仅从像素值 ff 本身,我们无法区分这两种情况。将两者分离(即从 ff 中恢复 iirr)是本征图像分解(Intrinsic Image Decomposition)的核心问题,也是计算机视觉中的经典难题。

亮度计算练习

办公室工作所需照度为 1001000 lx\pu{100-1000lx},墙面反射率为 0.80.8。那么墙面的亮度范围为:

f=(1001000)×0.8=80800f = (100 \sim 1000) \times 0.8 = 80 \sim 800

若要将其线性映射到灰度值 [0,255][0, 255]

g=f8080080×255g = \frac{f - 80}{800 - 80} \times 255

f=80f = 80 映射为 g=0g = 0(纯黑),f=800f = 800 映射为 g=255g = 255(纯白)。

回到开头的三个问题:三维世界通过投影矩阵 P=K[Rt]\bm{P} = \bm{K}[\bm{R} \mid \bm{t}] 变成二维像素矩阵,深度信息在投影中丢失;广角自拍变形是因为短焦距导致面部各部分的放大倍率差异悬殊(透视畸变);微距下昆虫一只眼清晰另一只模糊,是因为极短物距下景深极浅(DoFU2\text{DoF} \propto U^2)。

从数码相机的传感器阵列到小孔成像的几何模型,从薄透镜方程到景深、畸变和曝光控制,再到亮度的照度-反射率分解——这些构成了图像「从何而来」的完整图景。掌握了成像的正向过程,我们才有可能在后续章节中着手解决逆向问题:从图像中恢复场景的三维结构、光照条件和物体属性。下一讲将进入图像生成的另一个关键维度:光照与颜色。