Ansys Zemax | 如何模拟光学相干层析成像系统_nsdd操作数-程序员宅基地

技术标签: Ansys  光学软件  ANSYS  Zemax  zemax  

光学相干层析成像(OCT)系统是断层成像系统,它通过图像反射或散射出来的光来获取被测物体横截面或三维图像。本文讲述了光学相干层析成像(OCT)系统的设计,并探讨了如何使用OpticStudio进行相干模拟。(联系我们获取文章附件)

简介

光学相干层析成像(OCT)系统是断层成像系统,它通过图像反射或散射出来的光来获取被测物体横截面或三维图像。尽管光线在OCT中穿透的深度以毫米数量级计量,但OCT具有安全性和高分辨率的特征,使得OCT最典型应用于医学生物组织成像。

OCT的光学系统由迈克尔逊干涉仪构成,在参考镜与样品之间的反射光相干,这一现象表明了从样品不同位置深度反射或散射出来的光与参考镜的位置有关。

本文将介绍如何在OpticStudio中模拟商用的OCT。

系统模型

健康人眼的角膜和虹膜(A)以及视网膜组织(B)的横截面如下图所示。颜色深度的改变意味着反射光的强度改变,说明内部材料发生变化。

图片

一个典型的OCT系统如下图。光束被均匀地分成两束,分别进入参考臂与样品臂。其中一束光在体积样品中叠加,从而减小扫描面积。光源是宽带准直光源,宽带光源的选择意味着低相干性和高精度的深度定位,从而使参考镜与样品之间的反射光相干。

图片

深度扫描,也称为纵向扫描或a扫描,用于测量反射光的强度,作为反射光透过样品距离的函数。在OCT系统中的不同位置进行深度扫描,这一过程通常由参考镜完成,参考镜完成扫描后对比样品反射光的光程与样品、参考镜之间光路的光程差。

通过在X或Y方向上旋转扫描镜实现横向、纵向或b扫描,使探测光在样品区域上平移。

我们将从商用OCT系统中获得设计规格。轴向分辨率由光源特性(相干长度)决定,大约为5 μm。横向分辨率由光束聚焦在样品处的光斑大小决定,设置为15 μm。选用800 nm范围内的光以防止光在生物组织中被吸收,影响光穿透力。

光源规格

OCT将干涉测量法与宽带近红外光结合使用。宽带光源具有最佳的分辨率,而波长决定了光在样品材料中的穿透深度。本例中,我们将使用中心波长为840 nm、FWHM为60 nm的光源,轴向分辨率为5μm:

图片

本例超发光二极管的光谱特性也可以从商用超发光二极管中获取。在超发光二极管发光过程,选用用于生物成像的常用波长和具有高分辨率的宽带光源。我们将忽略用于光线准直的光学器件,并从光线进入干涉仪开始建模。

OpticStudio有两种方式来定义宽带光源,第一种方式为在适当范围内,定义多个系统波长;第二种方式将相干长度作为光源属性定义。相干是OCT系统的必要特征,因此我们将使用“将相干长度作为光源属性定义”的方法,并允许OpticStudio通过以下方式进行带宽计算和采样:

图片

表面设置如下图所示:

图片

创建系统基本结构

为了将相干系统模拟出来,并且一次能追迹多条光线,我们将使用OpticStudio非序列模型建模。在这一环节中,我们必须进行光线追迹,同时为了解迈克尔逊干涉仪里所有反射与透射光的光路,需要勾选“Split NSC Rays”。

图片

图片

OCT的测试原理:使用宽带低相干性的光源,通过迈克尔逊干涉仪产生干涉信号,并通过干涉信号去计算样品内反射光的具体位置。我们将运用自由空间光学来摆放相关器件,使用分束器将光线分束,参考镜放置在参考臂的位置上,样品模型放置在样品臂的位置上。系统数据以及相关参数定义如下方的非序列元件编辑器所示。

