三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

009、镜头设计的几何光学第一课——为什么不是所有的光都能成像以及F数背后的物理约束

009、镜头设计的几何光学第一课——为什么不是所有的光都能成像以及F数背后的物理约束

009、镜头设计的几何光学第一课——为什么不是所有的光都能成像以及F数背后的物理约束

去年秋天在产线盯一款车载前视摄像头的量产导入,夜视样机在暗场下画面中心清晰、边缘发虚,而且光圈从F1.6收到F2.8之后,边缘画质反而更差了。当时产线工程师的第一反应是“对焦没对准”,把马达驱动来回扫了好几遍,无果。后来我让他们把镜头拆下来,用平行光管打一个点光源,直接看像面上的弥散斑——问题立刻暴露:这不是对焦的问题,是光阑位置和镜组像差平衡被打破了。

这个案例特别适合作为几何光学第一课的开场。因为很多人对镜头设计的理解停留在“玻璃堆叠”和“MTF曲线”上,但真正决定一颗镜头能不能用的,往往是最基础的几何光学约束——不是所有的光都能成像,而F数就是那个把“能成像的光”和“不能成像的光”分开的物理闸门。

从一根光线说起:孔径光阑才是真正的“门卫”

先抛开复杂的像差理论,回到最朴素的几何光学模型。一个理想光学系统,物方一点发出的光线经过镜头后汇聚到像方一点,这是高斯光学告诉我们的。但现实中没有理想系统,镜头是由多片透镜组成的,每一片透镜都有口径,光线经过每一片时都可能被拦截。那么问题来了:哪一片透镜的口径决定了最终有多少光能到达像面?

答案是孔径光阑——那个真正限制光束宽度的元件。它不一定是物理上口径最小的那片,而是通过前后镜组的映射关系,在物方或像方看起来“最小”的那个开口。这个映射关系,就是光瞳。

这里踩过一个坑:早期做安防定焦镜头时,我一度以为把镜筒内壁车小一点就能减小光圈,结果画面边缘出现了严重的渐晕。后来才明白,光阑位置如果不在正确的轴向位置上,它改变的不是F数,而是视场角的遮挡——边缘视场的光线被切掉了,中心视场的光线反而没变。这就是为什么镜头设计里,孔径光阑的位置往往和镜组的对称性、像差校正策略强耦合,而不是随便找个地方放个垫片。

F数不是“光圈大小”,而是“能成像光线的角度范围”

F数定义为焦距与入瞳直径之比,f/D。这个定义本身很简单,但它的物理含义远比“光圈大小”深刻。它描述的是:物方轴上点发出的、能通过系统到达像面的那束光,其锥角的正切值等于1/(2F)。换句话说,F数决定了系统能接收多大角度的光线。

这个角度约束直接决定了衍射极限。艾里斑半径约等于1.22λF,F数越大,衍射斑越大,分辨率越低。但F数越小,球差、彗差、场曲这些与孔径高次方相关的像差就越严重。所以F数不是自由选择的参数,它是在衍射极限和几何像差之间做权衡的“平衡点”。

在车载镜头设计里,这个权衡尤其残酷。夜视场景需要大光圈(小F数)来进光,但大光圈下边缘视场的像差会急剧恶化。我们当时那颗镜头F1.6时边缘MTF只有中心的三分之一,收到F2.8后边缘MTF反而提升到中心的一半——但中心MTF下降了。这就是典型的球差和彗差随孔径变化的非线性行为:小光圈时边缘视场的主光线角度大,场曲和像散主导;大光圈时边缘视场的轴外光束宽度大,彗差和倍率色差主导。两者对F数的响应方向相反。

为什么不是所有的光都能成像:光瞳与渐晕的物理本质

回到开篇那个案例。产线工程师反复对焦无效,是因为他们默认“所有通过镜头的光都能参与成像”。但几何光学告诉我们,只有通过入瞳、出瞳且不被镜组边缘拦截的光线才能到达像面。当光阑位置设计不当或镜组口径不足时,轴外视场的光束会被部分拦截,这就是渐晕。

