光场采集原理:全光函数、光场采样理论与微透镜阵列模型

好,我们进入第二章。光场采集,说白了就是怎么把现实世界的光线信息「装」进相机里。你可能会问:普通相机不也能拍照吗?为什么还要搞光场?

嗯,这里有个关键区别——普通相机只记录光线的强度,而光场相机记录的是光线的方向和位置。我刚开始接触这个领域时,也觉得不就是多记录点信息嘛,后来才发现,这多出来的「方向」信息,能做的事情太多了——比如后期重新对焦、改变视角、甚至做深度估计。

2.1 全光函数:光线的完整描述

先聊个基础概念。全光函数(Plenoptic Function)是描述空间中任意一点、任意方向、任意时刻、任意波长光线的数学模型。听起来很绕?我换个说法:

想象你站在一个房间里,眼睛看到的所有光线。每一条光线都有几个属性:

  • 位置:光线从哪来?用 (x, y, z) 表示
  • 方向:光线朝哪走?用 (θ, φ) 表示
  • 时间:光线在哪个时刻?用 t 表示
  • 波长:光线是什么颜色?用 λ 表示

把这些参数组合起来,就是全光函数:

P(x, y, z, θ, φ, λ, t)

这个函数有7个维度。理论上,如果能完整记录这个函数,就能重建出场景的所有视觉信息。但实际工程中,我们不可能记录所有维度——数据量太大了。我记得第一次算这个数据量时,差点放弃这个方向——一秒钟的视频,数据量能到TB级别。

核心观点:全光函数是理论上的「完美描述」,但实际光场采集是对它的降维采样。我们只记录对我们有用的维度。

2.2 光场采样理论:从7维降到4维

实际工程中,我们通常做两个简化:

  1. 忽略时间维度:对于静态场景,t 可以去掉
  2. 忽略波长维度:用RGB三通道近似,λ 变成三个离散值

剩下的就是4维光场:L(u, v, s, t)。其中 (u, v) 表示光线的方向,(s, t) 表示光线的位置。这个4维表示法,是光场相机设计的理论基础。

你想想看,普通相机只记录了 (s, t) 两个维度——每个像素对应一个位置,但丢失了方向信息。而光场相机通过微透镜阵列,把方向信息也「塞」进了传感器。

维度 全光函数 4D光场 普通相机
空间位置 (x, y, z) (s, t) (s, t)
方向 (θ, φ) (u, v) 无
时间 t 忽略 忽略
波长 λ RGB RGB

我的经验:做光场重建时,4维光场的采样密度很关键。采样太稀疏,重建会模糊;采样太密,数据量又太大。我一般建议:方向分辨率 (u, v) 至少 5×5,空间分辨率 (s, t) 根据场景复杂度定。

2.3 主透镜与微透镜阵列模型

好,理论讲完了,咱们看看实际怎么实现。光场相机的核心结构就两个部分:主透镜和微透镜阵列。

2.3.1 主透镜的作用

主透镜和普通相机的主透镜一样,负责把场景的光线汇聚到传感器平面。但区别在于:普通相机的传感器就在主透镜的焦平面上,而光场相机在传感器前面加了一层微透镜阵列。

主透镜的参数选择,直接影响光场相机的性能:

  • 焦距:决定了视场角和放大倍率
  • 光圈:影响光线的角度范围,也就是 (u, v) 的采样范围
  • 像差:主透镜的像差会被微透镜放大,所以要用高质量镜头

我曾经踩过一个坑:用普通单反镜头做光场相机,结果边缘的微透镜图像严重畸变。后来换了专门设计的低畸变镜头,问题才解决。

2.3.2 微透镜阵列模型

微透镜阵列是光场相机的「灵魂」。每个微透镜相当于一个微型相机,把主透镜出射的光线按方向分开。