图片

通过OpticStuido创建两个分束器,分别为物体2与物体3,物体类型为“多边形物体”,它们是由45°的棱镜组成。在物体属性选项中选择数据文件“Prism45.pob”。

图片

为了将分束器模拟出来,两个棱镜需要在分光面(斜面)镀上透过率为50%的膜层。在OpticStudio按照如下的设置定义膜层Coating_I.50,其中数字代表光透过表面的百分比。

图片

另外,我们必须防止分束器的棱镜移动,这会导致两个棱镜间的空气间隙改变或分光面发生偏移,从而导致分束器将光线分束的结果不准确。为了保证两个棱镜边缘对齐,物体3需要将物体2设置为参考物体,这一设置定义了所有相对于物体2所改变的位置参数,使得对物体2的任何改变都将关联到物体3。

为了防止分束器与光源堆叠,分束器和光源之间在Z轴方向有一定的距离。分束器的两个棱镜的材料选用玻璃N-BK7,设置调整棱镜尺寸的缩放因子为正数,默认值为2mm。通过参考第一个棱镜,就能在Z轴方向上定义第二个棱镜位置(将棱镜按宽度分开,是缩放因子的2倍),倾斜X(180°)。

图片

定义样品臂

当光线分束后,其中一束光的传输路径必须经过扫描镜、聚焦透镜与样品。本例中,我们将Z方向的光路定义为参考臂,Y方向的光路定义为样品臂。物体4(反射镜)的物体类型为矩形,材料为“MIRROR”,进行横向扫描。反射镜的位置坐标(0,20,20),使反射镜略高于分束器的中心,倾斜X(45°)为横向扫描的起点,改变倾斜角并进行扫描。X和Y的半宽应该足够大才能去获取整体光束,此处X,Y的半宽值都设置为7.5 mm。

图片

物体5是一个聚焦透镜,因为样品处的光斑大小决定了横向分辨率。本例从有效焦距为50 mm的一个简单的平凸透镜开始,并通过优化来找到最佳聚焦点。将聚焦透镜(平凸透镜)的物体类型设置为“Standard Lens”(标准透镜)。聚焦透镜的坐标(0,20,40),使聚焦透镜与扫描镜保持水平,并保持20mm的距离(该距离在两者的水平位置距离中是任意的),聚焦透镜的材料为N-BK7。参数1到参数9定义了聚焦透镜的光焦度,半径值为25mm,对于球面镜而言,圆锥系数1和圆锥系数2都为0,净孔径1、2与边缘孔径1、2设置为10mm,厚度设置为5mm,对于本例的聚焦透镜的后表面为平面,在非序列模式下,半径2为0。

物体6为样品,我们将从一个简单的反射面模型开始,在反射面上可能会产生相干反射。将反射面的物体类型设置为矩形探测器,材料为MIRROR,光在反射面上反射,我们将观察到样品处的光线。样品应与聚焦透镜对齐,距离约为50mm(聚焦透镜的的最佳焦点将通过优化找到)。光斑大小约为15μm,半宽为0.05mm、X和Y的像素数为100将使我们能够分辨出光斑。

参考臂

该部分只需要一个平面参考镜,即物体7,它可以在Z方向上调整位置以改变光程差(深度扫描)。物体7的物体类型为矩形探测器,材料为MIRROR,它的位置应与光源和分束器的位置对齐。在“物体7上的Z位置求解”求解类型为拾取,样品对于样品臂y方向偏移20mm。根据系统找到光程差为0的位置。X,Y半宽为7.5mm,X,Y像元数为100,为系统提供了足够的探测能力。

图片

输出集合

当表面类型为反射面时,非序列模式下系统将自动追迹从样品、参考镜反射到分束器的光线。这是非序列模式相对于序列模式的主要优势,对于序列模式,需要手动定义才能进行指定光线追迹。

