恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Zemax与MATLAB联合仿真:微透镜阵列设计全流程解析

  • 首页
  • 资讯中心
  • /
  • Zemax与MATLAB联合仿真:微透镜阵列设计全流程解析

相关资讯

Node.js调用图像生成API实战:从生成到编辑的完整方案 2026/10/11 5:57:09
SSM+Flask游泳会员管理系统架构设计与实战部署 2026/10/11 5:57:09
【回眸】Apache IoTDB 工业时序数据实战应用指南 2026/10/11 5:57:09

最新资讯

嵌入式开发必备:VirtualBox+Ubuntu双网卡配置全攻略
直流电压控制参数详解:从PID整定到工程实战
Pandas数据处理全攻略:从数据结构到清洗实战
如何用 Python 回测动量轮动策略?
用DevOps思路重构媒体宣发:把发稿流程变成自动化流水线
【单片机毕设案例分享】基于ESP32的智能厨房多参数监测与自动处置系统设计 基于单片机的厨房温湿度烟雾火焰监测报警装置设计(030401)

今日推荐

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

Zemax与MATLAB联合仿真:微透镜阵列设计全流程解析

发布时间:2026/10/11 5:57:09
Zemax与MATLAB联合仿真:微透镜阵列设计全流程解析 微透镜阵列这个题目圈内人一看就知道分量不轻。它横跨几何光学、波动光学、探测器物理和数字信号处理做光场相机的人靠它捕捉四维光场做自适应光学的人靠它测量波前斜率做机器视觉的人则拿它做结构光投影。一套能跑的微透镜阵列设计流程核心就是Zemax负责光路仿真、MATLAB负责数据处理和系统评估这条双引擎路径。我在实际项目中用这条路线完成了从参数设计到仿真验证的完整闭环今天这篇就把这套方法掰开揉碎讲清楚包括参数怎么算、Zemax怎么建模、MATLAB怎么读数据和重建光场以及那些文档里不会写的坑。先说清楚这套组合拳的价值。微透镜阵列不是单个透镜它是几十上百甚至上千个微透镜在同一个基底上周期性排布。光场相机的核心思路是一次曝光同时记录光线的位置和方向——主镜头形成的光束被微透镜阵列分割每一个微透镜对应传感器上的一个子区域像素块这些像素块内部的明暗分布恰恰编码了入射光线的角度信息。波前传感器则是另一套逻辑理想平面波经过微透镜阵列后每个子透镜聚焦成一个光斑光斑落在探测器上的位置偏移直接反映局部波前斜率。这两类系统设计上的共性问题都在于微透镜阵列的周期、焦距、与传感器的间距如何匹配又如何保证各个子通道没有严重的串扰。用Zemax解决的是光能不能正确聚焦、MTF够不够高、公差范围内是否鲁棒的问题用MATLAB解决的是采集到的像素块能不能被还原成相位信息或光场信息的问题两者缺一不可。下面直接进入正题我把整个实现流程拆成几个环节每一段都是实操经验不是书上的理论。1. 内容整体设计与思路拆解1.1 微透镜阵列设计的核心参数关系不管是做光场相机还是波前传感器设计微透镜阵列之前都要先把几个关键参数定下来。首先是子透镜的口径(D)对应到几何上就是微透镜的周期。这个(D)决定了光场相机角度分辨率的极限也决定了波前传感器子孔径内的采样点数。其次是子透镜的焦距(f)它和主透镜的F数、传感器像元尺寸之间要满足严格的匹配关系。再次是阵列整体的尺寸这决定了系统的视场角和可测波前畸变的空间频率范围。光场相机设计中最基础的一个约束是微透镜F数与主镜头F数的匹配。原理上主镜头出瞳在微透镜阵列后方成像如果微透镜的F数比主镜头F数小传感器上就会出现微透镜子图像的混叠反过来如果微透镜的F数过大传感器有效面积又会被浪费。所以设计时我一般先根据主镜头的F数(F_m)确定微透镜的F数(F_\mu)取(F_\mu \lesssim F_m)再根据传感器像元尺寸(p)反推微透镜焦距[ f_\mu F_\mu \times D ]而(D)通常取传感器上预期的子图像像素数(N_x \times p)来定。比如传感器像元尺寸为3.45微米想要每个微透镜覆盖(10 \times 10)个像元那么微透镜口径就是(D 10 \times 3.45 34.5)微米。如果主镜头F数是4微透镜F数取4焦距就是(f_\mu 4 \times 34.5 138)微米。这里有个经常被忽略的细节微透镜阵列不一定都是球面透镜更常见的是用光刻胶热熔回流工艺制作的连续面型微透镜。这种微透镜的矢高(h)和球冠曲率半径有关计算公式近似为[ R \frac{D^2 4h^2}{8h} ]仿真时如果直接把这个面型输进Zemax别偷懒用理想薄透镜代替因为球差会影响光斑质心计算的精度尤其波前传感器对这种局部偏移极其敏感。实际项目中我吃过这个亏用理想透镜代替实际球面微透镜后波前测量结果和实验对不上。从那以后我坚持在Zemax中用偶次非球面或扩展多项式面型来拟合实际回流面型。1.2 为什么必须Zemax和MATLAB联合仿真有人可能会说微透镜阵列的仿真用Zemax单独做不就行了确实Zemax能算点列图、波前图、MTF但这只是系统仿真的一半。另一半在于传感器上最终形成的图像是什么光场相的宏观重建结果长什么样波前传感器探测到的质心偏移能否还原出正确的波前这些涉及像素级处理、矩阵运算、迭代算法的内容Zemax并不擅长而MATLAB是主场。联合仿真还有一个重要理由公差分析与数据后处理的闭环迭代。Zemax可以做蒙特卡洛公差分析分析结果比如说微透镜间距误差(\Delta d)和焦距误差(\Delta f)对质心偏移的影响输出给MATLAB再放到重建算法里评估最终精度。这种光学设计输出、信号处理评估的流程形成了完整的系统设计验证圈。单独用任何一款工具都做不到这一点。我常用的方案是两种一种是Zemax导出点列图或HxDF数据到MATLAB处理另一种是直接用Zemax的ZOS-APIMATLAB接口进行实时调用这个工程化程度更高。入门的话建议从第一种开始因为调试直观文件即拿即走。第二种适合需要批量扫描参数的情况后面我会给出代码框架。2. 核心细节解析与实操要点2.1 Zemax中微透镜阵列的建模方法在Zemax中建模微透镜阵列最干净的方式是用非序列模式下的阵列物体。把单个微透镜作为物体类型然后设置阵列的周期数、间隔等参数。这里要注意Zemax非序列模式下默认的物体类型里没有直接画微透镜阵列的图标但可以通过以下几种方式实现。第一种是用阵列对象Array Object装配单透镜。即在非序列元件编辑器中先定义好一个微透镜的真实几何体比如用标准面透镜或双凸面透镜物体然后在它的属性中选择阵列设置行数与列数。这种方式最灵活每个微透镜的间隔、厚度、材料都可以统一控制。第二种是用用户自定义面型或CAD文件导入。批量生产的微透镜阵列光学面很多是自由曲面或不规则排布Zemax自带模型不好拟合这种情况下得把实际的面型多点坐标文件导入做成一个物体。这个过程繁琐但非常实用尤其是当你手里有白光干涉仪测出来的面型数据。无论是哪种建模方式有几个关键参数必须设置正确子透镜的口径(D)半口径或通光口径要一致曲率半径(R)球面或非球面系数中心厚度影响主面位置间接影响焦距材料折射率为了准确模拟色差和焦距针对光场相机主镜头和微透镜阵列之间通常还有一段空气间隔。这段间隔不是随便设的它决定了主镜头出瞳在微透镜阵列后的成像位置。入射到微透镜阵列的光线角度谱太宽会导致各微透镜子图像之间出现串扰。所以设计时我需要反复优化这个间距通常用Zemax的操作数直接控制光线在传感器面上的径向分布范围。2.2 多重结构编辑器的巧妙用法热词里有人搜zemax 多重结构编辑器设置说明这里我多写几句。多重结构在微透镜阵列仿真中的核心用途是优化单一微透镜的性能并同步验证不同视场或者不同波长的行为。因为微透镜阵列里每个微透镜在理想情况下是等价的所以我没有必要在非序列里把几百个透镜全部显示出来做光线追迹——那样速度极慢且没必要。正确的做法是建一个单透镜模型代表阵列中的单个子透镜用多重结构定义不同的视场角度或光源位置用评价函数优化这个单透镜使得在指定的视场角范围内光斑RMS半径最小。这个方法的好处是能够通过操作数控制不同结构的RMS半径权重并且可以保证阵列边缘和中心的透镜性能一致性。另外在公差分析时多重结构还有个好用的地方可以设置边缘透镜和中心透镜作为补偿器同时参与蒙特卡洛模拟。这比把一个完整阵列都建模再分析快一个数量级。2.3 MATLAB数据交换的方式选择MATLAB和Zemax之间的数据交互我总结出三种方式按复杂度递增排序方式一TXT/CSV数据交换。在Zemax中导出点列图坐标、质心坐标、波前相位图然后在MATLAB中用load或readtable读入。适合离线分析和一次性研究。方式二Zemax的扩展名DLL自定义面型。这个工程量大一般用不到略过不提。**方式三ZOS-API。**这是工程上最推荐的方式。ZOS-API支持MATLAB作为客户端调用Zemax可以进行实时光线追迹、参数调整、数据获取。通过MATLAB命令窗口连接Zemax后可以逐行设置孔径、视场、波长并提取像面上的光斑坐标实现自动化的参数扫描。我自己的做法是先用方式一把Zemax的HxDF格式的衍射数据导出存成CSV后交给MATLAB重建光场等流程跑通稳定了再升级成方式三提高效率。3. 实操过程与核心环节实现3.1 微透镜阵列参数设计与光场相机仿真拿一个具体的光场相机设计案例来说。假设传感器用的是Sony IMX174像元尺寸5.86微米分辨率1920x1200。主镜头F数为2.8焦距35毫米。第一步确定微透镜口径。我期望每个微透镜的子图像分辨率是(10 \times 10)像元那么微透镜口径就是(10 \times 5.86 58.6)微米。实际取整为60微米避免过约束。第二步确定微透镜焦距。匹配主镜头F数2.8所以微透镜F数也应该不大于2.8。取(F_\mu 2.8)则焦距[ f_\mu 2.8 \times 60 168\text{微米} ]实际制作中光刻胶热熔工艺制备的微透镜焦距公差大约在(\pm 5%)也就是168微米(\pm 8.4)微米。这个误差必须纳入系统设计预算因为焦距偏差直接影响角度分辨率标定。此时波前传感器的Shack-Hartmann质心偏移对焦距误差极其敏感我一般会在MATLAB标定流程中加入一个焦距校正系数用已知平面波前的质心偏移来反推实际焦距。第三步在Zemax非序列模式中建模。主镜头用一个理想透镜或者实际镜头设计文件替代微透镜阵列用矩形阵列装配60微米口径、168微米焦距的双凸微透镜。光源用一个扩展光源平行光管模拟无穷远处的点光源。在探测器面上查看光斑分布验证各个微透镜子图像是否正常分离且无混叠。3.2 光场数据的MATLAB重建核心代码在实际项目中我把光场数据看成宏像素图像。每个微透镜对应的传感器区域就是一个宏像素里面(10 \times 10)个像元记录了角度信息。在MATLAB中核心代码就是从原始的2D传感器图像中重新排列成4D光场数据。% 光场数据重排从传感器图像重构4D光场 % sensorImg: 原始传感器图像 (MxN) % lensPitch: 微透镜口径对应的像素数 % numLensX, numLensY: 横向和纵向微透镜数量 function LF reconstructLightField(sensorImg, lensPitch, numLensX, numLensY) [M, N] size(sensorImg); % 每个微透镜对应 lensPitch x lensPitch 像素块 % 提取每个微透镜子图像存储在4D数组中 LF zeros(lensPitch, lensPitch, numLensY, numLensX); for cx 1:numLensX for cy 1:numLensY rowStart (cy-1) * lensPitch 1; colStart (cx-1) * lensPitch 1; LF(:, :, cy, cx) sensorImg(rowStart:rowStartlensPitch-1, ... colStart:colStartlensPitch-1); end end end这段代码块的目的不是炫技而是说明光场相机的原始数据重排本质是个索引映射操作。重排后的四维数组第一维和第二维是角度信息第三维和第四维是空间位置信息。有了这个4D数组后续就可以做数字重聚焦了。重聚焦的核心公式是对4D光场进行平移积分[ I_{\alpha}(x, y) \sum_{u, v} L(u, v, x u(1 - \frac{1}{\alpha}), y v(1 - \frac{1}{\alpha})) ]其中(\alpha)是重聚焦系数(u, v)是角度坐标(x, y)是空间坐标。这个公式在MATLAB里用interp2或griddedInterpolant实现效率很高。我这里不贴完整代码给个核心思路角度坐标与大空间坐标的偏移量呈线性关系偏移量就是((1 - 1/\alpha))乘以角度坐标。3.3 波前传感器的质心计算与波前重建波前传感器的核心算法是质心检测。每个微透镜后的光斑质心相对于参考位置的偏移量反映了该子孔径上的平均波前斜率。在MATLAB中质心检测用灰度重心法即可% 计算每个子孔径的光斑质心偏移 function [dx, dy] centroidOffset(subImg, refCentroid) [rows, cols] size(subImg); x 1:cols; y 1:rows; totalIntensity sum(subImg(:)); cx sum(sum(subImg .* x, 1)) / totalIntensity; cy sum(sum(subImg .* y, 2)) / totalIntensity; dx cx - refCentroid(1); dy cy - refCentroid(2); end得到了所有子孔径的偏移量((\Delta x_i, \Delta y_i))后就可以通过Zonal法或模态法重建波前。Zonal法把波前斜率看作相邻子孔径间的相位差分用最小二乘求解。模态法则将波前展开为Zernike多项式用斜率数据拟合系数。实际项目中我习惯先做Zonal重建得到波前分布再拟合Zernike系数这样既能直观看到波前畸变的形状又能定量输出像差项的系数。当然光斑在探测器上的采样必须是够的。光斑尺寸建议占子图像的1/3到1/2过大则边缘被截断导致质心误差增大过小则探测噪声影响大。这里有个经验公式光斑直径约为(2.44 \lambda f_\mu / D)(\lambda)是波长。把这个尺寸除以像元尺寸就知道光斑占据多少像素了。3.4 实际联调流程演示一个具体的联调案例是我之前做的波前传感器标定。用Zemax建一个Shack-Hartmann波前传感器模型微透镜阵列口径150微米、焦距5毫米探测器像元尺寸15微米。加入不同Zernike像差比如离焦、像散、彗差用Zemax追迹光线得到探测器上的光斑图。将这个光斑图以CSV导出后在MATLAB中依次执行质心检测、波前重建和Zernike拟合。整个过程脚本化后我扫了10组不同大小的离焦像差重建值和真实值之间的RMS误差都控制在1%以内验证了设计指标。4. 常见问题与排查技巧实录4.1 光场相机各微透镜子图像之间出现串扰这是最常遇到的现象。原因通常是微透镜F数和主镜头F数不匹配或者微透镜阵列与传感器之间的间距不对。排查思路先检查F数匹配条件再用Zemax非序列模式在实际像面上查看光斑分布图看是否存在相邻微透镜的子图像重叠。解决办法有两种一是增大微透镜口径或焦距让子图像变小二是减小入射光束的最大角度范围方法是在主镜头后加场镜或者缩小孔径光阑。4.2 光斑质心计算被边缘效应干扰边缘效应对应的微透镜位于阵列最外圈子图像的边界不完整所以质心计算偏差很大。这在波前传感器设计中几乎无法完全避免只有两种缓解方式一是丢弃边缘子孔径的数据只在有效口径内做波前重建二是对边缘子图像做加权处理降低其置信度。我的做法是前者因为边缘子孔径实际对应入瞳边缘的光线即便纳入重建它对Zernike高阶项系数的估计贡献也极其不稳定。4.3 传感器噪声导致质心抖动低照度条件下探测器噪声会让质心计算产生明显的随机偏移。解决思路有硬件和算法两个层面。硬件层面尽量用低噪声科学级sCMOS算法层面则是用阈值分割来滤除背景噪声。在MATLAB中计算质心之前先做一次背景减除或者阈值化把强度低于最大值5%的像素置零可以有效抑制噪声贡献。另一个技巧是采用带通滤波或高斯拟合替代质心法虽然计算量大一些但在低信噪比下稳定性明显更好。4.4 Zemax和MATLAB版本兼容性问题Zemax 2023以后版本自带的ZOS-API对MATLAB版本有明确要求2024版甚至要求MATLAB R2021a以上。如果你的MATLAB版本太老ZOS-API会报找不到.dll文件的错误。我的建议是如果只是做离线数据处理不需要ZOS-API直接文件交换即可这是最稳的方案。需要实时调用时先查好Zemax官方文档里支持的MATLAB版本对应表别在这上面浪费时间。热词里有人搜matlab 2026b和matlab 2025本质上都是版本适配问题我的经验是不要追新用官方稳定支持列表里的版本。4.5 微透镜面型导入Zemax后的法线方向错误从白光干涉仪导出的面型数据在CAD或自定义面型导入后经常出现法线方向反转的问题表现为聚焦光线变成发散光线。排查方法很简单在非序列模式中沿光轴方向查看光斑的聚集和发散情况或者查看单个微透镜的几何法线矢量。这种问题多半是导出数据格式中XYZ轴定义和Zemax不一致导致的处理方式是调整数据排列顺序或者做坐标镜像变换。5. 配置建议与实操心得5.1 参数配置推荐表按光场相机和波前传感器两个方向我整理一套常用参数配置参考表需要的可以直接抄参数项光场相机参考值波前传感器参考值微透镜口径50–150微米100–400微米微透镜F数匹配主镜头F数通常10–50传感器像元尺寸3.45–6微米10–24微米子图像像素数8×8 到 15×155×5 到 10×10阵列规模100×100 到 300×30020×20 到 100×100目标重建精度角度分辨率 0.1°波前RMS误差 λ/20这只是个起点具体要根据系统整体复购的目标和探测器型号来细化。强调一句光场相机的微透镜口径不宜选太小因为子图像像素数就是角度采样点数太少则重聚焦范围受限。波前传感器则相反子图像内的像素数够质心计算用即可更多像素反而降低帧率和增加噪声。5.2 从仿真到实际加工的注意事项仿真做完了出加工图纸之前还有几件事必须盯紧。微透镜阵列的一个关键制造参数是填充因子也就是微透镜有效通光面积占阵列总面积的比例。光刻胶回流工艺的填充因子一般能做到接近100%但离子刻蚀和超精密车削工艺会有损失。填充因子不足的直接后果是传感器上相邻子图像之间存在暗区导致光场数据中部分角度信息缺失。这个问题可以在MATLAB配合算法插值处理也可以在Zemax中提前建模加工误差来评估影响范围。另一个容易踩坑的是微透镜阵列的基底厚度公差。基底厚度变化会改变微透镜后主面位置等效于焦距改变。在Zemax公差分析中建议把基底厚度和曲率半径设为独立的公差操作数看两者谁对质心偏移影响更大。通常情况下曲率半径公差比基底厚度公差更敏感因此加工厂商提供的能力范围中优先卡曲率半径。5.3 一个实用的光场相机全链路仿真流程我再讲一个完整的操作流程方便直接照搬。假设你手里的任务是设计一款用于三维测量的光场相机确定主镜头参数焦距f50mmF4。在主镜头后焦面附近放置微透镜阵列阵列口径选100微米焦距400微米F数为4。Zemax中建模完整系统用非序列模式追迹点光源或扩展光源。在像面放置探测器查看每个微透镜下的子图像阵列排布。导出探测器图像为CSV或BMP。MATLAB读取图像执行本文第一节的光场重排代码得到4D数据。执行重聚焦生成不同深度的对焦图像序列。用多视角立体匹配或者深度估计法恢复三维信息。这个流程我在多个项目中跑过稳定可靠每一步都有清晰的中间产物可以检查不会出现做到最后发现前面全错了的情况。6. 工具箱选型与版本适配6.1 MATLAB工具箱选择微透镜阵列系统仿真用到MATLAB主要靠几个工具箱Image Processing Toolbox图像读取、滤波、形态学处理、Optimization ToolboxZernike拟合、最小二乘、Statistics Toolbox噪声分析。如果没有这些工具箱很多基础函数会缺失建议安装时直接选集齐全套避免跑代码报Undefined function浪费时间。6.2 Zemax版本选择对于微透镜阵列仿真Zemax的非序列模式能力才是核心。早期版本比如2009年之前的非序列模式追迹速度慢而且对阵列物体的支持不完善。我建议用Zemax 2019以后的版本因为非序列模式加入了多核光线追迹阵列物体的构建也简单了很多。如果是学生或者评估用途可以用Zemax的免费试用版但注意试用版的非序列模式可能有光线数限制。7. 用到的核心公式速查考虑到这种博文反正要被人收藏反复查我把关键公式整理成表格方便直接复制进笔记。物理量公式说明微透镜焦距(f_\mu F_\mu \times D)(F_\mu)为微透镜F数(D)为口径矢高与曲率半径关系(R \frac{D^2 4h^2}{8h})用于回流工艺微透镜面型拟合F数匹配条件(F_\mu \leq F_m)避免子图像混叠微透镜子图像尺寸(s \frac{D \cdot f_m}{f_m d_{ml}})(d_{ml})为微透镜到探测器距离重聚焦公式(I_\alpha(x, y) \sum_{u, v} L(u, v, x u(1-\frac{1}{\alpha}), y v(1-\frac{1}{\alpha})))光场数字重聚焦质心坐标(c_x \frac{\sum x I(x, y)}{\sum I(x, y)})灰度重心法波前斜率(\frac{\partial W}{\partial x} \frac{\Delta x}{f_\mu})Shack-Hartmann原理使用公式的时候有两个细节要注意一是所有几何量单位必须统一通常用毫米二是F数匹配条件考虑的是主镜头出瞳的位置而不只是F数本身所以在Zemax中还需要用实际的光线角度来验证。我个人在实际操作中的体会是微透镜阵列设计这个方向最难的不是某一个工具的操作而是打通光学设计—探测器物理—算法重建这条完整的链路。很多刚入行的朋友把精力花在Zemax界面操作和MATLAB语法上忽略了系统层面的参数匹配结果单个环节都对连起来就废。所以这篇我刻意花了大量篇幅讲参数之间的耦合关系希望能帮你从一开始就建立系统思维。最后再分享一个小技巧在Zemax里做非序列仿真时如果光线数量太大导致追迹卡顿先大幅降低光源光线数比如降到1000条做方案验证等确定结构没有问题再调高到百万量级做最终仿真这样可以节省大量调试时间。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号