ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Zemax像差分析图像详解:从赛德尔系数到MTF

Zemax像差分析图像详解:从赛德尔系数到MTF 简介面向Zemax初学入门者这份文档系统梳理光学设计中常见像差类型及其在像差曲线、点列图中的典型表现涵盖初级球差、轴向色差、垂轴色差、子午慧差、子午场曲、弧矢场曲、高级子午慧差和高级畸变等并结合具体图像讲解成因与判断方法帮助读者建立像差分析的基本思路。资源为Word文档共1个doc文件压缩包仅543KB内容精炼集中适合快速查阅目前已有1920人学习下载。文档以图文对照方式呈现多类像差图例详细说明如何从垂轴像差曲线、点列图形态识别像差类型及大小例如通过0视场各色曲线分离程度判断轴向色差通过曲线弯曲程度识别子午慧差通过0孔径处斜率判断场曲等同时涵盖高级像差的判别要点为光学设计优化提供直观参考。1. 从一片透镜开始认识Zemax像差分析图像新装好Zemax的人建模往往几分钟就上手真正被卡住的是分析窗口打开后的那排图点列图为什么不是点光线扇形图为什么弯成那样MTF曲线为什么还没到截止频率就贴到了零。像差分析要解决的就是这种“看不懂图”的问题——用一组标准图像定位像差来源再决定是改半径、改材料还是换结构。我会按光学设计的常规工作流从赛德尔系数、点列图与光线扇形图一路讲到MTF、波前图和场曲畸变图并把每个窗口的菜单入口、关键参数和初学常踩的坑放在一起说。这套内容适合刚接触Zemax、正在找入门路径的人也适合拿到别人设计文件后想快速判断设计质量的人。2. 在Zemax里先立住理论框架赛德尔系数与像差类型图像特征2.1 用一张像差表建立Zemax像差分析的坐标系Zemax像差分析的图像虽多但它们都在描述同一件事理想光学系统会把一个物点成像为一个点而现实中各种几何偏差把它摊成了一个斑。几何像差里最常用的分类是五种初级单色像差加两种色差也就是常说的“七种像差”。赛德尔系数Seidel Coefficients就是这七种像差的定量数值在Zemax中可以直接按面输出告诉你每个折射面的贡献是多少、正负号是什么。像差名称出现条件点列图形态光线扇形图特征Zemax操作数球差轴上视场即存在圆形弥散中心浓边缘疏曲线两端对称翘起SPHA彗差轴外视场彗星状拖尾上下不对称COMA像散轴外视场、离焦椭圆到线再到椭圆变化EX与EY斜率不一致ASTI场曲轴外视场边缘与中心不同时会聚不同视场偏差不同FCUR畸变轴外视场整体变形但光斑仍小影响不明显DIST位置色差多波长各波长中心沿轴向错开多条曲线沿纵轴平移多波长对比倍率色差多波长各波长中心沿径向外扩同一视场各波长端部分离多波长对比色差不常用单一标量操作数直接控制更多是看不同波长下RMS半径的差别或直接用RAY差观察边缘色差。初学者不需要背下每一项但要能拿着这张表对照分析窗口里的图像建立“图像形态对应像差名称、像差名称对应操作数”的映射。这个映射关系是后续看任何设计文件时最先用到的能力。2.2 在Zemax里打开赛德尔图和波前系数表在Zemax中像差分析的大部分入口集中在Analyze选项卡下不同版本菜单位置会有些微调整但关键词不会变。第一步先把波长和视场设好它们决定像差分析图像的数据范围。如果波长只设了一个色差自然不会出现在任何一张图里如果视场只有轴上点场曲和畸变也看不出来。常见做法是以下几步打开设计文件在System Explorer中确认使用波长的数量与间隔以及视场Field设置是单个点还是多个视场。使用 Analyze → Aberrations → Seidel Diagram 打开赛德尔图。在赛德尔图设置栏选择要显示的面、波长和视场柱状图直接列出当前配置下各项像差的赛德尔系数。赛德尔系数带正负号不要只看高度正负号决定你下一步把表面曲率往哪个方向改。赛德尔图是近轴近似对强倾斜或离轴系统不完全适用但作为入门检查它能快速告诉你系统瓶颈在哪一个面。图像上的判断最后要回到这张表来验证这是我看设计文件时的固定动作。2.3 把像差分析接进优化量化操作数与Zernike扩展多项式分析图像只是过程优化才是终点。在Merit Function Editor里Zemax把像差暴露成数值操作数你可以像“拧螺丝”一样把它压到目标值以下。初学阶段先认识几个最常用的SPHA球差、COMA彗差、ASTI像散、FCUR场曲、DIST畸变。插入它们的通用做法是在评价函数编辑器里加一行Type列填操作数名Int列指定波长或视场Weight列给权重然后跟默认RMS评价函数一起参与优化。import pandas as pd # 从赛德尔图窗口导出的文本文件表头以你当前Zemax版本为准 df pd.read_csv(seidel_export.txt, delimiter\t) # 只保留数值列按绝对值做最大贡献排名 num_cols df.select_dtypes(includenumber).columns rank df[num_cols].abs().max().sort_values(ascendingFalse) print(像差贡献排名数值越大主导性越强) print(rank)这段脚本把赛德尔图导出的文本读进来然后按列取绝对值的最大值。赛德尔系数有正有负如果直接取平均或求和正负相消会掩盖真实贡献。按绝对值排名可以快速看出当前设计里哪个像差最需要优先处理。select_dtypes(includenumber)会自动跳过视场编号、波长编号这类非数值文本列避免排序出错列名因为Zemax版本不同会有差异以导出文件的实际表头为准。结合Zernike扩展多项式来说在波前图分析中Zemax会把波前误差按Zernike多项式展开把形状变成一组系数。优化器可以针对这些系数做扩展多项式优化例如只压Z7/Z8彗差系数而不去动离焦Z4避免优化器用对焦去补偿真实像差。这个思路在后面讲波前图时会继续展开。2.4 像差分析与优化之间的边界有一点必须提醒不要把像差操作数无限加权。默认RMS点列评价和像差操作数经常互相抢权重权重给太大会让点列图反而变差。我一般先在赛德尔图里看排名不改权重确认主导像差后再把对应操作数的Weight设成0.01到0.1逐步提高每加一次就重新优化并回看点列图、MTF是否变好。像差分析图像的用途是给优化指明方向而不是代替优化器做判决。3. 用Zemax核心像差分析图像定位问题点列图与光线扇形图3.1 打开点列图看懂RMS与GEO两个半径点列图是Zemax里最直观的像差分析图像从某个物点发出的光线追迹到像面所有交点画在一张图上。打开路径是 Analyze → Image Quality → Spot Diagram。在窗口右键Settings里Field可以选单个视场或AllWavelength设AllScale可以选Automatic或按固定尺寸缩放。初学最容易忽略的是参考圆设置把参考形状切到Airy艾里斑Zemax会画出当前F数对应的衍射极限参考圆帮你判断系统是否已经接近衍射极限。所有点都落在艾里斑内说明几何像差已经不是主要限制继续往下压像差意义不大。图下方有两行数值RMS Radius和GEO Radius。RMS是所有光线偏离参考点的均方根反映能量集中的程度单位与透镜单位一致GEO是离参考点最远的一条光线的距离代表点列图的实际边界。两个值的比值很有信息量如果GEO与RMS的比值明显大于2说明点列图外圈有少量大像差光线常见于球差未完全矫正时边缘光线的贡献被拉得很远。3.2 光线扇形图Ray Fan从曲线形状判断像差类型光线扇形图打开路径是 Analyze → Image Quality → Ray Fan老版本里叫Ray Aberration。它横轴是入瞳归一化坐标Px或Py纵轴是光线在像面X或Y方向的位置误差EX或EY不同波长的曲线用不同颜色。初学时把Ray Fan和点列图配合看判断速度会快很多。常用判读对照表如下曲线形态像差判断说明两端对称上翘球差边缘光线偏差大曲线近似三次方上下明显不对称彗差主光线两侧光线汇聚位置不同EX与EY曲线斜率不一致像散子午和弧矢方向的焦点位置不同多波长曲线整体平移轴向色差不同波长焦点沿光轴方向错开曲线在边缘剧烈垂下高级像差或面型误差常见于大孔径或非球面系数过高这里有个实用参数Ray Fan窗口的Scale默认是AutomaticZemax会针对当前视场把纵轴缩放到最合适显示。这样做的好处是单张图看着饱满副作用是不同视场之间的曲线不可比。要比较“哪个视场像差更大”先把Scale改成相同数值比如0.1mm再切换Field看曲线幅度变化幅度大的视场就是系统在当前方向上最吃紧的位置。3.3 用导出的文本数据自己核算一次分析窗口的Export功能可以把图形数据导出为文本或CSV。点列图导出的数据就是追迹光线在像面的坐标集合用Python可以自己算RMS与GEO顺便理解这两个指标的实际含义。我一般在点列图窗口选择单个视场、单波长右键Export Data保存成spot_export.txt然后用下面的脚本核算。import numpy as np # 点列图导出的数据前两列为x,y坐标跳过表头 data np.loadtxt(spot_export.txt, skiprows1) x data[:, 0] y data[:, 1] # RMS半径所有光线到中心的均方根距离 rms np.sqrt(np.mean(x**2 y**2)) # GEO半径单根光线离开中心的最远距离 geo np.sqrt(np.max(x**2 y**2)) print(fRMS Radius {rms:.6f} mm) print(fGEO Radius {geo:.6f} mm) print(fGEO/RMS {geo / rms:.2f}) # 找最远的点在哪辅助判断是哪一侧的问题 idx np.argmax(x**2 y**2) print(fGEO光线坐标: x{x[idx]:.6f}, y{y[idx]:.6f})np.loadtxt读文本时把第一行当表头跳过列索引按导出文件实际格式调整x和y是光线的横向坐标。RMS半径用均方根方式计算先统计整体能量集中度GEO半径用最大值用来侦测离群光线。输出单位跟随系统单位Zemax里默认多为mm如果你把镜头单位设成微米数字会差1000倍比较前先确认单位。长期记录多个设计版本时建议把GEO与RMS的比值也写进记录这个比值比单个RMS更能反映像差分布形态的变化。4. 进阶Zemax像差分析图像MTF、波前图与场曲畸变图的组合判读4.1 Fft MTF衍射极限、截止频率与像差判读MTF是最接近“成像效果”的像差分析图像。打开路径是 Analyze → Image Quality → Fft MTF。它显示不同空间频率下的调制传递函数横轴单位lp/mm纵轴0到1。新手先看三条东西衍射极限曲线、切线Tangential曲线和弧矢Sagittal曲线。衍射极限曲线是当前F数下的理论上限不是设计目标但如果实际曲线离它很远说明几何像差是瓶颈。低频段比如0到20 lp/mm掉得快代表图像整体对比度不足高频段还能撑住说明细线条解析力仍在。初学常用经验值把MTF等于0.1或0.05对应的空间频率当作系统可用截止频率和探测器像素尺寸比较看看有没有匹配。要观察更细的衍射干涉行为可以看同组菜单下的PSF和Fft PSF。PSF是MTF做傅里叶反变换得到的空域能量分布能看出衍射环和像差叠加后的光斑形状。MTF曲线本身已经包含衍射效应所以讨论“截止”时别只看几何光学部分。import pandas as pd # 从Fft MTF窗口导出的数据常见列: Frequency, Diff_Limit, Tangential, Sagittal df pd.read_csv(mtf_export.csv) freq df[Frequency] for col in df.columns[1:]: below df.loc[df[col] 0.1, Frequency] if len(below) 0: print(f{col}: MTF0.1 截止频率 {below.iloc[0]:.2f} lp/mm) else: print(f{col}: 全频段MTF未低于0.1)这个脚本遍历每一列像差分析曲线找到第一个MTF降到0.1以下的频率。空间频率从低到高排列第一个小于0.1的位置就是截止点。阈值0.1是经验值对探测器分辨率要求高的系统可以改用0.05列表中可能包含衍射极限列让它参与比较可以判断当前设计离理论极限还有多少百分比。如果导出的是制表符分隔文本把read_csv改成read_csv(mtf_export.txt, sep\t)。4.2 波前图与Zernike扩展多项式把像差图像变成系数波前图Wavefront Map显示的是出瞳处波前误差分布颜色对应相位延迟单位常用波长Waves。打开路径是 Analyze → Wavefront → Wavefront Map。界面会给出PV峰谷值和RMS两个指标。PV大、RMS相对小说明波前误差集中在边缘局部典型如非球面面型局部误差PV与RMS都大说明整体像差都还没收敛。Zemax在波前分析内部会把波前拟合成Zernike多项式这就是扩展多项式优化的基础用Zernike系数而不是像素点来控制特定像差。常用对应关系如下表Zernike项对应像差波前图特征Z4离焦同心圆环环距均匀Z5/Z6像散0°/45°鞍形条纹或成对椭圆Z7/Z8彗差弧形条纹沿一个方向不对称Z11球差同心圆环边缘密中间疏读图时第一步看对称性如果条纹整体旋转对称优先怀疑球差或离焦如果沿某一方向不对称优先怀疑像散和彗差。然后再回赛德尔图验证是哪个面贡献的。两组图像交叉验证后再去评价函数里加对应操作数靶向才准。4.3 场曲与畸变大面积成像的均匀性检查场曲畸变图对相机镜头、测量镜头特别重要。打开路径是 Analyze → Aberrations → Field Curvature / Distortion。这张图分成左右两部分左边是场曲S弧矢和T子午两条线随视场的变化横轴单位mm纵轴是视场右边是畸变百分比负值为桶形畸变正值为枕形畸变。判读要点S与T分离越远像散越大两条线一起向右或向左弯说明场曲大。畸变百分比本身不影响清晰度但影响测量或拼接类应用某些测量项目要求畸变在0.1%以内普通成像镜头到1%到2%就能接受。再配合网格畸变图Grid Distortion可以更直观看到边缘格子是鼓起来还是压下去。4.4 几种图像如何组合判断像差来源真正调试时我一般按这个顺序走。第一步看MTF低频判断对比度问题是否严重第二步看点列图GEO与RMS比值判断是否存在离群大像差光线第三步看波前图对称性锁定主导像差类型第四步看场曲畸变图确认大视场下是否还有均匀性问题。每张图只回答一个问题组合起来才能定位是哪一环出了问题。不要只盯着MTF高低下结论——MTF反映的分辨率瓶颈和畸变造成的位置偏差在像差分析图像里的表达完全不同。5. 把Zemax像差分析图像做成可交付物导出数据、排错与文档输出5.1 多配置与像差对比别让单个视场掩盖问题像差分析只做单视场、单波长远远不够。Zemax的多配置编辑器Multi-Configuration Editor可以同时保存多个工作状态常见用途是不同工作距离、不同温度或不同波长组合。在分析窗口的Settings里把Configuration切换为All窗口会叠加显示多组曲线这样能看出整个使用范围内哪组状态最差也就知道该针对哪种工况继续优化。我一般会在完成一轮优化后把所有配置的MTF和点列图导出到一个目录按配置名命名方便横向比较。5.2 宏脚本报错“unknown symbol”时的排查节奏Zemax初学者一旦开始用宏ZPL批量跑分析很容易撞见unknown symbol getthickness这类报错。这不是软件坏了而是宏解释器在当前上下文里不认这个符号。常见原因有两个一是函数名在新版本里改了拼写或挪了目录二是宏里引用了旧版自定义函数或外部DLL当前环境没有挂载。排查顺序是先在宏编辑器里选定该函数名按F1查帮助确认当前Zemax版本支持再检查拼写、参数个数和返回类型最后看宏文件开头有没有声明外部引用。很多人直接复制网上的老宏报错后却去重装Zemax那基本是白费时间。5.3 用Python批量输出Zemax像差分析Word文档像差分析结论最终一般要整理进技术文档或评审报告。我这里常用的流程是在Zemax里把点列图、Ray Fan、MTF、波前图分别导出为PNG分析窗口右键Export选择Image文件名按“视场_像差类型.png”规范化然后用Python一次性插入Word。代码很简单用python-docx这个库先装依赖再执行from pathlib import Path from docx import Document from docx.shared import Cm doc Document() images sorted(Path(analysis_images).glob(*.png)) for img in images: # 文件名去掉扩展名作为报告的小标题 doc.add_heading(img.stem, level2) doc.add_picture(str(img), widthCm(14)) doc.save(像差分析报告.docx) print(f已写入 {len(images)} 张像差分析图像)这段脚本遍历analysis_images目录下所有PNG把它们依次插入Word文档并配上以文件名为题的小标题。widthCm(14)统一图片宽度避免截图大小不一致导致报告不整齐sorted()保证按文件名顺序排列所以命名时把视场号写在前面比如03_FOV_point.png这样文档顺序就是视场顺序。改完一轮光学参数后重跑一次导出与脚本报告就自动更新比逐张截图再拖进Word高效得多。文件较多时可以再加一行doc.add_paragraph记录当前导出的时间方便评审时对照版本。本文还有配套的精品资源点击获取
返回列表