需要一个发散透镜来观察迈克尔逊干涉条纹。物体8的物体类型为“Standard Lens”(标准透镜),材料为N-BK7,坐标(0,-20,20),收集光线(回到分束器的光线,在分束器下方) 。除半径1为-20 mm和厚度为1 mm外,发散透镜参数设置与聚焦透镜参数设置一致。

图片

物体9在发散透镜的下方,物体类型为矩形探测器,坐标为(0,-30,20),倾斜X(90°)使表面与光线传输方向正交。X、Y半宽为7mm,X、Y像元数为 100。通过输入以上参数,可以对系统进行模拟。

优化

主要针对样品的光斑尺寸进行优化。评价函数需要输入两个相关的初始操作数:NSDD,设置为0,清除探测器之前的所有参数数据;NSTR,设置为1,描述光线追迹。优化光斑尺寸的操作数为NSDD,根据结果来确定像素# (均方根半径为Pix#=-9);为了找到最佳焦点,目标值设置为0,而权重应该为非0。为了确保光线能到达探测器,必须再定义一个操作数,当没有光线通过探测器时,光斑尺寸将为0,即定义操作数NSDD像素#=-3,权重为0,从而结合定义一个具有目标的操作数(OPGT),以确保光线能达到探测器。

图片

为了找到最佳的光斑大小,将聚焦透镜参数(半径与厚度)、探测器的位置设置为变量。优化后的均方根半径为10μm。焦距没有显著变化,大约为48.8mm,样品在Z轴方向上移动到90.113mm。下面显示的是优化前(左)和优化后(右)的光斑大小。

图片

OCT模拟

时域

深度扫描基于相干门和扫描镜位置,只有当光程差在相干长度内,在样品与参考镜这两条路径的光才会产生干涉信号。这就是我们使用低相干宽带光源的原因,因为短相干长度可以让我们能准确地预测样品中干涉信号来源的位置。通过反射光的强度逐个像素地重新创建样品的图像,相干门仅用作识别样品内反射光的位置。

我们以相干长度为20mm开始模拟,因为这给了我们一个更大的误差范围,以便找到正确的反射光位置,当找到大致位置后就能缩短光源的相干长度。

此外,我们将使用单个表面来代表样品。类似于样品中次光源发光,意味着参考镜将只改变光路长度。为了确保光程差在相干长度内,在调整参考镜位置时,观察样品内反射点的位置变化。

通过使用探测器查看器中的“Coherent Irradiance”(相干辐照度)来分析这两条光路之间的干涉信号强度。这一步操作可在探测器查看器的“设置”中完成,之前的探测器查看器曾使用非相干辐照度。在之后的光线追迹将追踪每条光线的相位,以便分别添加用于相干计算的复数部分。

图片

当大量光线进入系统时,可清楚地辨别干涉条纹。对于20mm的相干长度,我们至少需要几百万条光线,第一个示例使用了1500万条光线;更短的相干长度需要更多的光线。样品在Z轴方向上的位置为90.113mm,通过光线追迹发现干涉只发生在小于参考镜位置125.113mm的范围内。已知相干长度为20mm,相干长度参考上限应与下限相差10mm。在本例中,我们可以看到干涉条纹在参考镜位置115.113之外消失。将参考镜放置在这些极限值之间会生成亮条纹。下面几张图显示的是中心和极限位置下的的光线追迹干涉结果图。

图片

我们将在近似极限之间的中点处找到光程差为零(OPD=0)的位置,即121.113 mm。随着相干门内的参考镜位置范围的减小,缩短相干长度直到光斑大小为12μm,当在反射点位置时便会逐渐提高测试精度。下面显示的是焦距为5mm时的干涉图,需要8000万条光线才能看到干涉条纹。

图片

扫描光源

