026、手机镜头光学设计基础:视场角、焦距、光圈、景深的工程关系
从一次“拍月亮翻车”说起
去年Q3,我接手一个旗舰机项目,Sensor是IMX989,镜头模组是7P塑料+1G玻璃,F1.8光圈。实验室测MTF数据漂亮,但用户反馈拍月亮时边缘发虚、中心过曝。我第一反应是算法没调好,结果翻看RAW图发现——镜头本身在无限远对焦时,视场角边缘的像散已经炸了。更离谱的是,工程团队为了“大光圈虚化效果”,把光圈从F1.8硬改到F1.6,结果景深变浅,月亮边缘直接跑出焦平面。
这个案例让我意识到:很多嵌入式驱动工程师和算法同学,对镜头光学参数的理解停留在“背公式”层面,真到调优时,连视场角、焦距、光圈、景深之间的耦合关系都理不清。今天这篇笔记,咱们就掰开揉碎讲清楚这四个参数的工程关系,顺便把那些年踩过的坑都抖出来。
视场角(FOV)与焦距(EFL)的“跷跷板”
先看一个最基础的公式:水平视场角 = 2 * arctan( sensor宽度 / (2 * 焦距) )。这个公式在光学设计手册里写得很清楚,但工程上有个致命陷阱——焦距不是你想定就能定的。
手机镜头因为厚度限制,焦距通常被压缩在3-6mm之间。比如一颗26mm等效焦距的广角镜头,实际物理焦距可能只有4.2mm。这时候如果你为了“更广的视野”强行缩短焦距,比如从4.2mm改到3.8mm,视场角确实从80°扩到85°,但代价是边缘照度急剧下降(cos^4定律),而且畸变会从3%飙到8%以上。我见过一个团队为了“超广角卖点”,把焦距压到3.2mm,结果边缘亮度比中心低了2EV,算法拉回来之后噪点炸裂,最后只能降分辨率输出。
这里踩过坑:别只看等效焦距,物理焦距才是决定镜头体积和像差的核心。等效焦距只是“视角换算”,实际光学设计时,物理焦距每缩短0.1mm,镜片曲率半径就要跟着变,非球面系数也得重新拟合。更坑的是,焦距变短后,后焦(镜头最后一面到Sensor的距离)也会变,可能导致模组高度超标,塞不进手机壳。
光圈(F-number)与景深的“相爱相杀”
光圈F值 = 焦距 / 入瞳直径。这个公式看起来简单,但工程上有个反直觉的点:大光圈不等于浅景深,尤其是在手机这种短焦距系统里。
举个例子:一颗26mm等效焦距的镜头,物理焦距4.2mm,F1.8光圈对应的入瞳直径是2.33mm。如果改成F1.4,入瞳直径变成3mm。景深公式里,景深与光圈F值成正比(F值越小,景深越浅),但别忘了,景深还和对焦距离的平方成正比。手机拍人像时,对焦距离通常在30-50cm,这时候F1.4和F1.8的景深差异可能只有几厘米,肉眼几乎看不出来。但代价是F1.4的镜头边缘像差更难校正,MTF下降明显,而且进光量增加后,Sensor的满阱容量可能撑不住,高光溢出更严重。
别这样写:有些文档里写“大光圈能提升进光量,所以夜景模式更好”,这是片面的。进光量确实增加了,但如果你不调整曝光时间,过曝风险也同步增加。更合理的做法是:大光圈配合更短的曝光时间,或者降低ISO。但这样一来,信噪比提升有限,反而因为镜头像差导致画质下降。
景深(DoF)的“工程妥协”
景深公式:DoF = 2 * u^2 * F * δ / (f^2 - u^2 * F * δ),其中u是对焦距离,F是光圈F值,δ是弥散圆直径,f是焦距。这个公式在教科书里是精确的,但工程上我们更关心的是弥散圆直径δ怎么取。
手机Sensor的像素尺寸通常在0.8-1.4μm之间,理论上弥散圆直径应该取像素尺寸的2-3倍(比如2.4μm)。但实际调优时,你会发现:如果严格按像素尺寸算景深,那手机拍任何场景都是“全清晰”的,因为焦距太短、像素太小。这显然不符合实际体验——拍人像时背景确实会虚化。
问题出在哪里?人眼的分辨率极限。手机屏幕的PPI通常在300-500,人眼在正常观看距离下,能分辨的弥散圆直径大约是0.2mm(对应屏幕上的像素点)。所以工程上,我们通常把δ取为0.02-0.03mm(对应Sensor上的物理尺寸),而不是像素尺寸。这个妥协的结果是:景深计算更符合人眼感知,但代价是“理论景深”和“实际景深”差了10倍以上。
这里踩过坑:有一次算法团队要求“无限远对焦时,景深必须覆盖从1米到无穷远”,我按公式算了一下,发现F1.8、焦距4.2mm、δ取0.025mm时,超焦距距离是2.3米。也就是说,对焦在2.3米时,景深才能从1.15米到无穷远。但用户拍月亮时,对焦距离是无穷远,景深只有从2.3米到无穷远,所以1米以内的物体是模糊的。算法团队不理解,非要我改镜头参数,最后只能通过多帧合成来“模拟”大景深。
四个参数的“工程耦合”
在实际项目中,这四个参数不是独立优化的,而是通过一个叫“光学总长(TTL)”的约束绑在一起。TTL = 镜头厚度 + 后焦 + Sensor封装厚度,手机里通常限制在5-7mm。在这个约束下,你每改一个参数,其他三个都会跟着变。
- 焦距变短:视场角变大,但边缘像差变差,需要增加镜片数量(从5P到6P甚至7P),TTL反而可能增加。
- 光圈变大:入瞳直径增加,镜片口径变大,TTL增加,同时景深变浅,对焦精度要求更高。
- 景深变浅:可以通过缩小光圈或缩短焦距来补偿,但前者牺牲进光量,后者牺牲分辨率。
一个典型的工程案例:某旗舰机为了“1英寸大底”卖点,Sensor尺寸从1/1.28英寸升级到1英寸,但TTL不变。结果焦距被迫从5.2mm缩短到4.5mm,视场角从84°扩到90°,但边缘MTF掉了15%,光圈从F1.8缩到F2.0才能控制像差。最后产品经理拍板:保留大底,牺牲边缘画质,靠算法修复。结果用户反馈“边缘模糊”,只能OTA更新算法,但物理极限摆在那里,算法也救不回来。
个人经验性建议
别迷信大光圈:手机镜头的光圈F值做到1.4以下,边际收益极低。除非你愿意接受边缘像差、TTL超标、成本翻倍,否则F1.8-F2.0是甜点区间。我见过最离谱的案例是某厂商为了F1.2,用了8P+2G镜片,TTL干到8.5mm,结果手机厚度超标,只能做凸起摄像头,用户骂声一片。
视场角不是越大越好:超广角(>100°)的畸变和边缘照度问题,算法很难完美修复。建议控制在80-90°之间,配合OIS防抖,用户体验更稳定。如果非要超广角,考虑用自由曲面镜片校正畸变,但成本会翻倍。
景深计算用“人眼感知”而非“像素精度”:调优时,把弥散圆直径设为0.02-0.03mm,而不是像素尺寸。这样算出来的景深更符合用户实际感受,也能避免算法团队无休止的“理论要求”。
TTL是硬约束,别试图突破:手机厚度每增加0.1mm,结构工程师就要骂娘。如果镜头模组TTL超过6.5mm,建议重新评估Sensor尺寸或焦距,而不是硬塞镜片。我见过一个项目,为了塞进7P镜头,把后焦从0.5mm压缩到0.3mm,结果Sensor边缘出现暗角,最后只能降分辨率输出。
多帧合成不是万能药:算法可以补偿部分光学缺陷,但物理极限(如边缘MTF、畸变、照度)是算法救不了的。如果镜头设计阶段就妥协太多,后期算法团队会恨你一辈子。我的原则是:光学设计至少保证中心MTF>0.6(在奈奎斯特频率下),边缘MTF>0.3,否则算法再强也白搭。
最后说一句:手机镜头光学设计,本质是在TTL、成本、画质之间找平衡。别被参数党带偏,用户最终看的是照片好不好看,而不是F值小不小、视场角大不大。下次再有人问你“为什么F1.6的镜头拍月亮还是糊”,你可以把这篇笔记甩给他。