具体来说:

  1. 主透镜把场景成像在微透镜阵列平面上
  2. 每个微透镜把主透镜的像再次成像到传感器上
  3. 传感器上每个微透镜对应的区域,记录了不同方向的光线

这个过程中,有几个关键参数:

  • 微透镜间距:决定了空间分辨率 (s, t) 的采样密度
  • 微透镜焦距:决定了方向分辨率 (u, v) 的采样范围
  • 微透镜数量:决定了最终光场图像的空间分辨率

注意:微透镜阵列的制造精度直接影响光场质量。我见过一些低成本的微透镜阵列,相邻微透镜的光轴偏差超过1微米,导致重建的图像出现「网格状」伪影。如果你自己搭建光场相机,建议用衍射光学元件(DOE)或者精密注塑的微透镜阵列。

2.4 光场采集的数学模型

咱们用数学语言描述一下这个过程。假设主透镜的入瞳在 (u, v) 平面,微透镜阵列在 (s, t) 平面,传感器在 (x, y) 平面。那么传感器上记录的光强可以表示为:

I(x, y) = ∫∫ L(u, v, s, t) · A(u, v) · M(s, t) du dv ds dt

其中:

  • L(u, v, s, t) 是4D光场
  • A(u, v) 是主透镜的光圈函数
  • M(s, t) 是微透镜阵列的调制函数

这个积分看起来复杂,但实际实现时,我们把它离散化了。每个微透镜对应传感器上的一个像素块,块内每个像素记录不同方向的光线。

2.5 光场采集系统结构图

下面这张图展示了光场采集的核心流程。我习惯用这种结构图来理解系统——先看整体,再看细节。

光场采集系统结构图 场景 (光线源) 主透镜 (汇聚光线) 焦距 f₁ 微透镜阵列 (方向分离) 间距 d, 焦距 f₂ N×N 个微透镜 传感器 (记录光强) M×M 像素 4D光场数据 L(u,v,s,t) 关键参数说明: • 空间分辨率 = 微透镜数量 (N×N) • 方向分辨率 = 每个微透镜对应的像素数 (M/N × M/N) • 总数据量 = N² × (M/N)² = M² 像素 • 角度采样范围 = arctan(微透镜间距 / 微透镜焦距) • 空间采样范围 = 主透镜视场角

2.6 实际工程中的权衡

做光场相机设计,本质上是在做分辨率权衡。我列几个实际项目中常见的取舍:

参数 提高空间分辨率 提高方向分辨率 我的建议
微透镜数量 增加 减少 根据应用场景选:深度估计需要方向分辨率高,图像重建需要空间分辨率高
传感器像素数 增加 增加 用高像素传感器,但注意读出速度和噪声
微透镜焦距 不变 增加 焦距太长会导致微透镜图像重叠,一般控制在 f₂ < 微透镜间距
主透镜光圈 不变 增大 大光圈能提高角度分辨率,但景深变浅,像差增加

避坑指南:我曾经做过一个项目,为了追求高空间分辨率,用了很多微透镜(比如 200×200),结果每个微透镜只对应 4×4 个像素,方向分辨率严重不足,导致深度估计的精度很差。后来我调整到 100×100 微透镜,每个对应 8×8 像素,效果好了很多。记住:方向分辨率和空间分辨率是跷跷板,要根据你的核心需求来平衡。

2.7 光场采集的两种主流方案

目前市面上主流的光场相机有两种实现方式:

  1. 微透镜阵列方案(如Lytro):在传感器前加微透镜阵列,一次曝光就能采集完整光场。优点是速度快,适合动态场景;缺点是空间分辨率损失大。
  2. 相机阵列方案(如Stanford的多相机阵列):用多个普通相机从不同角度拍摄。优点是空间分辨率高,方向分辨率灵活;缺点是体积大,同步困难。

我个人更倾向于微透镜阵列方案,因为它更紧凑,适合做消费级产品。但如果你做科研,需要高精度的深度估计,相机阵列可能更合适。