一、像差基础:几何光学与波像差概述、赛德尔像差理论、初级像差分类
各位同学,咱们今天聊点实在的。像差这东西,说白了就是光学系统「不完美」的那部分。理想光学系统只存在于课本里,现实中的镜头、棱镜、反射镜,总会让光线偏离它该去的地方。我做了十几年光学设计,踩过的坑有一半都跟像差有关。所以第一章,咱们把地基打牢。
1.1 几何光学与波像差——两个视角看同一件事
几何光学看光线,波像差看波面。这两个视角其实是同一物理现象的不同表达。
- 几何像差:光线追迹的结果。你追一条光线,它没落到理想像点,那就是有像差。
- 波像差:实际波面与理想球面波之间的光程差。单位通常是波长 λ。
我个人习惯在初步设计阶段先用几何像差快速判断系统好坏,到了优化后期再盯着波像差。为什么?因为波像差直接跟成像质量挂钩——瑞利判据说波像差小于 λ/4 时系统接近衍射极限。这个判据我几乎每个项目都会用到。
核心关系:波像差 W 与几何像差之间可以通过光线追迹和光程函数互相转换。简单说,波像差是几何像差的积分结果。
1.2 赛德尔像差理论——经典的五种「原罪」
1856 年,德国人赛德尔(Ludwig von Seidel)干了一件漂亮事:他把初级像差归纳为五种独立类型。这五种像差,我称之为光学系统的「五种原罪」。你遇到的几乎所有成像问题,都能归到它们头上。
| 像差名称 | 英文 | 物理本质 | 典型表现 |
|---|---|---|---|
| 球差 | Spherical Aberration | 孔径不同,焦点不同 | 点光源成像为弥散斑 |
| 彗差 | Coma | 轴外点成像不对称 | 像点拖尾如彗星 |
| 像散 | Astigmatism | 子午与弧矢焦点分离 | 十字靶标横竖清晰度不同 |
| 场曲 | Field Curvature | 像面弯曲 | 中心清晰边缘模糊 |
| 畸变 | Distortion | 像的几何形状变形 | 直线变弯 |
这里有个关键点:赛德尔像差是初级近似,只考虑三级像差项。实际系统中还有五级、七级像差,但初级像差已经能覆盖绝大多数工程问题。我记得有一次做投影物镜,球差和彗差校正到零后,MTF 直接提升了 15%。
我的经验:初学者容易犯一个错误——试图一次性校正所有像差。其实很多系统只需要重点控制 2-3 种像差。比如望远物镜主要看球差和色差,广角镜头则要盯着畸变和倍率色差。
1.3 初级像差分类——按视场和孔径分
赛德尔像差还可以按「依赖什么变量」来分类。这个分类方法在优化时特别有用。
- 孔径相关像差:球差。只跟光线在入瞳上的高度 h 有关,跟视场无关。
- 视场相关像差:畸变、场曲。主要随视场角 ω 变化。
- 混合相关像差:彗差、像散。同时受孔径和视场影响。
为什么要分这个?因为优化策略不同。校正球差可以改曲率或加非球面;校正场曲得调整透镜的 Petzval 和;校正畸变则往往要对称结构。
我曾经做过一个双高斯镜头,球差和彗差都很好,但场曲一直压不下去。后来发现是 Petzval 和没控制好,换了一块高折射率玻璃,问题就解决了。你看,知道像差分类,才能对症下药。
1.4 知识结构图——像差体系一目了然
下面这张图把本章的核心逻辑串起来了。从几何光学和波像差出发,引出赛德尔五种初级像差,再按视场/孔径分类,最后落到工程应用。
1.5 一个简单的 Python 示例——计算球差系数
理论讲完了,咱们动手算一下。下面这段代码计算一个单透镜的初级球差系数 S₁。你想想看,如果 S₁ 不为零,说明系统有球差。
import numpy as np
def seidel_spherical(n, r1, r2, f, h):
"""
计算单透镜的初级球差系数 S₁
参数:
n : 折射率
r1 : 第一面曲率半径 (mm)
r2 : 第二面曲率半径 (mm)
f : 焦距 (mm)
h : 入瞳半高 (mm)
返回:
S₁ : 初级球差系数
"""
# 光焦度
phi = 1.0 / f
# 形状因子
q = (r2 + r1) / (r2 - r1)
# 位置因子(物在无穷远时 p = -1)
p = -1.0
# 赛德尔球差公式(薄透镜近似)
A = (n + 2) / (n * (n - 1)**2) * (q + 2 * (n**2 - 1) / (n + 2) * p)**2
B = n / (n - 1) * p**2
C = n / (n - 1) * p * q
D = (3 * n + 2) / n
S1 = (h**2 * phi**3) / 4 * (A + B + C + D)
return S1
# 示例:n=1.5, r1=50mm, r2=-100mm, f=100mm, h=10mm
n = 1.5
r1 = 50.0
r2 = -100.0
f = 100.0
h = 10.0
S1 = seidel_spherical(n, r1, r2, f, h)
print(f"初级球差系数 S₁ = {S1:.4f}")
注意:这个公式只适用于薄透镜和初级近似。实际系统中透镜有厚度,光线有高度变化,需要用光线追迹来精确计算。但作为快速估算,它非常实用。我曾经在方案论证阶段用这个公式半小时排除了三个不合适的结构。
1.6 本章小结——你该带走什么
- 像差是光线偏离理想路径的度量,几何和波前两个视角都要理解。
- 赛德尔五种初级像差是分析一切成像系统的基础。
- 按视场/孔径分类能帮你快速定位问题、制定优化策略。
- 初级球差系数公式虽然简单,但工程上很有用。