光场采集原理:全光函数、光场采样理论与微透镜阵列模型
好,我们进入第二章。光场采集,说白了就是怎么把现实世界的光线信息「装」进相机里。你可能会问:普通相机不也能拍照吗?为什么还要搞光场?
嗯,这里有个关键区别——普通相机只记录光线的强度,而光场相机记录的是光线的方向和位置。我刚开始接触这个领域时,也觉得不就是多记录点信息嘛,后来才发现,这多出来的「方向」信息,能做的事情太多了——比如后期重新对焦、改变视角、甚至做深度估计。
2.1 全光函数:光线的完整描述
先聊个基础概念。全光函数(Plenoptic Function)是描述空间中任意一点、任意方向、任意时刻、任意波长光线的数学模型。听起来很绕?我换个说法:
想象你站在一个房间里,眼睛看到的所有光线。每一条光线都有几个属性:
- 位置:光线从哪来?用 (x, y, z) 表示
- 方向:光线朝哪走?用 (θ, φ) 表示
- 时间:光线在哪个时刻?用 t 表示
- 波长:光线是什么颜色?用 λ 表示
把这些参数组合起来,就是全光函数:
P(x, y, z, θ, φ, λ, t)
这个函数有7个维度。理论上,如果能完整记录这个函数,就能重建出场景的所有视觉信息。但实际工程中,我们不可能记录所有维度——数据量太大了。我记得第一次算这个数据量时,差点放弃这个方向——一秒钟的视频,数据量能到TB级别。
核心观点:全光函数是理论上的「完美描述」,但实际光场采集是对它的降维采样。我们只记录对我们有用的维度。
2.2 光场采样理论:从7维降到4维
实际工程中,我们通常做两个简化:
- 忽略时间维度:对于静态场景,t 可以去掉
- 忽略波长维度:用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 微透镜阵列模型
微透镜阵列是光场相机的「灵魂」。每个微透镜相当于一个微型相机,把主透镜出射的光线按方向分开。
具体来说:
- 主透镜把场景成像在微透镜阵列平面上
- 每个微透镜把主透镜的像再次成像到传感器上
- 传感器上每个微透镜对应的区域,记录了不同方向的光线
这个过程中,有几个关键参数:
- 微透镜间距:决定了空间分辨率 (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 光场采集系统结构图
下面这张图展示了光场采集的核心流程。我习惯用这种结构图来理解系统——先看整体,再看细节。
2.6 实际工程中的权衡
做光场相机设计,本质上是在做分辨率权衡。我列几个实际项目中常见的取舍:
| 参数 | 提高空间分辨率 | 提高方向分辨率 | 我的建议 |
|---|---|---|---|
| 微透镜数量 | 增加 | 减少 | 根据应用场景选:深度估计需要方向分辨率高,图像重建需要空间分辨率高 |
| 传感器像素数 | 增加 | 增加 | 用高像素传感器,但注意读出速度和噪声 |
| 微透镜焦距 | 不变 | 增加 | 焦距太长会导致微透镜图像重叠,一般控制在 f₂ < 微透镜间距 |
| 主透镜光圈 | 不变 | 增大 | 大光圈能提高角度分辨率,但景深变浅,像差增加 |
避坑指南:我曾经做过一个项目,为了追求高空间分辨率,用了很多微透镜(比如 200×200),结果每个微透镜只对应 4×4 个像素,方向分辨率严重不足,导致深度估计的精度很差。后来我调整到 100×100 微透镜,每个对应 8×8 像素,效果好了很多。记住:方向分辨率和空间分辨率是跷跷板,要根据你的核心需求来平衡。
2.7 光场采集的两种主流方案
目前市面上主流的光场相机有两种实现方式:
- 微透镜阵列方案(如Lytro):在传感器前加微透镜阵列,一次曝光就能采集完整光场。优点是速度快,适合动态场景;缺点是空间分辨率损失大。
- 相机阵列方案(如Stanford的多相机阵列):用多个普通相机从不同角度拍摄。优点是空间分辨率高,方向分辨率灵活;缺点是体积大,同步困难。
我个人更倾向于微透镜阵列方案,因为它更紧凑,适合做消费级产品。但如果你做科研,需要高精度的深度估计,相机阵列可能更合适。