Skip to main content

用于模拟和分析显微镜点扩散函数 (PSF) 的 python 库

项目描述

PyPI 版本 PyPI 下载 蟒蛇版 康达徽章 代码风格:黑色 词 创建发布

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

HanserPSF 和 SheppardPSF 输出的比较

该模块中有两种型号的光学成像系统,一种由Hanser 等人描述,另一种由Arnison 和 Sheppard描述。事实上,它们在数学上是等价的,但在实践中,它们各有优缺点。一个很大的好处HanserPSF是它允许计算 PSF 的选定 z 平面。但是,如果选择的 z 平面不是等间距的,则从模型计算的场 OTF ( OTFa) 和强度 OTF ( OTFi) 将没有物理意义。

SheppardPSF和都HanserPSF具有相同的界面。在实例化它们时,用户必须提供一组模型参数。要完整描述物镜的 PSF 或 OTF,假设没有像差,我们通常需要几个参数:

  • 工作波长(假设为单色光)
  • 物镜的数值孔径
  • 介质的折射率

对于数值计算,我们还想知道 x/y 分辨率和点数。注意,假设z是物镜的光轴。

相位检索.py

Hanser 等人描述了此模块中实现的相位检索算法。_

可以在文件末尾找到如何使用这些功能的示例:

    # 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

绘制在单位圆盘上的前 15 个 zernike 多项式

对应的像差

Zernike 多项式是在单位圆上定义的正交函数。任何定义在单位圆盘上的函数都是正交的,都具有唯一的分解为 Zernike 多项式。在这个包中,Zernike 多项式用于量化光学系统检索到的后瞳的相位和幅度的像差。为此,可以调用 object 的fit_to_zernikes方法,该方法PhaseRetrievalResult将指定数量的 Zernike 模式拟合到后瞳孔检索到的相位和幅度,每个独立,并返回一个ZernikeDecomposition对象。为方便起见,返回的 也保存为调用该方法的ZernikeDecomposition对象的属性PhaseRetreivalResult。对象具有绘图方法,以便用户可以检查分解。fit_to_zernikesZernikeDecompositionZernikeDecomposition物体还具有重建相位、幅度或完整复数瞳孔的方法,这些方法可以被反馈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

参考

  1. 汉瑟,BM;古斯塔夫松,MGL;阿加德,DA;Sedat, JW Phase Retrieval for High-Numerical-Aperture Optical Systems.Optics Letters 2003, 28 (10), 801。

  2. 阿尼森先生;Sheppard, CJR 适用于任意瞳孔函数的 3D 矢量光学传递函数。光学通讯 2002, 211 (1-6), 53-63。

  3. 汉瑟,BM;古斯塔夫松,MGL;阿加德,DA;Sedat,JW 广域荧光显微镜中的相位检索瞳孔功能。显微镜杂志 2004, 216 (1), 32–48。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyotf-0.0.3.tar.gz (53.6 kB 查看哈希

已上传 source

内置分布

pyotf-0.0.3-py3-none-any.whl (39.2 kB 查看哈希

已上传 py3