Ansys Zemax | 如何在 OpticStudio 中模拟人眼

news2024/11/20 7:04:04

本文是人眼模型的一个案例研究,并提供了更高级的序列模式建模技术的演示。我们将在OpticStudio中使用Liou & Brennan 1997眼睛模型创建人眼模型。在OpticStudio中成功生成这个眼睛模型后,我们将使用它来设计一个自由形式的渐进眼镜镜片。

下载

联系工作人员获取附件

简介

准确的人眼模拟和建模是一个难题;这是一个不断激发新的发展的课题。在本研究中,我们将使用在《Optics of the Human Eye》一书中展示的Liou & Brennan 1997模型在OpticStudio中创建人眼模型1。这是一个相当全面的眼睛模型。它考虑了许多其他模型没有考虑到的现实因素,如偏置瞳孔、弯曲的视网膜表面、向内的眼球和前后半部分具有两种不同梯度折射率剖面的晶状体。

在OpticStudio中成功生成这个眼睛模型后,我们将使用它来设计一个自由形式的渐进眼镜镜片。

人眼模型

我们将从建立人眼模型开始。你可以使用附件中的“Human_Eye_Model.ZMX”,以跳过手工输入所有的表面。该文件在本文的“附件下载”一节中的ZIP压缩文件中可用。

如果你要手动输入而不是加载附件,你要先把OpticStudio设置为序列模式,然后设置System...General...Units...Lens Units为“毫米”。接下来,你要设置波长(在系统部分找到)为“F, d, C(可见)”,如下所示:

接下来,进入System Explorer...Aperture,设置光圈类型为Float By Stop Size,然后进入System Explorer...Glass Catalogs并添加目录MISC到您的玻璃目录。在视场数据编辑器中只设置一个视场,类型为Angle(Deg), X-Field值为5:

现在在光阑前插入3个表面,并在光阑后插入另外3个表面。下面是建立所有表面的一步一步的指导,一次一个。调整每个参数步骤如下;任何被省略的参数都应该保持默认值。

Surface 0 OBJ

Comment

Object

Thickness

1.0E+009

Surface 1

Comment

Input Beam

Thickness

50

Surface 1只是一个虚拟平面,我们用它来让布局图更容易理解。因为我们只需要这个表面来可视化光线通过它,我们可以通过Object Properties...Draw来隐藏它,然后检查Do Not Draw This Surface。

Surface 2

Comment

Cornea

Radius

7.77

Thickness

0.55

Material

Model: 1.376, 50.23

Semi-Diameter

5

Conic

-0.18

要设置这些材料参数,你需要右键单击玻璃单元格,从下拉列表中选择“模型”作为解决类型,然后输入值。

接下来,我们将在Surface 3插入角膜和房水之间的界面。

Surface 3

Comment

Aqueous

Radius

6.4

Thickness

3.16

Material

Model: 1.376, 50.23

Semi-Diameter

5

Conic

-0.60

Surface 4代表系统的孔径光阑,在镜头数据编辑器中被标记为“STO”。这是我们眼睛模型的瞳孔平面。

Surface 4

Comment

Pupil

Material

Model: 1.376, 50.23

Semi-Diameter

1.25

为了模拟偏移的瞳孔位置,我们需要偏心这个表面。打开Surface Properties,然后点击Tilt/Decenter选项卡。设置这个表面的Decenter X值为-0.5mm,然后在After surface选择Reverse This Surface,如下图所示。

现在我们将对模型晶状体的前后部分进行建模。

Surface 5

Surf:Type

Gradient 3

Comment

Lens-front

Radius

12.4

Thickness

1.59

Semi-Diameter

5

n0

1.368

Nr2

1.978E-003

Nz1

0.049057

Nz2

-0.015427

Surface 6

Surf:Type

Gradient 3

Comment

Lens-back

Radius

Infinity

Thickness

2.43

Semi-Diameter

5

n0

1.407

Nr2

-1.978E-003

Nz2

-6.605E-003

接下来,我们将模拟晶状体后部和眼睛玻璃体之间的界面。

Surface 7

Comment

