当前位置: 首页 > news >正文

光学像差与泽尼克多项式

在光学像差分析中,泽尼克系数是非常重要的一种光学像差分析工具。在介绍泽尼克系数之前,我们先简单介绍一下光学像差的概念。

光学像差

光学系统的像差(Aberrations)是指实际成像与理想光学模型(如近轴光学理论)之间的偏差,导致图像模糊、变形或色彩失真。这些偏差源于光线传播的物理限制和光学元件的设计缺陷。像差大致可以分为以下几类:

光学工程师也会把像差进一步分为高阶像差和低阶像差:

  • 低阶像差:离焦(Defocus)、散光(Astigmatism)、倾斜(Tilt)
  • 高阶像差:彗差(Coma)、球差(Spherical Aberration)、三叶草像差(Trefoil)等。

光学像差的表征

一般光学工程师会利用相位差图来表征光学像差,因为光本身具有波粒二象性,所以光线在光学系统中传播的时候,由于波的性质,光线会有衍射效应,而衍射效应导致光线通过光学系统的时候,会有一个光程差,这个光程差将引入额外的相位差,这个相位差可以反应光学像差。所以光学像差会用波前像差图来表征。不同的像差,其对应的波前相位差图也会不同。

但是,不同的光学系统的波前相位差图可能也有很多,而且可能也很复杂,有没有什么办法对光学像差做一个统一的分析呢。答案是肯定的,其中一种方式就是引入基函数

空间中的向量基

在线性代数里面,我们以前都学习过空间基,比如二维空间的任何一点都可以表示为(x,y)(x, y)(x,y)的一个坐标点,这个坐标点本身可以看成是一个二维向量,在笛卡尔坐标系里,这个二维向量可以表示成两个标准基的线性加权:

r=(xy)=x(10)+y(01) r = \binom{x}{y} = x \binom{1}{0} + y \binom{0}{1}r=(yx)=x(01)+y(10)

这里的(10),(01)\binom{1}{0}, \binom{0}{1}(01),(10)其实就是二维空间的向量基,有了空间的向量基,那么就可以对这个空间中的任意一个向量进行表示。

光学像差的基–泽尼克多项式

前面我们介绍了空间中的基,就是一组正交且完备的向量基函数,可以实现对该空间中任意一个向量的表征。那么光学像差,或者说波前相位差这样一个空间,是否也存在这样一组基函数,可以实现对任意波前相位差的表征呢,答案是肯定的。我们今天介绍的泽尼克系数就是这样一组基函数。泽尼克多项式(Zernike Polynomials)是一类在单位圆域内正交的多项式,由荷兰物理学家弗里茨・泽尼克(Frits Zernike)于 1934 年提出,最初用于描述光学系统中的像差。

泽尼克多项式的某种表达形式为:

Znm(r,θ)={Rn∣m∣(r)cos⁡(mθ)m≥0Rn∣m∣(r)sin⁡(∣m∣θ)m<0 Z_{n}^{m}(r,\theta)= \begin{cases} R_{n}^{\vert m\vert}(r)\cos(m\theta) & m \geq 0 \\ R_{n}^{\vert m\vert}(r)\sin(\vert m\vert\theta) & m < 0 \end{cases}Znm(r,θ)={Rnm(r)cos(mθ)Rnm(r)sin(mθ)m0m<0

其中,r∈[0,1],θ∈[0,2π]r \in [0, 1], \theta \in [0, 2\pi]r[0,1],θ[0,2π]nnn表示的径向rrr的阶数,mmm表示的是角向频率θ\thetaθ的阶数,n,mn, mn,m都是整数,并且∣m∣≤n|m| \leq nmnn−∣m∣n - |m|nm为偶数。

径向函数的表达式为:

Rnm(r)=∑k=0(n−∣m∣)2(−1)k(n−k)!k!(n+∣m∣2−k)!(n−∣m∣2−k)!rn−2k R_{n}^{m}(r) = \sum_{k=0}^{\frac{(n - |m|)}{2}} \frac{(-1)^{k} (n - k)!}{k! \left( \frac{n + |m|}{2} - k \right)! \left( \frac{n - |m|}{2} - k \right)!} r^{n - 2k}Rnm(r)=k=02(nm)k!(2n+mk)!(2nmk)!(1)k(nk)!rn2k

泽尼克系数的正交性,在单位圆上满足:

∬r drdθ Zi(r,θ)Zj(r,θ)=πδij \iint r \, dr d\theta \, Z_i(r, \theta) Z_j(r, \theta) = \pi \delta_{ij}rdrdθZi(r,θ)Zj(r,θ)=πδij

有了泽尼克多项式,也就是光学像差的基,就可以用泽尼克多项式对光学像差进行表示,理论上任意的波前像差W(r,θ)W(r, \theta)W(r,θ)可以表示为:

W(r,θ)=∑n=0∞∑m=−nncnmZnm(r,θ) W(r,\theta) = \sum_{n=0}^{\infty} \sum_{m=-n}^{n} c_{n}^{m} Z_{n}^{m}(r,\theta)W(r,θ)=n=0m=nncnmZnm(r,θ)

泽尼克项与一般像差的对应关系:

系数泽尼克项像差类型相位分布特征
c00c_0^0c00Z00Z_0^0Z00平移(常数项)全局相位偏移
c1±1c_1^{\pm1}c1±1Z1±1Z_1^{\pm1}Z1±1倾斜(Tilt)线性倾斜(类似棱镜)
c20c_2^0c20Z20Z_2^0Z20离焦(Defocus)旋转对称二次曲面(碗状)
c2±2c_2^{\pm2}c2±2Z2±2Z_2^{\pm2}Z2±2像散(Astigmatism)双曲抛物面(正交方向曲率相反)
c3±1c_3^{\pm1}c3±1Z3±1Z_3^{\pm1}Z3±1彗差(Coma)非对称泪滴状
c40c_4^0c40Z40Z_4^0Z40球差(Spherical)旋转对称四次曲面

从上面的公式可以看出,实际的泽尼克多项式可以由很多个,但一般会取前 N 项进行分析,对于一般的像差,取前 15 项就差不多够了,更复杂的像差,可能会取更多的项,zemax 里面一般取到 37 项。

zemax 里的 标准泽尼克系数:

光学像差与 PSF

前面介绍了光学像差与泽尼克多项式的关系,接下来利用一些 python 的工具库可以进一做泽尼克多项式的分析,我们可以选用 GitHub 上的 zernpy 这个工具库:

https://github.com/sklykov/zernpy

从 Github 上下载下来之后,可以看到这个工具库主要有两个主要的函数 ZernPol, ZernPSF

通过简单的调用,可以实现对不同泽尼克多项式在单位圆上的相位可视化:

importosimportnumpyasnpfrommatplotlibimportpyplotaspltfromzernpyimportZernPol,ZernPSFif__name__=='__main__':# Example usage of ZernPol classzp=ZernPol(m=-2,n=2)print(f"Zernike Polynomial for m=-2, n=2:{zp}")# Plot the Zernike polynomial profileZernPol.plot_profile(zp)

上面这段代码,就可以对m=−2,n=2m=-2, n=2m=2,n=2这个泽尼克多项式单位圆上的相位进行计算以及可视化:


可以设置不同的m,nm, nm,n可以得到不同的泽尼克多项式的相位情况。

也可以用这个工具,进行 PSF 的仿真:

importosimportnumpyasnpfrommatplotlibimportpyplotaspltfromzernpyimportZernPol,ZernPSFif__name__=='__main__':zpsf=ZernPSF(ZernPol(m=1,n=3))# horizontal comaNA=0.95wavelength=0.55expansion_coeff=-0.26pixel_physical_size=0.2*wavelength# example of physical propertieszpsf.set_physical_props(NA,wavelength,expansion_coeff,pixel_physical_size)# provide physical properties of the systemkernel=zpsf.calculate_psf_kernel(normalized=True)# get the kernel as the square normalized matrixprint(f"PSF kernel shape:{kernel.shape}")plt.imshow(kernel,cmap='gray',interpolation='nearest')plt.title("PSF Kernel")plt.show()

上面的代码,可以生成某个泽尼克多项式下对应的 PSF,因为只模拟了单波长,所以显示的是一个单通道的黑白 PSF

也可以对多个泽尼克多项式进行加权,得到多个像差混合的 PSF

importosimportnumpyasnpfrommatplotlibimportpyplotaspltfromzernpyimportZernPol,ZernPSFif__name__=='__main__':# Example of using ZernPSF with multiple Zernike polynomials# Create multiple Zernike polynomials and calculate the PSF kernelzp1=ZernPol(m=-1,n=3)zp2=ZernPol(m=2,n=4)zp3=ZernPol(m=0,n=4)pols=(zp1,zp2,zp3)coeffs=(0.5,0.21,0.15)zpsf_pic=ZernPSF(pols)zpsf_pic.set_physical_props(NA=0.65,wavelength=0.6,expansion_coeff=coeffs,pixel_physical_size=0.6/5.0)psf_kernel=zpsf_pic.calculate_psf_kernel()print(f"PSF kernel shape with multiple Zernike polynomials:{psf_kernel.shape}")plt.imshow(psf_kernel,cmap='gray',interpolation='nearest')plt.title("PSF Kernel with Multiple Zernike Polynomials")plt.show()

上面这段代码,实现了三种泽尼克多项式融合下的 PSF

http://www.jsqmd.com/news/486116/

相关文章:

  • Redux-Form错误状态管理终极指南:同步错误、异步错误与提交错误详解
  • DroneSecurity:揭秘DJI OcuSync 2.0无人机ID协议的终极嗅探工具
  • 掌握DVA框架TypeScript类型定义:从基础到高级泛型实践指南
  • 大家的社保手册:一篇讲清,从此不求人
  • 终极Apache PredictionIO插件开发指南:10个高效扩展机器学习平台功能的实用技巧
  • 2026年白俄罗斯留学哪家机构靠谱?优质实力机构详解及选型参考 - 深度智识库
  • 终极指南:如何用deej打造你的专属硬件音量控制器
  • 终极指南:ramsey/uuid与WordPress插件开发中的UUID应用技巧
  • Umi性能优化终极指南:从代码分割到PWA的极致加速方案
  • Win10 将未分配的磁盘空间合并到C盘该怎么做?一文教你3种方法
  • 2026年科威特建材展 Kuwait Build Design Week - 新天国际会展 - 中国总代理 - 新天国际会展
  • 阿里企业邮箱2026年最新收费标准,中小企业选购费用明细与优惠 - 品牌2026
  • 深入探索Apache Answer前端架构:React组件设计与Zustand状态管理实践指南
  • 如何利用entr实现数据科学工作流的实时自动化:完整指南
  • React-PDF文本对齐完整指南:创建专业PDF文档排版
  • Apache PredictionIO多语言支持终极指南:Java、Scala、Python SDK深度对比
  • 笔记本新机「开荒」完全攻略:从拆封验机到系统配置,《你缺失的那门计算机课》教你步步避坑
  • 如何使用Mapper库快速实现Swift对象的JSON解析?新手入门指南
  • Jimp WebAssembly终极优化指南:快速提升图像处理性能的10个技巧
  • 突破日志大数据瓶颈:OpenObserve批量导入工具的分片与断点续传技术全解析
  • 终极Zabbix插件开发指南:从零开始扩展企业级监控能力
  • 终极指南:如何使用Nightingale与OpenTelemetry构建统一可观测性平台
  • Design OS产品规划实战:5步定义清晰产品愿景与数据模型
  • 测试覆盖率提升秘籍:JaCoCo与SonarQube集成深度实践指南
  • Qwen3-Reranker-0.6B实战指南:模型量化(AWQ/EXL2)部署可行性验证
  • 如何调试深度学习模型:DeepLearning.ai常见问题及解决方案终极指南
  • OpenObserve缓存策略调优:基于查询模式的智能缓存配置终极指南
  • 终极指南:Tortoise-TTS超参数调优秘籍 - 学习率调度与正则化策略深度解析
  • 终极指南:EfficientDet核心组件SeparableConvBlock实现原理与实战应用
  • 2026年GEO公司哪家靠谱?5家实力服务商优选推荐 - 品牌种草官