当前系统可以通过傅立叶变换进行计算。光谱仪或扫描光源的波长可用于观察光程差对调制光谱的影响。若系统选用光谱仪,则需要在系统中增加设计工作,而扫描光源可以通过简单地更改光源参数来模拟。将相干长度设置为0并定义单色光波长,我们可以在相同的范围内扫描窄带光源。作为波长的调制函数,我们将观察到相干辐照度的峰辐照度值,且振荡周期与样品内参考镜和反射点之间的光程差有关。将样品创建为单个表面,我们将只看到一个调制频率,体积样品叠加在每个反射点的位置。对信号进行傅立叶变换,作为位置的函数,并对信号进行线性扫描,该函数中的最大值对应于样品中的强反射点。

扫描光源(SS-OCT)使用一个固定的参考镜,光谱输出的调制程度决定光程差。对于我们的样品表面,意味着在一个参考位置上进行波长扫描时,得到的信息只包含一个光程差。对于体积样品,样品中的每个次光源发光都会对带来光程差。如前面所述,使用单个表面代表样品,以便我们使用一个光程差检测光谱振荡而不是使用样品中次光源发出的光所对应的多个光程差来进行检测,并且为了获得高分辨率,我们需要使用小波长步长。

为了在OpticStudio中观察这一影响,我们将参考镜放在小光程差的位置(在Z轴方向上的位置为124.113mm),并通过调整波长大小来观察振荡。使用更大的光程差(参考镜在Z轴125.113 mm位置处),将导致更快的振荡。下面几幅图显示光程差大约为2mm时相干功率的变化图。

图片

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ueotek/article/details/132666667

智能推荐

Linux驱动开发: USB驱动开发_linux usb 通信从设备开发-程序员宅基地

文章浏览阅读7k次,点赞86次,收藏192次。一、USB简介1.1 什么是USB? USB是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,USB就是简写,中文叫通用串行总线。最早出现在1995年,伴随着奔腾机发展而来。自微软在Windows 98中加入对USB接口的支持后,USB接口才推广开来,USB设备也日渐增多,如数码相机、摄像头、扫描仪、游戏杆、打印机、键盘、鼠标等等,其中应用最广的就是摄像头和U盘了。 USB包括老旧的USB 1.1标准..._linux usb 通信从设备开发

Qt知识点梳理 —— 代码实现菜单栏工具栏-程序员宅基地

文章浏览阅读379次,点赞5次,收藏9次。在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!家准备了最新的互联网大厂资料。[外链图片转存中…(img-VMQDYeXz-1712056340129)][外链图片转存中…(img-JqBcGpUE-1712056340130)][外链图片转存中…(img-7Rrt8dF9-1712056340130)]

《设计模式入门》 9.代理模式_cglib需要引入第三方包-程序员宅基地

文章浏览阅读448次。代理模式可以说是我们在java学习中非常常见的一个设计模式了,在很多地方我们都可以看到代理模式的影子。比如:Spring 的 Proxy 模式(AOP编程 )AOP的底层机制就是动态代理 mybatis中执行sql时mybatis会为mapper接口通过jdk动态代理的方法生成接口的实现类 Feign对于加了@FeignClient 注解的类会在Feign启动时,为其创建一个本地JDK Proxy代理实例,并注册到Spring IOC容器可以看出,代理模式就是给..._cglib需要引入第三方包

前端开发:JS中向对象中添加对象的方法_一个对象如何添加另一个对象-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏6次。在前端开发过程中,一切皆对象,尤其是在数据处理的时候,大部分时候也是处理对象相关的数据,所以对象在JS中是很重要的一个内容,也是必用的内容。本篇博文来分享一下关于在JS中对象里面添加对象的操作,虽然知识点不难,但是常用,所以总结一下存起来,方便查阅使用。通过本文的介绍,关于在JS中对象里面添加对象的操作就得心应手了,虽然该知识点不难但是重要和常用,尤其是对于刚接触前端开发不久的开发者来说更是如此,所以绝对掌握该知识点还是很有必要的,重要性不再赘述。欢迎关注,共同进步。_一个对象如何添加另一个对象