Vitreous

Radius

-8.1

Thickness

16.23883

Material

Model: 1.336, 50.23

Semi-Diameter

5

Conic

0.96

最后,我们将在Surface 8上建模眼睛的视网膜。这在镜头数据编辑器中被标记为“IMA”,代表图像表面。

Surface 8

Comment

Retina

Radius

-12

Semi-Diameter

5

快速检查一下系统的3D布局(第一个表面被设置为表面2,而不是默认的表面0),显示出有些东西不是很正确:

在布局图中,顶部和底部的边缘光线被瞳孔切断。这是不可能的,特别是当我们选择系统的光圈类型为Float By Stop Size:根据定义,顶部和底部边缘光线应该成功地通过瞳孔。我们的光瞳有些问题。当我们的瞳孔不可信时,我们会检查Pupil Aberration Fan(这是一个分析工具,可以在Analyze Tab...Aberrations...Pupil Aberration下找到)。我们系统的光瞳像差光扇图是这样的:

光瞳像差光扇图告诉我们在负X轴方向上有40%的瞳孔像差。这是由于OpticStudio将光线瞄准(非偏心的)近轴入瞳造成的。记住,我们让瞳孔偏离0.5mm,这是瞳孔半直径的40%,在x轴的负方向。

幸运的是,OpticStudio有一个简单的解决方法:光线瞄准(Ray Aiming),前往System Explorer...Ray Aiming,设置光线瞄准为Paraxial,如下图所示:

点击OK按钮,现在我们看到光瞳像差被消除了:

3D布局显示了成功通过偏心瞳孔的上、下边缘光线:

这是Liou & Brennan(1997)的眼睛模型。此时,你的镜头数据编辑器应该是这样的:

更改3D布局图的设置让Z旋转=90,并设置它第一表面为表面1(输入光束),你会看到自顶向下的模型,包括补偿瞳孔和离轴视场(我在下图模型的各个部分添加了一些注释标签):

分析性能

为了分析这个镜头,让我们先看点列图。从Analyze Tab...Rays and Spot下拉打开标准点图:

接下来检查FFT MTF:

注意,我选择的最大频率为100 lp/mm。这相当于5 um的单点分辨率,与20/20斯内伦视力检测表要求的分辨率非常接近。你可以看到,这个模型应该能产生分辨率高达100 lp/mm的图像,因此是一个20/20人眼的好模型。

最后,为了更好地了解这个“病人”的视力,我们将检查衍射图像分析。衍射图像分析特征与几何图像分析特征相似,只是使用了复杂的系统光学传递函数(OTF)来计算图像外观。该方法考虑了实际光学系统的有限通带和其他衍射效应对成像的影响。

为此,我们将其设置为以20/20斯内伦视力检测表对应的大小来成像字母“F”。前往Analyze Ribbon...Extended Scene Analysis...Extended Diffraction Image Analysis,点击Settings,设置值如下图所示:

这是衍射图像分析图:

外部光学元素

现在,在OpticStudio中已经建立了一个良好的人眼模型,就可以向设计中添加外部元素。例如,如果你有一个测量的得到的角膜图,你可以用“网格凹陷”表面替换角膜表面,并将数据导入OpticStudio。或者,如果你有一个特别设计的人工晶状体(IOL)模型,你可以用该模型代替两个梯度表面。

在这个例子中,我们将设计一个渐进多焦点镜头(PAL),我们将从添加一个眼镜镜片到我们的模型的前面开始。我们将优化该PAL以提供近、中、远目标的良好成像。

当“病人”上下移动他的眼睛时,为了仿真眼睛运动的模型,我们希望保持眼镜在合适的位置,并让眼睛模型围绕其中心旋转。也就是说,我们必须在眼球的中心放置一个坐标间断面,然后让整个眼球模型围绕这个点旋转。为了做到这一点,我们首先将眼镜镜片放入镜头数据编辑器,然后我们将向前移动适量的厚度,以到达眼睛的中心。然后我们会放入一个坐标中断表面,然后我们会向后移动到眼睛模型的第一个表面的理想位置,角膜。乍一看,这可能有点令人困惑,但正如您将看到的,它实际上非常简单。

