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

智能推荐

从零开始构建一个电影知识图谱,实现KBQA智能问答[上篇]:本体建模、RDF、D2RQ、SPARQL endpoint与两种交互方式详细教学_rdb2rdf-程序员宅基地

文章浏览阅读522次。从零开始构建一个电影知识图谱,实现KBQA智能问答[上篇]:本体建模、RDF、D2RQ、SPARQL endpoint与两种交互方式详细教学_rdb2rdf

Linux 防火墙开放特定端口 (iptables)_防火墙放开指定端口 linux iptables-程序员宅基地

文章浏览阅读831次。iptables是linux下的防火墙,同时也是服务名称。service iptables status 查看防火墙状态service iptables start 开启防火墙service iptables stop 关闭防火墙service iptables restart _防火墙放开指定端口 linux iptables

python 实现输入一个小于1000的整数,对其进行因式分解_编写程序,用户从键盘输入小于1000的整数,对其进行因式分解-程序员宅基地

文章浏览阅读1.1w次,点赞10次,收藏50次。编写程序,用户从键盘输入一个小于1000的整数,对其进行因式分解。例如:10=2 X 5 ; 60 = 2 X 2 X 2 X 3 X 5实现这个小程序,主要使用到的思想就是一个简单的递归思想。用户输入一个整数,接收整数,之后把整数传入到递归函数中,使用递归函数计算出该整数的所有最简因式。def index(n): global list1 for i in range(2, n+1): if n % i == 0: # 找出n中最小的因式 _编写程序,用户从键盘输入小于1000的整数,对其进行因式分解

websocket和uni-app里使用websocket_uniapp websocket-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏5次。socket:插座;套接字 ​ 网络上的两个程序通过一个双向(全双工)的通信连接实现数据的交换,这个连接的一端称为一个socket。就像用座机打电话,给两个座机都插上电话线,就可以打电话,即语音信息的交流。属性描述readyState只读属性 readyState 表示连接状态,可以是以下值:0 - 表示连接尚未建立。1 - 表示连接已建立,可以进行通信。2 - 表示连接正在进行关闭。3 - 表示连接已经关闭或者连接不能打开。_uniapp websocket

SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析)-程序员宅基地

文章浏览阅读96次。前言上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握。通过本篇可以了解我们平常所写的T-SQL语句,在SQL Server数据库系统中是如何分解执行的,数据结果如何通过各个运算符组织形成的。技术准备基于SQL Server2008R2版本,利用微软的一个更简洁的案例库(Northwind)进行解析...

渗透测试实例:Metasploitable3靶机-程序员宅基地

文章浏览阅读3.8k次,点赞5次,收藏26次。实验环境:Kali虚拟机一台、4G运行,Metasploitable3靶机一台,IP地址192.168.22.20实验目的:对Metasploitable3靶机进行渗透测试实验步骤:(一),对靶机进行扫描1,使用Neuss对靶机进行扫描_metasploitable3

随便推点

一键关闭win10防火墙拦截更新等小工具-程序员宅基地

文章浏览阅读5.8k次。简介:秒关闭win10防火墙拦截更新清爽简单的一款小工具,可以帮助你一键关闭Windows以及烦人的系统自动更新,WIN10防火墙自动删除软件网盘下载地址:http://www.bytepan.com/AkejxHdvOCe_一键关闭win10防火墙拦截更新等小工具

PAT 乙级 1008 数组元素循环右移问题 (20分)(JAVA版,随遇C)_pat乙级1008java-程序员宅基地

文章浏览阅读147次。1008数组元素循环右移问题(20分)一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N−1​​)变换为(A​N−M​​⋯A​N−1​​A​0​​A​1​​⋯A​N−M−1​​)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔.._pat乙级1008java

linux kvm虚拟机img文件挂载到宿主机_kvm导入img镜像-程序员宅基地

文章浏览阅读1.5k次。在使用虚拟化的过程中,难免会遇到虚拟机异常导致无法启动等故障,这时候如何从虚拟机的img中将重要文件或数据拷贝出来显得尤为重要,今天介绍一下利用qemu-nbd的方式将img文件挂载到宿主机。需要注意的是,目前仅针对于img文件类型为qcow2的做过测试。1. 检测img文件的类型: file test.img test.img: Qemu Image, Format:_kvm导入img镜像

我的vim和emacs配置文件(2014-05-19更新)_vim/emacs cursor配置-程序员宅基地

文章浏览阅读6.7k次,点赞5次,收藏3次。vimrc:"cnsworder setcolorscheme ronsyntax onset nobackupset tabstop=4set softtabstop=4set shiftwidth=4set expandtabset autoindentset numberset laststatus=2source $VIMRUNTIME/ftplugin/m_vim/emacs cursor配置

Spark Streaming架构及工作原理_题spark streaming包含了丰富的组件,其中包括以下哪些选项astreamingconte-程序员宅基地

文章浏览阅读1.3k次。1、Spark Streaming有哪些组件?2、Micro-Batch Architecture如何理解?3、Spark Streaming工作原理是什么?4、如何进行DStream 操作?一、简介Spark Streaming 是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kafka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Red..._题spark streaming包含了丰富的组件,其中包括以下哪些选项astreamingcontextb

skywalking 自定义插件_skywalking自定义插件-程序员宅基地

文章浏览阅读3.1k次。环境基于skywalking-java开发,就是skywalking的java agent,这次在基础上开发一个自定义的插件。流程演示首先新建一个model修改pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc._skywalking自定义插件

推荐文章

热门文章

相关标签