用于模拟和分析显微镜点扩散函数 (PSF) 的 python 库
项目描述
pyotf
一个模拟软件包,用于对用 python 编写的光学显微镜的光学传递函数 (OTF)/点扩散函数 (PSF) 进行建模。
介绍
这个包的大部分文档都包含在源代码中,应该在任何交互式会话中都可用。本文档的目的是快速概述软件包的功能和潜在用途。大部分代码在设计时都考虑到了交互式会话,但它仍应可用于更大的脚本和程序。
安装
conda
使用or安装最简单pip
:
conda install -c david-hoffman pyotf
pip install pyotf
成分
该软件包由四个组件模块组成:
otf.py
其中包含用于生成不同类型的 OTF 和 PSF 的类phase_retrieval.py
它包含执行光学系统后孔径的迭代相位检索的函数和类zernike.py
其中包含计算Zernike 多项式的函数utils.py
其中包含整个包中使用的各种实用程序功能。
otf.py
该模块中有两种型号的光学成像系统,一种由Hanser 等人描述,另一种由Arnison 和 Sheppard描述。事实上,它们在数学上是等价的,但在实践中,它们各有优缺点。一个很大的好处HanserPSF
是它允许计算 PSF 的选定 z 平面。但是,如果选择的 z 平面不是等间距的,则从模型计算的场 OTF ( OTFa
) 和强度 OTF ( OTFi
) 将没有物理意义。
SheppardPSF
和都HanserPSF
具有相同的界面。在实例化它们时,用户必须提供一组模型参数。要完整描述物镜的 PSF 或 OTF,假设没有像差,我们通常需要几个参数:
- 工作波长(假设为单色光)
- 物镜的数值孔径
- 介质的折射率
对于数值计算,我们还想知道 x/y 分辨率和点数。注意,假设z是物镜的光轴。
相位检索.py
可以在文件末尾找到如何使用这些功能的示例:
# phase retrieve a pupil
from pathlib import Path
import time
import warnings
import tifffile as tif
from .utils import prep_data_for_PR
# read in data from fixtures
with warnings.catch_warnings():
warnings.simplefilter("ignore")
data = tif.imread(
str(
Path(__file__).parent.parent / "fixtures/psf_wl520nm_z300nm_x130nm_na0.85_n1.0.tif"
)
)
# prep data
data_prepped = prep_data_for_PR(data, 256, 1.1)
# set up model params
params = dict(wl=520, na=0.85, ni=1.0, res=130, zres=300)
# retrieve the phase
pr_start = time.time()
print("Starting phase retrieval ... ", end="", flush=True)
pr_result = retrieve_phase(data_prepped, params, 100, 1e-4, 1e-4)
pr_time = time.time() - pr_start
print(f"{pr_time:.1f} seconds were required to retrieve the pupil function")
# plot
pr_result.plot()
pr_result.plot_convergence()
# fit to zernikes
zd_start = time.time()
print("Starting zernike decomposition ... ", end="", flush=True)
pr_result.fit_to_zernikes(120)
pr_result.zd_result.plot()
zd_time = time.time() - zd_start
print(f"{zd_time:.1f} seconds were required to fit 120 Zernikes")
# plot
pr_result.zd_result.plot_named_coefs()
pr_result.zd_result.plot_coefs()
# show
plt.show()
下面是从该仪器记录的 PSF 中检索到的瞳孔函数的相位和幅度图。为了生成这个图,我们只需调用对象的plot
方法PhaseRetrievalResult
(在这种情况下pr_result
)。
在这里,相位和幅度已经拟合到 120 个 zernike 多项式。为了生成这个图,我们只需调用对象的plot
方法ZernikeDecomposition
(在这种情况下pr_result.zd_result
)。
我们可以通过调用来绘制前 15 个命名相位系数的大小pr_result.zd_result.plot_named_coefs()
。
注意:如果只需要相位,例如自适应光学校正,那么估计背景的大多数常规方法就足够了,您可以使用phase_only
关键字。但是,如果您想正确地为您的 PSF 建模以进行反卷积,那么您应该知道幅度估计对在运行算法之前应用于数据的背景校正非常敏感,并且应该尝试多种背景方法/参数。
泽尼克.py
Zernike 多项式是在单位圆上定义的正交函数。任何定义在单位圆盘上的函数都是正交的,都具有唯一的分解为 Zernike 多项式。在这个包中,Zernike 多项式用于量化光学系统检索到的后瞳的相位和幅度的像差。为此,可以调用 object 的fit_to_zernikes
方法,该方法PhaseRetrievalResult
将指定数量的 Zernike 模式拟合到后瞳孔检索到的相位和幅度,每个独立,并返回一个ZernikeDecomposition
对象。为方便起见,返回的 也保存为调用该方法的ZernikeDecomposition
对象的属性PhaseRetreivalResult
。对象具有绘图方法,以便用户可以检查分解。fit_to_zernikes
ZernikeDecomposition
ZernikeDecomposition
物体还具有重建相位、幅度或完整复数瞳孔的方法,这些方法可以被反馈HanserPSF
到生成畸变但无噪声的 PSF。执行此操作的方法目前只是PhaseRetreivalResult
该类的成员,但稍后可能会移至ZernikeDecomposition
该类。
实用程序.py
的大部分内容对utils
普通用户没有用处,保存一个功能:prep_data_for_PR(data, xysize=None, multiplier=1.5)
. prep_data_for_PR
顾名思义,可以使用该模块的retrieve_phase
功能快速准备PSF图像数据以进行相位检索。phase_retrieval
LabVIEW API
在 LabVIEW (>2018) 中输入 3D 堆栈并运行此 python 函数的示例在\labview\Test Phase Retrieval.vi
参考
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。