首先,在输入光束(表面1)和角膜(表面2)之间插入三个表面。这三个表面将代表眼镜镜片的前表面和后表面,以及倾斜眼睛的坐标间断面。你会注意到,我将镜片放置子啊距离眼睛15mm处。

我们将把坐标间断面设置在在眼球的中心(我估计距前角膜表面大约13mm)。这样,眼睛就会以一种模仿人眼实际运动的方式围绕中心旋转。下面是设置这三个新表面的指南。

你会看到从眼镜镜片的后表面到坐标间断面(在眼球中心)的厚度是28毫米(从眼镜到角膜15毫米加上角膜到眼球中心13毫米)。然后,坐标间断面后,有一个负13mm的厚度,回到角膜表面。面2和面3分别代表眼镜镜片的前表面和后表面。

Surface 2

Surf:Type

Even Asphere

Comment

glasses-front

Radius

100

Thickness

3

Material

POLYCARB

Semi-Diameter

20

Surface 3

Surf:Type

Extended Polynomial

Comment

glasses-back

Radius

100

Thickness

28

Semi-Diameter

20

表面4代表位于眼球中心的坐标间断面。

Surface 4

Surf:Type

Coordinate Break

Comment

center of eye

Thickness

-13

现在让我们添加一些新的配置。打开多重结构编辑器(MCE),并按Ctrl-Shift-Insert两次,或按MCE工具栏中的Insert Configuration按钮。我们需要两个额外的多重结构操作数,所以现在按两次Insert。现在MCE中应该有九个空格。

我们要做的第一个结构是眼睛通过晶状体直视远处的物体。第二种配置将代表眼睛通过透镜稍微向下看,观察一个中距离物体。最后,第三个配置将代表眼睛向下看,观察一个非常近的物体。改变对象的距离是用一个THIC操作数(改变Surface 0的厚度)来处理的,改变眼睛的上下角度是通过改变Surface 4(坐标中断面)的Tilt About X(参数3)来处理的。下表列出应如何填写MCE:

我们现在有了一个镜片和一个眼球,我们设置了眼球,使它以一种现实的方式旋转。还有一个小步骤可以帮助我们更容易理解布局图:我们需要将全局坐标参考面设置为镜头数据编辑器(LDE)中的坐标间断之前的一个。这里的想法是,在我们的坐标间断面(曲面4)之后的曲面将相对于坐标中断之前的曲面倾斜一些。

当我们制作布局图时,我们希望在图中显示眼球旋转时,眼镜镜片保持在原位(而不是当眼镜围绕着眼睛移动时,眼球保持在原位)。为了确保这一点,我们转到System Explorer...Aperture,并将全局坐标参考面设置为4之前的任何面(如表面1)。

快速检查3D布局(第一个表面设置为1;旋转X、旋转Y和旋转Z的值设置为0;配置设置为All;和Y补偿设置为-50)表示有些东西不太正确:

问题是当我们的眼睛模型向下旋转时,它并不是真的向下“看”。这是因为视场值在眼睛旋转时保持不变,我们想要的是视场改变,以便聚焦的光束总是击中视网膜的同一部分(视网膜上的这个焦点被称为中央凹)。所以我们真正想保持不变的是像高,而不是视场角。为了做到这一点,我们要将视场类型从角度(Deg)更改为真实像高。

为了转换为真实像高视场定义,我们可以检查主光线的坐标,并手动将该值输入到视场数据编辑器中。但是,我们也可以使用视场转换工具。要做到这一点,从System Explorer...Fields...Open Field Data Editor打开“视场数据编辑器”,导航到“视场属性”中的“视场类型”选项卡。然后,在转换到下拉框中选择真实像高:

这将转换我们的视场类型,以便它根据实际像高定义。如果需要的话,我们可以把这些值四舍五入。通过这样设置我们的视场数据,我们将保证无论我们选择哪种配置,主光线将在X = 1.462mm, Y = 0.0处与像面相交(即视网膜)。这是一个很好的仿真情况,无论人眼旋转到哪里,视场中心总是在视网膜上的同一个精确点(中央凹)。