迁移学习在自然语言生成中的研究-程序员宅基地

文章浏览阅读257次,点赞3次,收藏8次。1.背景介绍自然语言生成(Natural Language Generation, NLG)是一种将计算机理解的结构化信息转换为自然语言文本的技术。自然语言生成可以用于多种应用,如机器翻译、文本摘要、对话系统等。随着深度学习技术的发展,自然语言生成的表现力得到了显著提高。迁移学习(Transfer Learning)是一种机器学习技术,它可以将在一个任务上学到的知识应用于另一个相关任务。在...

随便推点

SpringBoot引入第三方jar包或本地jar包的处理方式_springboot idea 直接启动 target 第三方 jar 包-程序员宅基地

文章浏览阅读262次。在开发过程中有时会用到maven仓库里没有的jar包或者本地的jar包,这时没办法通过pom直接引入,那么该怎么解决呢一般有两种方法第一种是将本地jar包安装在本地maven库 第二种是将本地jar包放入项目目录中这篇文章主要讲第二种方式,这又分两种情况,一种是打包jar包,第二种是打包war包jar包 先看看jar包的结构 用压缩工具打开一个jar包 打包后jar包的路径在BOOT-INF\lib目录下 ..._springboot idea 直接启动 target 第三方 jar 包

软件压力测试图片60张,Win10 64位用鲁大师界面cpu温度60上下,显卡40多。用压力测试7-8分钟cpu75左右,...-程序员宅基地

文章浏览阅读1.4k次。CPU正常情况下45-65℃或更低,夏天或者玩游戏时,温度会高点,不超过80都属于正常温度。高于80℃时,需要采取措施:要检查CPU和风扇间的散热硅脂是否失效;更换CPU风扇;给风扇除尘;在通风或者空调间中使用机器。显卡温度:显卡一般是整个机箱里温度最高的硬件,常规下50-70℃(或更低),运行大型3D游戏或播放高清视频的时候,温度可达到100℃左右,一般高负载下不超过110℃均视为正常范畴。如有..._windows cpu gpu 压测

Mac系统制作U盘安装盘,不能识别U盘的情况_making disk bootable不动-程序员宅基地

文章浏览阅读2.3w次,点赞2次,收藏5次。遇到的问题:OS10.12系统,使用Mac系统自带的磁盘工具,通过恢复来制作的U盘安装盘,开机按住option键,没有U盘的这个选项。原因:使用磁盘工具恢复,没有创建启动文件,使用命令行能创建。U盘抹掉,分区名为1。sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstal_making disk bootable不动

LOJ6089 小Y的背包计数问题 背包、根号分治-程序员宅基地

文章浏览阅读129次。题目传送门题意:给出$N$表示背包容量,且会给出$N$种物品,第$i$个物品大小为$i$,数量也为$i$,求装满这个背包的方案数,对$23333333$取模。$N \leq 10^5$$23333333=17 \times 1372549$竟然不是质数性质太不优秀了(雾直接跑背包$O(N^2)$,于是咱们考虑挖掘性质、分开计算发现当$i < \sqrt{N}$时就是一个多..._背包 根号

验证码-程序员宅基地

文章浏览阅读110次。用.net实现网站验证码功能 收藏 一、验证码简介验证码功能一般是用于防止批量注册的,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或字母或符号或文字,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。常见的验证码有如下几种: 1、纯..._验证码的样本标签,是5个字符,每个字符的可能 取值范围是'0'~'9'、'a'~'z'共36

ImportError: undefined symbol: cudaSetupArgument_undefinded symbol: cudasetupargument-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏3次。ImportError: undefined symbol: cudaSetupArgumentubuntu16.04How to solve?Step1.pip install -U torchvision==0.4.0链接: link.Step2.Problem:ImportError: cannot import name ‘PILLOW_VERSION’ from ‘PI..._undefinded symbol: cudasetupargument