渐晕不是“画质变差”那么简单,它改变了像面的照度分布。理想情况下,像面照度按cos⁴ω定律衰减(ω是视场角),但渐晕会加剧这个衰减,导致边缘更暗。更麻烦的是,渐晕还会改变有效F数——边缘视场的有效F数比中心大,这意味着边缘的衍射极限更差,景深更大,对焦位置偏移的表现也更复杂。

我们当时那颗镜头的问题,恰恰是光阑位置太靠前,导致轴外光束在下方的镜组边缘被切掉了一部分。从MTF曲线上看,边缘视场的子午和弧矢曲线分离严重,而且随着光圈收缩,分离反而加剧——因为小光圈下主光线角度没变,但光束宽度变小,被拦截的比例反而更高。这就是为什么F2.8时边缘画质比F1.6更差——不是像差变差了,而是有效孔径变小导致衍射极限恶化,同时渐晕比例上升。

从F数到像差平衡:一个真实的调优案例

那颗车载镜头最终怎么解决的?我们把孔径光阑向后移动了约3mm,同时调整了第二、第三片透镜的曲率半径和间距,让轴外光束在光阑前后的高度分布更对称。具体做法是:

  • 用Zemax的“全局优化”跑了一轮,但约束条件里加了“边缘视场在F1.6和F2.8下的子午/弧矢MTF差值小于0.1”这个硬指标。
  • 手动微调了光阑位置,每次移动0.5mm,观察渐晕图和相对照度曲线。
  • 最终方案是光阑后移2.8mm,同时把第三片透镜从球面改成偶次非球面,用非球面系数来补偿轴外像差。

这里有个经验:不要迷信全局优化。全局优化能找到局部最优解,但往往牺牲了某个视场或某个光圈下的表现。真正量产级的镜头设计,必须手动干预光阑位置和镜组对称性,因为F数、视场角、渐晕、像差这几者是强耦合的,优化算法很难同时满足所有约束。

方法论沉淀:F数不是“选出来的”,是“算出来的”

很多工程师选镜头时直接看F数,觉得F1.4一定比F2.0好。但实际项目中,F数往往是被系统级需求反推出来的。比如车载前视摄像头,需要探测距离200米外的行人,传感器像素尺寸3μm,那么根据衍射极限和信噪比要求,F数必须小于某个值才能保证足够的角分辨率和进光量。但F数太小,景深不够,对焦精度要求极高,而且边缘像差难以校正。

所以我的建议是:在项目定义阶段,先列出所有系统级约束——探测距离、视场角、传感器尺寸、像素尺寸、最低照度、对焦范围、温度漂移——然后反推F数的可行区间。这个区间往往很窄,比如车载前视通常是F1.4到F2.0之间。然后在这个区间内,用几何光学做初步的像差平衡,看哪个F数下全视场、全孔径的MTF都能接受。

别一上来就追求大光圈。大光圈意味着镜片口径大、厚度大、重量大、成本高,而且对装配公差极其敏感。我们做过统计,F1.4的镜头比F2.0的镜头,量产良率低15%到20%,因为镜片偏心公差和倾斜公差对像质的影响随孔径增大而急剧放大。

个人经验:几何光学第一课,先学会“看光路”

最后说点课本上不讲的。做镜头设计或调试,最重要的能力不是算公式,而是“看光路”。拿到一颗镜头,先用平行光管和刀口仪看焦点位置,再用干涉仪看波前,最后用MTF测试仪看全视场表现。每一步都在验证几何光学的某个基本假设——光阑位置对不对、光瞳有没有偏移、渐晕有没有超标。

如果你在产线遇到画质问题,第一反应不要是“算法去噪”或“ISP调参”,先问三个问题:光阑位置在哪?边缘视场的光束有没有被拦截?F数在边缘视场是不是变了?这三个问题能解决80%的“莫名画质劣化”问题。

记住,F数不是镜头上印的那个数字,它是整个光学系统对光线“准入资格”的物理裁决。理解了这一点,你才算真正跨进了几何光学的大门。

← 返回列表