以下是一个3D布局图,从侧视图显示了系统的3种配置(远、中、近对象距离):

我们系统的三种结构的MTF曲线和衍射图像从远到近依次如下所示:

请注意,由于我们的模型没有包括通过晶状体的调节(以适应从远到近的物体距离的变化),系统在中距离和近的物体上显示出非常差的性能,就像我们预期的老花眼患者一样。

准备优化

我们将优化眼镜镜片,使其具有自由形状,试图适应眼睛向下旋转。我们的下一步是在镜头数据编辑器 (LDE)中设置变量。我们唯一感兴趣的是改变镜片前后表面的形状。

在LDE中,设置表面2(眼镜前)的半径、圆锥和第2阶项到第12阶项为变量——这个曲面总共应该有8个参数成为变量。我们还将Surface 3(眼镜后表面)的最大值设置为40,相同表面的标准半径设置为20.0。最后,将Surface 3的所有40个多项式系数项设为变量。

在优化镜片形状之前,我们需要建立一个评价函数。在Optimize Tab...Optimization Wizard的优化函数编辑器(MFE),将优化函数和参考值设置为“RMS”、“波前”和“质心”。设置瞳孔积分方法为“高斯求积”,选择6环12臂;我们需要高采样,因为我们预计波前形状是高度复杂的,基于PAL表面轮廓自由度的数目。请注意,假设轴对称框没有选中,我们将保持默认:

点击“OK”,OpticStudio会自动为我们生成几百个优化操作数。

在我们开始优化之前,我们只需要添加几个边缘厚度操作数,以保持眼镜镜片的边缘不会变得太厚或太薄。眼镜镜片包括一个扩展的多项式表面类型,因此在优化期间它不会保持旋转对称。因此,我们必须使用操作数来检查镜头周围多个点的边缘厚度。XNEG和XXEG就是这样的操作数。我们将这些操作数添加到价值函数中,以确保眼镜镜片的边缘厚度在1到8mm之间。

在优化函数的开头插入两个新操作数。下面是这两个新操作数的设置:

第一个新操作数

Type

XNEG

Surf1

2

Surf2

3

Zone

0

Target

1

Weight

1

第二个新操作数 

Type

XXEG

Surf1

2

Surf2

3

Zone

0

Target

6

Weight

1

优化PAL

至此,设计的所有艰苦工作都已完成。附件'Human_Eye_Model.ZMX'已经完成到此为止的所有上述工作。

剩下要做的一件事就是通过Optimize Ribbon...Optimize打开优化工具并点击开始按钮来优化设计。

一段时间后,OpticStudio将完成优化,你将得到一个有趣的,自由形式的渐进添加镜头(PAL)。在这个演示中,我们用锤形优化工具做了几个小时的进一步优化:

根据这种布局,我们可以看出我们的凹陷剖面相当极端。我们还可以通过表面凹陷分析来进一步研究。注意,在本例中,我们让优化器肆意运行。在设计将要建造的系统时,我们必须考虑成本和没有在这里做的凹陷轮廓。仔细考虑并选择向优化器公开的变量始终是一种良好的习惯。在这个例子中,我们简单地将PAL的所有40个多项式项作为变量,但实际上我们应该通过以下两种方法确定哪些是重要的因素:

  1. 使用一些基本的考虑。例如,考虑是否需要X/Y对称项,并根据此选择设置哪些项为变量。

  2. 测试哪些变量“有效”。一种常见的技术是每次向优化器提供一个变量,并检查该变量是否有帮助。如果优化器不能使用这个变量找到更好的解决方案,那么排除它可能是合理的。将它设置为0并保持不变,然后继续下一个。

合适的变量选择确保最终设计是实际的和可制造的,不太昂贵,也大大提高优化性能。不过,在这种情况下,我们将简单地继续,假设该系统是可制造的,并符合我们的物理设计规范。

我们可以看到,优化器已经为所有三种配置找到了一个非常好的解决方案。我们可以使用分析工具检查所有三种配置的性能。注意,这一次,我们的系统在所有三种配置中都有衍射限制(RMS光斑尺寸小于艾里半径),所以我们将在扩展衍射图像分析设置中检查衍射限制选项。我们新优化的系统的三种结构的MTF曲线和衍射图像如下所示,顺序从远到近:

参考资料

1. Atchison, D. A., & Smith, G. (2006). Optics of the human eye. Oxford: Butterworth-Heinemann.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/124585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正大国际期货:2022年各行业顶级富豪身价大洗牌

2022年各行业顶级富豪身价大洗牌 富豪身价较2021年年底变动幅度涨跌幅 行业:加密货币,币安创始人:赵长鹏816%,身价174亿美元 行业:基建、大宗商品,阿达尼集团创始人:高塔姆阿达尼210%&#x…

Linux下Python脚本的编写(二)

今天试着把两个shell小脚本转化成Python版本 一. 脚本1 判断所接的nvme 在哪个CPU上 #!/bin/bash lscpu |grep -i node for nvme in nvme list|sed 1,2d|awk {print $1}|awk -F "/" {print $NF} doecho $nvmebusid$(readlink -f /sys/block/$nvme |cut -d / -f 6)ec…

【解决】VMware虚拟机中ubuntu系统联网问题——以桥接模式解决

问题描述 由于需要通过笔记本的蓝牙与外接设备进行通信,我使用的是无线网。所以需要使用VMware中提供的桥接模式,借助笔记本的无线网卡进行联网,之前设置过一次,能够正常运行,但是关机后,可能加载的快照不同…

维视智造成为苏州市人工智能行业协会首届会员单位

近日,以“智者相偕聚势赋能”为主题的苏州市人工智能行业协会一届一次会员大会暨成立大会在苏州举行,来自全市200多家人工智能相关单位的代表以及人工智能领域的知名学者、产业专家、企业家参加了会议。维视智造作为协会的首届会员,与苏州市工…

2022/12/28总结

今天AC了一道题(后面的题目对我来说好难,刷不动了) P2895 [USACO08FEB]Meteor Shower S P2895 [USACO08FEB]Meteor Shower S_lxh0113的博客-CSDN博客 学的新知识: dijkstra算法 dijkstra算法是求最短路径的算法。相比较于flo…

【真干货】Activiti7工作流如何使用?看这里

一. 前言 近日文哥有个毕业学员在公司开发时遇到了工作流的相关业务场景。在这里,文哥给大家精心准备了以Activiti为代表的工作流简单使用教程,希望能给有需要的小伙伴们一些帮助。下面我们就来开始介绍Activiti工作流的基本使用情况。 二. Activiti工…

利器 | Java 接口自动化测试首选方案:REST Assured 实践 (一)

在 REST Assured 的官方 GitHub 上有这样一句简短的描述: Java DSL for easy testing of REST services 简约的 REST 服务测试 Java DSL REST Assured 官方的 README 第一句话对进行了一个优点的概述,总的意思表达的就是简单好用。那么 REST Assured 有…

dolphinscheduler 调用shell脚本执行sql

1. 资源中心--创建文件 脚本&#xff1a; #!/bin/bash hive <<EOF alter table app.app_bi_test drop partition (dayid$1); insert overwrite table app.app_bi_test partition(dayid) select a.Ccode,a.inCcode ,a.Cname ,$1,COALESCE(b.num,0) ,COALESCE(c.c_num…

以前的任何一个行业只要与互联网技术产生联系,便焕发生机与活力

事实上&#xff0c;以往&#xff0c;我们所经历的那个互联网玩家频出的年代&#xff0c;其实就是一个以互联网技术为主导的年代。在那样一个年代里&#xff0c;互联网技术几乎是解决一切痛点和难题的万能解药&#xff0c;几乎是破解一切行业痛点和难题的杀手锏。任何一个行业&a…

XXE渗透与攻防(一)

目录 前言 XML基础知识 XML用途 XML内容 XML格式要求 XML格式校验 不同语言支持的协议 完整的XML内容 什么是XXE 案列演示 盲打-DNSLog XXE 防御 前言 现在许多不同的客户端技术都可以使用XMl向业务应用程序发送消息&#xff0c;为了使应用程序使用自定义的XML消…

高压放大器在介电泳分选的应用

实验名称&#xff1a;基于高压放大器的介电泳分选 研究方向&#xff1a;滴液分选 测试原理&#xff1a; 在非均匀电场中&#xff0c;介电体表面感生出的正负电荷处于不同场强的位置上在它受到的合力大于一定值时就会被拉向强电场方向。 测试设备&#xff1a;ATA-7030高压放大器…

类与对象(下)

类与对象构造函数构造函数体赋值初始化列表explicit关键字static成员概念特性友元友元函数友元类内部类匿名对象拷贝对象时的一些编译器优化构造函数 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值 clas…

勃仔诞生记:Hubbleverse哈勃元宇宙的起源故事

欢迎来到Hubbleverse &#x1f30d; 关注我们 关注宇宙新鲜事 &#x1f4cc; 预计阅读时长&#xff1a;9分钟 本文仅代表作者个人观点&#xff0c;不代表平台意见&#xff0c;不构成投资建议。 想象一个属于你的世界&#xff0c;一个资源丰富的世界&#xff0c;你可以在其中…

Android TV刷机Mstar篇——以乐视超4-X50Pro为例

家里这台乐视使用好几年了&#xff0c;最近闲来无事&#xff0c;就琢磨着刷一刷&#xff0c;打造一个纯净使用体验。 记录下刷机历程&#xff0c;方便后期再查看。 一、准备工作 1、下载刷机固件&#xff0c;这里使用了ZNDS大神出的包。 超4X43 Pro/超4X50 Pro通用流畅精简…

pytorch应用(入门1)

目录学习用具张量的定义和运算Variable&#xff08;变量&#xff09;Dataset数据集之前一直是拿一个个项目来学pytorch&#xff0c;感觉不是很系统&#xff0c;借着假期的机会系统学一下。预计先把入门的知识一周学完吧。 学习用具 《深度学习入门之Pytorch》廖星宇 在Z-lib…

数字孪生流域建设及其应用

2021年底水利部召开推进数字孪生流域建设工作会议&#xff0c;会议按照“需求至上、应用至上、数字赋能、提升能力”要求&#xff0c;以数字化、网络化、智能化为主线&#xff0c;以数字化场景、智慧化模拟、精准化决策为路径&#xff0c;以算据、算法、算力建设为支撑&#xf…

美国服务器安全吗?如何进行安全检测和使用?

对服务器安全检测是保证稳定运行的一种方式&#xff0c;尤其面向海外的一些用户&#xff0c;因为使用的服务器无法时刻检查&#xff0c;对安全系数要求又很高。因此&#xff0c;在租用前和使用时进行安全检测是十分有必要的。那么&#xff0c;美国服务器怎么进行安全检测呢? 一…

为深度学习选择最好的GPU

在进行机器学习项目时&#xff0c;特别是在处理深度学习和神经网络时&#xff0c;最好使用GPU而不是CPU来处理&#xff0c;因为在神经网络方面&#xff0c;即使是一个非常基本的GPU也会胜过CPU。 但是你应该买哪种GPU呢?本文将总结需要考虑的相关因素&#xff0c;以便可以根据…

直播倒计时1天!“基于AIOps的全面可观测性网络研讨会”与你不见不散

当企业云化不断加速&#xff0c;应对重复冗杂的运维活动&#xff0c;引入智能算法的AIOps已成发展趋势&#xff1a; 高效定位故障来源&#xff0c;保证数字业务稳定可靠运行&#xff0c;深挖数据价值促进企业创新……AIOps能做的还有很多。 想了解更多关于AIOps的相关内容&am…

Spring注册Bean系列--方法4:@Import+ImportSelector接口

原文网址&#xff1a;Spring注册Bean系列--方法4&#xff1a;ImportImportSelector接口_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法&#xff1a;ImportImportSelector接口。 注册Bean的方法我写了一个系列&#xff0c;见&#xff1a;Spring注册Bean(提供Be…