The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography

ASTRA工具箱:电子断层扫描高级算法开发平台

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第1张图片

论文链接:http://dx.doi.org/10.1016/j.ultramic.2015.05.002

项目链接:https://astra-toolbox.com/index.html

Abstract

我们提出ASTRA工具箱作为一个开放的平台,用于断层扫描中的三维图像重建。目前在电子断层扫描中使用的大多数软件工具在获取模型的几何参数和用于重建的算法方面提供有限的灵活性。ASTRA工具箱提供了一套广泛的快速灵活的构建模块,可用于开发高级重建算法,有效地消除了这些限制。我们通过一系列基于实验双轴倾斜序列的实验证明了这种灵活性,由此产生的重建质量和该工具箱的计算效率。

1. Introduction

近年来,电子断层扫描已被证明是一种强大的纳米材料三维结构成像技术。从一系列(S)TEM图像中计算电子显微镜样品内部图像的能力已经成为材料建模,模拟和合成的催化剂。在电子断层扫描中,微观样品的三维图像是从一系列投影图像(所谓的倾斜系列)中计算出来的,这些图像沿着倾斜角度的范围获得。首先对图像序列进行对齐,以纠正采集过程中的几何畸变,例如样本漂移,然后通过层析成像重建算法进行处理。加权反向投影(Weighted Backprojection, WBP)和同步迭代重建技术(Simultaneous Iterative Reconstruction Technique, SIRT)[1]是用于该重建任务的最常用算法。

电子断层扫描可用于重建各种电子显微镜技术的三维图像,包括亮场透射电子显微镜(BF-TEM)[2]、环形暗场扫描电子显微镜(ADF-STEM)[3-6]和能量滤波电子显微镜(EF-TEM)[7,8]。主要要求是获得的投影图像单调地依赖于采样的某些物理性质,沿一组平行线进行积分。

大多数电子断层扫描用户不直接处理重建算法。相反,这些方法是在软件包中实现的,该软件包为用户提供了设置某些重建参数的界面,同时在内部执行计算。存在一系列用于电子断层扫描重建的软件包,每个软件包都有自己的优点和缺点,以及自己的用户基础。一些显微镜供应商随显微镜提供软件包,如FEI的Inspect3D软件、Gatan公司的Digital Micrograph软件和日立断层扫描插件[9]。在学术界,已经开发了几个免费软件包,包括IMOD [10,11], EFTET-J [7], Protomo [12], UCSF断层扫描[13,14],TomoJ [15], TOM工具箱[16]和TxBR[17]。

使用已建立的软件包进行电子断层扫描的主要优点是软件经过验证的跟踪记录所隐含的可靠性以及这些软件包可以提供的用户友好性。另一方面,实现的重构工具通常只向软件用户提供有限的灵活性。在这里,我们提到了三个这样的限制:(i)可使用的重建算法集是有限的,通常只提供一种或两种替代方案(例如,WBP和SIRT);(ii)软件假定实验采用固定的几何设置(例如,单轴倾斜,或双轴倾斜,两个系列之间的角度为90°),没有改变实验的灵活性;(iii)实现的算法的计算效率有时有限,需要很长时间来重建大型数据集。

对于电子断层扫描的常规用户,已建立的软件包提供的功能通常是足够的。然而,对于技术开发人员来说,无论是在实验方面还是在算法方面,使用固定软件包所施加的限制可能会成为实验新概念和想法的障碍。目前,还没有软件平台适合开发能够处理各种几何形状和约束的先进、高效算法。

All Scale Tomographic Reconstruction Antwerp (ASTRA)工具箱是由比利时安特卫普大学和荷兰阿姆斯特丹的Centrum Wiskunde Informatica (CWI)开发的软件平台,旨在解决对层析成像算法快速、灵活开发平台的需求[18,19]。它提供了一组构建块,可以有效地处理各种几何设置并合并各种约束。该工具箱可通过MATLAB和Python访问,为算法原型设计提供了强大的平台,并在GPLv3许可下作为开源软件提供[20]。

由于其灵活性,ASTRA Toolbox适用于解决许多层析成像应用中的广泛计算问题,如医学CT、生物医学[21]或工业微型CT、同步加速器断层成像[22]和电子断层成像[23]。它为建模错位和多向倾斜系列提供了完整的3D灵活性,并允许我们在图形处理单元(gpu)上使用这种复杂的几何设置执行并行计算。通过在MATLAB和Python中集成,正则化重构算法(如total variation minimization (TV-min)[24])等高级数值代码可以直接应用于大型实验数据集。

在本文中,我们提供了ASTRA工具箱及其设计的概述。我们通过仅用几行MATLAB代码构建双倾斜几何的复杂重建算法来展示工具箱的灵活性。在实验双轴倾斜序列的基础上,通过一系列实验研究了重建质量和工具箱的计算效率。

2. Basic concepts and framework design

我们首先描述ASTRA工具箱的体系结构及其关键组件。在内部,该软件由三层组成(图1):(i)第一层,低级层提供有效实现的算法构建块,例如使用NVIDIA CUDA进行GPU加速的投影和反向投影算子。(ii)第二个中层C++层提供了一系列算法,例如利用这些构建块的重建算法。(iii)第三层,顶层为最终用户提供了这些算法和构建块的易于使用的界面。提供了两个选项:使用MATLAB MEX框架实现的MATLAB接口和Python接口。两者都提供相同的功能和设计理念,只是在语法上略有不同。在这项工作的其余部分中,我们将重点关注运行MATLAB脚本的用户所经历的概念结构。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第2张图片

使用工具箱涉及三个主要概念(图2):(i)投影和体素数据(第2.1节),(ii)实验设置的空间几何(第2.2节),以及(iii)对数据执行的算法(第2.3节)。

2.1. 投影和体素数据

数据对象用于在工具箱中存储投影或体素数据。 通常,输入的投影数据首先以双精度矩阵的形式加载到 MATLAB 环境中。但是,ASTRA算法要使用这些数据,必须能够从工具箱的较低层(CPU或GPU)访问这些数据。提供了简单的函数来将数据从接口复制到工具箱,并在系统内存中创建一个空数据集。一旦这样做了,每个数据对象都被一个唯一的标识符或处理程序引用,就像MATLAB中处理文件I/O的方式一样。稍后,用户可以使用此标识符在算法中使用数据或将数据从系统内存复制回MATLAB环境中。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第3张图片

2.2. 设置的空间几何

每个数据对象都链接到其相应的体素几何或投影几何,指定扫描系统的设置。体素几何描述对象所代表的像素或体素网格。这个体素的形状是一个以原点为中心的矩形或方框。投影几何形状描述了相对于体素几何形状的源和检测器设置。ASTRA工具箱支持不同类型的层析成像中使用的不同几何形状(平行、扇形束和锥形束)。对于电子断层扫描,平行光束投影几何是最相关的。在这种几何结构中,探测器和电子束的位置和方向可以在3D中完全指定,每个投影方向分别。

实际上,用于断层扫描的电子显微镜包含一个固定的源、检测器和一个倾斜的样品。然而,我们在样本保持静止的参照系中定义几何。这意味着我们定义了一个旋转源和一个检测器设置,而不是一个倾斜的样本,在静止的样本周围移动。一个三维平行光束投影几何可以看作是一系列的投影,每个投影由以下四个三维向量定义(同样参见图3):

  • 光束的方向 ( r x , r y , r z ) (r_x,r_y,r_z) (rx,ry,rz)
  • 探测平面的中心,由3D坐标 ( d x , d y , d z ) (d_x,d_y,d_ z) (dx,dy,dz)指定。对于平行光束几何,沿着光束方向移动(虚拟)探测器不会对计算产生任何影响,因为投影线在该方向上无限延伸(甚至在探测器后面)。因此,在这里给出的例子中,我们将探测器平面的中心置于所有投影的原点。
  • 探测平面的主轴(通常是水平和垂直的),指定为3D向量 ( v x , v y , v z ) (v_x,v_y,v_z) (vx,vy,vz) ( u x , u y , u z ) (u_x,u_y,u_z) (ux,uy,uz)。这些向量的长度对应于一个探测器像素的大小,它们的方向决定了探测器的三维方向。通过改变它们的长度,可以对大小不同的探测器像素进行建模。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第4张图片

通过这种方式指定投影几何,不仅可以对单轴采集方案进行建模,还可以对双轴甚至多轴采集方案进行建模。此外,不对准问题的结构来源,如探测器相对于电子束的倾斜,可以非常精确地建模,并纳入基于ASTRA工具箱基本结构的所有重建算法。例如,探测器位移可以以亚像素精度建模,而无需对测量数据进行插值。

自动校准记录的倾斜系列是一个非常困难的问题,更是如此,双轴倾斜系列。在[25]中,将对中校正视为对投影几何的所有参数在反映重建质量的某一目标函数(如投影差)上的优化过程。这种技术只有在灵活的投影几何形状可用时才有可能,例如在ASTRA工具箱中。

2.3. 算法

实际的计算在算法对象中实现。在撰写本文时,该工具箱为最流行的重建算法提供了有效的实现,如WBP (slice by slice)、SIRT和CGLS(一种解析等效于LSQR的Krylov子空间最小二乘同余梯度解算器)[26,27]。这些算法建立在基本的GPU加速投影和反向投影构建块上。通过将算法链接到正确的数据标识符并设置一些特定于算法的选项(例如,在SIRT重建中启用最小约束),可以在MATLAB接口中完成算法的配置。第3节将提供这方面的示例。重要的是要注意,投影(FP)和反投影(BP)构建块本身也可以从MATLAB接口中直接访问。这意味着用户可以很容易地开发新的层析算法或原型,其中很大一部分计算负担被卸载到更快的GPU卡上。第3.5节提供了一个示例。在GPU卡不可用的情况下,ASTRA工具箱还提供了这些构建块的OpenMP加速CPU实现,但仅用于2D数据集和逐片3D重建。

3. Concrete example: implementing an advanced method for dual-axis reconstruction

在本节中,我们将通过逐步构建高级重建算法来演示ASTRA工具箱的关键特性以及如何使用它们。首先,在3.1节中,我们将介绍一些用于描述这些高级迭代方法的符号。在3.2节中,我们描述了用ASTRA工具箱创建三维重建的常见工作流程。作为一个例子,我们演示了如何定义双轴采集几何,如何计算给定体素体积的投影,以及如何使用同步迭代重建技术(SIRT)创建重建。

随后,我们描述了如何通过相对较少的MATLAB代码行扩展此工作流,以包括更高级的重建方法。在第3.3节中,我们演示了最近提出的致密粒子分割方法[23],称为部分离散代数重建技术(PDART)算法,可以通过MATLAB中的某些图像处理操作,结合ASTRA工具箱中优化的层析重建步骤(投影和反投影)来实现。接下来,在第3.4节中,我们强调了这样一个事实,即重建体的体素大小可以独立于检测器像素大小进行选择,这提供了以低于感兴趣的中心区域的分辨率重建体积子集的能力,从而提高了性能。最后,在3.5节中,我们将讨论ASTRA构建块如何在第三方库和脚本中使用,例如在现有的总变异最小化(TVmin)脚本中。

3.1. 符号

n n n为体素总数,设 v ∈ R n v∈\mathbb{R}^n vRn为描述包含扫描样本的某个三维体素值的向量。假设有一个方形检测器, t 2 t^2 t2为单个投影中检测器的总数。 l l l为投影总数,则测量总数为 m = l t 2 m=lt^2 m=lt2 。设 p ∈ R m p∈\mathbb{R}^m pRm表示包含 v v v的所有倾斜级数测量值的向量。我们定义矩阵 W W W为投影矩阵,它是描述被扫描物体投影的线性算子:
W v = p . (1) Wv=p.\tag{1} Wv=p.(1)
矩阵 W W W描述投影数据 p p p如何依赖于图像体素 v v v,也就是说,它将体素几何映射到投影几何。 W W W与向量 v v v的乘法称为投影(FP), W T W^T WT与向量 p p p的乘法称为反投影(BP)。这两种操作在层析重建中都是至关重要的,因为它们几乎占用了所有迭代重建方法的计算时间。因此,这两种操作的有效实现是任何一套层析成像软件工具的关键。此外,投影和反向投影的精度可以对重建的精度产生决定性影响。因此, W W W的值必须精确地指定,并取决于扫描系统的几何形状。存在许多不同类型的投影几何形状:扇形束、锥形束、螺旋扫描等。在这项工作的其余部分,我们只考虑一个三维平行束几何,因为它是最常见的电子断层扫描应用。

重建算法以体几何和投影几何作为输入,然后用于从给定几何设置的测量 p p p计算重建图像 v v v。文献中存在许多这样的算法。本文主要考虑同步迭代重建技术(SIRT),这是一种迭代求解器,每次迭代的更新步长(k)为
v ( k + 1 ) = v ( k ) + C W T R ( p − W v ( k ) ) , (2) \mathbf{v}^{(k+1)}=\mathbf{v}^{(k)}+\mathbf{CW}^{T}\mathbf{R}(\mathbf{p}-\mathbf{W}\mathbf{v}^{(k)}), \tag{2} v(k+1)=v(k)+CWTR(pWv(k)),(2)
其中, C ∈ R n × n \mathbf{C}\in\mathbb{R}^{n\times n} CRn×n是表示 W W W的逆列和的对角矩阵,即 c i i = 1 / ∑ j w i j c_{ii}=1/\sum_{j}w_{ij} cii=1/jwij R ∈ R m × m R∈\mathbb{R}^{m \times m} RRm×m是表示 W W W的逆行和的对角矩阵,即 r j j = 1 / ∑ i w i j r_{jj}=1/\sum_{i}w_{ij} rjj=1/iwij。在无噪声数据的情况下,该更新方案保证收敛到加权最小二乘解 v ∗ v^* v
v ∗ = a r g v min ⁡ v ∥ W v − p ∥ R 2 , (3) \mathbf{v}^{*}=\underset{v}{\mathrm{arg}}\min_{v}\|W\mathbf{v}-\mathbf{p}\|_{R}^{2}, \tag{3} v=vargvminWvpR2,(3)
其中: ∥ x ∥ R 2 = x T R x \|\mathbf{x}\|_{R}^{2}=\mathbf{x}^{T}\mathbf{R}\mathbf{x} xR2=xTRx[1]。

3.2. 双轴重建

尽管双轴断层扫描数据集的获取如今在微生物学应用中非常普遍(其中每轴的倾斜范围非常有限),并且也被用于材料科学应用,但这种几何形状的复杂重建方法通常不受可用软件的支持。重建通常是通过独立重建两个倾斜序列然后平均结果来获得的,这导致重建质量次优,因为两个重建步骤中只使用了一部分数据。已经提出了一些联合重建的方法[28],但这些方法的实施可能具有挑战性。

由于ASTRA工具箱支持为采集过程定义高度灵活的几何设置,因此可以以直接的方式对双轴几何形状进行建模。此外,使用工具箱构建块构建的重建算法可以与双轴几何体组合使用,而不会对算法本身进行任何更改,因此没有必要开发专门为特定几何体设计的算法,如[28]中所述。

在接下来的内容中,我们将通过提供实现简单的双轴重建设置的代码示例来演示使用ASTRA工具箱创建三维重建的通用工作流。

  1. 投影数据被读入MATLAB环境并以3D矩阵的形式存储。这一步显然取决于测量系统及其输出文件格式。在编写时,ASTRA工具箱不提供以特定文件格式读取的方法,而是依赖于用户能够做到这一点。

    p = readdata(filename); % this function is created by the user
    
  2. 指定投影几何形状。如2.2节所述,该几何图形由四个向量定义:r、d、u和v。所需的信息(探测器大小、投影方向等)通常可以在与投影数据一起生成的日志文件中找到。下面的代码示例演示了如何为一个双轴投影设置构建一个投影几何,从一个倾斜角度列表开始。在这里,我们假设两个倾斜系列的所有投影图像都已正确对齐。然而,请注意,可以通过改变几何对象中指定的矢量来纠正不对准,但这大大超出了本文的范围[25]。

    在ASTRA工具箱中,投影几何由一个12列矩阵指定,其中每行表示一个投影图像,并包含相应的向量r, d, u和v。

    angles = [...] % vector with the projection angles in each of the tilt series
    l = numel(angles);
    vectors = zeros(2*l,12); % matrix in which each row contains the vector r,d,u,v,
    						 % that define a single projection (Fig.3)
    % Projections from the first tilt series
    for i=1:l
    	a=angles(i);
    	vectors(i,1:3)=[sin(a), 0, -cos(a)];     %ray direction, r;
    	vectors(i,4:6)=[0, 0, 0]                 %centre of detector d, 
    	vectors(i,7:9)=[cos(a), 0, sin(a)];      %vector from det (0,0) to (0,1),u
    	vectors(i,10:12)=[0, 1, 0];              %vector from det (0,0) to (1,0),v
    end
    % Projections from the second tilt series
    for i = (1+1):(2*1)
    	a = angles(i-l);
    	vectors(i,1:3) =[0, -sin(a), -cos(a)];
    	vectors(i,4:6) =[0, 0, 0];
    	vectors(i,7:9) =[0, -cos(a), sin(a)];
    	vectors(i,10:12) = [1, 0, 0];
    end
    % Create the ASTRA projection geometry
    d = ...; % number of detectors in each projection image
    proj_geom = astra_create_proj_geom('parallel3d_vec', [d d], vectors);
    
  3. 指定体积几何形状,定义体积(即重建)域中体素的大小、位置和数量。在电子断层扫描中,通常定义在x和y方向上延伸到零度视场之外的箱形板,同时将样品的厚度限制在板内。在这里,我们使用一个以原点为中心的立方体体素网格,具有3个单位长度的体素。在第3.4节中,我们将演示更高级的设置。

    % Create the ASTRA volume geometry
    s = ... % number of voxels in the volume in each dimension
    vol_geom = astra_create_vol_geom([s s s]);
    
  4. 几何设置完成后,下一步是将投影数据加载到工具箱内存中,并分配一些空间来存储重建。这些操作的结果是在工作流的后续步骤中使用的两个数据标识符。注意,每个数据对象都链接到相应的几何对象。

    % Create 'zero' volume and load the measurements 'p' into the toolbox
    vol_id = astra_mex_data3d('create', '-vol', vol_geom, 0);
    proj_id = astra_mex_data3d('create','-proj3d', proj_geom, p);
    
  5. 一旦将数据加载到工具箱内存中,就可以配置重构算法对象。在这里,我们使用CUDA加速的SIRT实现来解决3D数据问题。我们还将重建中允许的灰度值限制在区间[0,0.07],这是关于扫描样本的先验知识的一种简单形式,可以提高重建质量。结果配置也是一个特定的标识符。

    % Configure the algorithm
    cfg = astra_struct('SIRTD_CUDA');
    cfg.ProjectionDataId = proj_id;
    cfg.ReconstructionDataId = vol_id;
    cfg.option.MinConstraint = 0;
    cfg.option.MaxConstraint = 0.07;
    alg_id = astra_mex_algorithm('create', cfg);
    
  6. 算法标识符用于对提供给它的数据执行150次迭代。

    % Run the algorithm
    astra_mex_algorithm('iterate', alg_id, 150);
    
  7. 最后,将重构数据检索到MATLAB存储器中,为后续分析做准备。

    % Retrieve the result
    reconstruction = astra_mex_data3d('get', vol_id);
    

在第4.1节中,这个脚本应用于一个实验数据集。

3.3. PDART算法

在电子断层扫描中,精确分割各种材料中的致密纳米颗粒是一个具有挑战性的问题,因为重建伪影会阻碍分割(例如,缺失的楔形伪影)。最近,部分离散代数重构技术(partial Discrete algeaic Reconstruction Technique, PDART)被提出,用于同时重构和分割嵌入(可能)非均质材料中的致密均匀粒子[23]。使用PDART,可以通过利用关于它们的灰度 ρ ∈ R ρ∈\mathbb{R} ρR的先验知识来获得这些致密颗粒的精确重建。在本节中,我们将展示如何使用ASTRA工具箱轻松高效地实现PDART。

PDART算法将传统的SIRT迭代与分割步骤穿插在一起,在分割步骤中,假设所有灰度值超过一定阈值 τ ∈ R τ∈\mathbb{R} τR的像素都是致密均匀粒子的一部分。之后,其值超过阈值的像素因此被固定在已知的灰度级,并且不再允许在随后的SIRT迭代中更改。这可以通过从重构方程(1)中移除这些像素来实现。考虑迭代(k),定义 q ( k ) ∈ { 0 , 1 } n q^{(k)}∈\{0,1\}^n q(k){0,1}n作为一个向量,指定所有不固定的像素,即迭代(k)中不属于密集粒子的像素。定义 s ( k ) ∈ { 0 , ρ } n s^{(k)}∈\{0,ρ\}^n s(k){0,ρ}n作为一个向量,指定密集粒子的分割:
q j ( k ) = { 1 if  ν j ( k ) < τ 0 if  ν j ( k ) ≥ τ , s j ( k ) = { 0 if  ν j ( k ) < τ ρ if  ν j ( k ) ≥ τ , ∀ j ∈ { 1 , … , n } . (4) q_j^{(k)}=\begin{cases}1&\text{if }\nu_j^{(k)}<\tau\\0&\text{if }\nu_j^{(k)}\geq\tau\end{cases},\quad s_j^{(k)}=\begin{cases}0&\text{if }\nu_j^{(k)}<\tau\\\rho&\text{if }\nu_j^{(k)}\geq\tau\end{cases},\quad\forall j\in\{1,\ldots,n\}. \tag{4} qj(k)={10if νj(k)<τif νj(k)τ,sj(k)={0ρif νj(k)<τif νj(k)τ,j{1,,n}.(4)
在迭代(+k 1)中,从投影数据中减去所有值大于阈值的像素的贡献:
p ( k + 1 ) = p − W s . (5) p^{(k+1)}=p-Ws. \tag{5} p(k+1)=pWs.(5)
然后在接下来的SIRT迭代中使用该残差投影,该迭代被限制为满足 q j ( k ) = 1 q _j^{(k)}=1 qj(k)=1的所有像素 j j j。这个操作归结为从 W W W中移除对应于密集粒子像素的列。在ASTRA工具箱中,这可以通过指定重建掩码轻松实现,重建掩码是一个数据对象,它定义在重建中要考虑哪些像素(即 q ( k ) q^{(k)} q(k))。图4提供了对PDART算法进行50次迭代的MATLAB代码。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第5张图片

3.4. 混合分辨率重建

探测器技术领域的快速发展使重建具有不断增加的分辨率,即不断增加的体积尺寸。虽然这种改进的分辨率对于分析显然是至关重要的,但它通常只在小范围内有益(ROI)。因此,由于更大的体积也会导致大大增加的计算负担(即使在计算硬件的现代改进下),理想情况下应该使用混合分辨率进行重建,将ROI内部缓慢的高分辨率(HR)重建与ROI外部快速的低分辨率(LR)重建相结合。

由于ASTRA投影几何允许为重建和投影数据指定不同的像素大小,因此通过定义两个单独的体/投影几何对可以轻松实现混合分辨率重建;一个用于全局低分辨率体积,另一个用于感兴趣的高分辨率区域。

考虑这样的情况,一个特定的对象可以在一个体积中表示,以原点为中心,256×256×256个体素,尺寸为1 nm×1 nm×1 nm,但其中一个只对一个小的40×40 ×40 nm区域感兴趣,以某一点为中心 ( d x , d y , d z ) (d_x,d_y,d_z) (dx,dy,dz)。然后可以选择在ROI之外降低重构体积的采样,例如降低某个因子1 / 4。然后LR体积将包含64×64×64个尺寸为4 nm×4 nm×4 nm的体素。在ASTRA工具箱中,坐标系统的单位是由体积几何中的体素大小来定义的,即体素大小固定为1。为了对低分辨率重建体积进行编码,我们可以缩小投影几何中探测器像素的大小(由单位向量 u u u v v v指定,参见3.2节):
u L R = a ∗ u H R , v L R = a ∗ v H R . (6) u_{LR}=a_{*}u_{HR},\quad v_{LR}=a_{*}v_{HR}. \tag{6} uLR=auHR,vLR=avHR.(6)
同样,在当前版本的ASTRA工具箱中,坐标系的原点始终位于重建体的中心。然而,这可以很容易地通过向量将投影相对地移动到感兴趣区域的中心位置来规避。图5展示了这个多分辨率几何图形的创建。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第6张图片

混合分辨率体的投影和反投影算子可以通过组合两个单分辨率算子来编写,如图6所示。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第7张图片

为了执行重建,这些自定义运算符可以在图7所示的SIRT的MATLAB实现中使用。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第8张图片

请注意,另一种选择是,可以使用相同的原理来重建探测器原生分辨率的背景,同时通过应用超分辨率方案进一步提高ROI的分辨率[29]。然而,在本工作中没有进一步探讨这一点。

3.5. 总变差最小化

在文献中,可以找到许多重建技术,每种技术在特定用例中都有自己的优点。通常,它们以MATLAB脚本或函数的形式创建和分发,其中层析投影模型通过提供稀疏矩阵 W W W来指定,因此投影操作通过应用稀疏矩阵-向量乘积来执行,这可能很慢,并且需要大量的系统内存。因此,将高效的ASTRA投影仪操作符插入这些现有的代码框架是可取的。这可以通过单独可用的ASTRA Spot工具来实现。这些工具为投影操作提供了所谓的Spot包装器,并使它们像任何其他MATLAB矩阵一样出现和运行。通过这种方式,可以在不修改现有代码的情况下使用快速构建块。

作为一个例子,我们考虑了一个总变异最小化(TVmin)框架,这是一种重建技术,可以像PDART一样用来抵消缺失的楔形伪影的影响[30]。它通过寻找与测量值相对应的最稀疏解,或具有最稀疏梯度的解来实现:
v ∗ = arg ⁡ min ⁡ ν ∥ W v − p ∥ + λ ∥ T V ( v ) ∥ 1 , (7) \mathbf{v}^{*}=\arg\min_{\nu}\parallel\mathbf{W}\mathbf{v}-\mathbf{p}\parallel+\lambda\|TV(\mathbf{v})\|_{1}, \tag{7} v=argνminWvp+λTV(v)1,(7)
其中 λ λ λ是正则化参数, T V ( v ) TV (v) TV(v)是描述每个体素的“总变化”度量的函数,例如,它的梯度。

假设我们有一个MATLAB脚本,实现求解式(7)的Chambolle-Pock优化策略[31]。作为参数,它取一个投影矩阵 W W W、一个表示为矩阵的 T V TV TV函数、投影数据和迭代次数。通过创建ASTRA Spot“opTomo”对象并将其链接到我们的投影和体素几何,我们可以使用ASTRA构建块运行该算法(图8)。这样,每次向量乘以 W W W W T W^T WT时,调用有效实现和内存扩展的投影或反投影构建块。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第9张图片

4. Experimental samples

在本节中,我们将前一节中描述的技术和MATLAB脚本应用于两个实验双倾斜系列。倾斜序列是用比利时安特卫普大学EMAT实验室提供的FEI Tecnai G2电子显微镜记录的。这两个数据集对应于材料科学领域的实验,但相同的代码可以用于使用双轴电子断层扫描(例如,生命科学)或其他类型的断层扫描(例如,μCT和同步加速器)的其他应用。

第一个数据集如图9(a)所示,是从嵌入在聚合物基质中的金纳米颗粒组装中获得的[32-34]。纳米颗粒的平均直径为20纳米。为了获得该系列,使用了Fischione型号2040双倾斜断层摄影支架,显微镜在200 kV下工作。探头半会聚角为16 mrad,对应的聚焦深度约为70 nm。倾斜系列中的每个投影图像包含428×428像素。因此,重建的规模是选择在428×428×428体素。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第10张图片

图9(b)所示的第二个数据集是从一个尖刺的Au纳米星粒子中获得的[35,36]。使用Fischione型2040双倾斜层析支架。第一个系列在-70°到+70°的倾斜范围内获得,第二个系列在-66°到+72°的倾斜范围内获得。两种情况下的倾斜增量均为2°。加速电压为200kv。倾斜系列中的每个投影图像包含256×256像素。重建的大小选择为256×256×256体素。

在两个数据集的预处理步骤中,(两个倾斜系列的)所有投影图像彼此对齐[25]。

4.1. 重建

我们通过仅使用单倾斜系列和额外的第二个倾斜系列执行SIRT重建来描述双轴重建的功能,为此我们使用了第3.2节中解释的几何设置。对于纳米组装,重构是150次SIRT迭代的结果,同时具有最小值和最大值约束集(如第3.2节所示)。图10显示了这些重建结果。很明显,缺失的楔形伪影确实在密集颗粒周围大大减少,并且对分段密集颗粒的任何后续分析将更加准确。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第11张图片

对于纳米星数据集,使用500次SIRT迭代计算重建结果。这些重建的截面和表面效果图如图11所示。当检查用虚线圈表示的区域时,可以清楚地看到,由于缺少楔形伪影,单个倾斜序列重建并不能提供准确重建的峰值。此外,我们观察到,在第一次倾斜序列中重建较差的区域,通常在基于第二次倾斜序列的重建中更加准确,反之亦然[28]。然而,通过使用完整的双轴项目数据,我们能够在整个体量中创建准确的重建。

Au纳米组装数据集是使用PDART方法重建的理想候选数据集。在图12中,显示了单轴和双轴倾斜序列的PDART重建。同样,双轴断层扫描明显减少了缺失的楔形伪影,甚至比图10(b)的SIRT重建效果更好。此外,使用PDART算法可以很容易地从重建中提取密集的粒子,同时在背景中仍然提供良好的重建。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第12张图片

接下来,我们研究3.4节中描述的混合分辨率重建的效果。在Au纳米组装数据集中,我们选择了64×64×64框中的单个致密粒子作为我们感兴趣的区域。如图5所示,我们将背景采样降低了1/4和1/8,有效地将重建方程中的体素数从78,402,752减少到1,483,091(1.9%)和414,760(0.53%)。图13显示了这些混合分辨率SIRT重建结果。与全分辨率重建相比,我们还包括了该ROI中重建的均方根误差(即图10)。由于这些rmse值相对较低,我们可以说对背景进行降采样对ROI内部的精度影响很小。在第4.2节中,我们将研究由此带来的重建时间上的好处。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第13张图片

最后,我们应用了在外部MATLAB脚本中实现的Chambolle-Pock电视最小化重建方法,但它使用ASTRA工具箱进行投影和反向投影操作。图14显示了λ=10的重建。由于在此重建过程中将11范数最小化,因此在所有先前重建的背景中出现的小灰度变化在此不可见。

The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography_第14张图片

4.2. 时间

在表1中,我们研究了第4节中所示的Au纳米组装数据集的所有重建的计算时间。所有重建都是在运行在2.30 GHz、支持256 GB内存的Xeon E5-2630系统上创建的。所有投影操作都在NVIDIA Tesla K20X单元上加速。

在这里插入图片描述

首先要注意的是,双轴重建具有更高的计算成本。更多的投影数据意味着更大的投影矩阵W(1),因此需要求解的系统也更大。其次,请注意,更高级的重建方法(PDART和TVmin)比直接的SIRT算法慢,即使SIRT需要更多的迭代才能获得足够准确的结果。最后,请注意,混合分辨率SIRT重建确实带来了明显的性能优势。与标准的SIRT重建相比,a=4的混合分辨率重建导致单轴和双轴的速度分别提高了2.27和3.02。对于a=8来说,这个数字甚至更大一些(2.48和3.23)。

5. Discussion and conclusions

在本文中,我们已经证明了ASTRA工具箱可以有效地用于开发和实现电子断层扫描的高级算法,并在现实世界的数据集上运行这些算法。ASTRA工具箱提供了精确指定实验几何背景的可能性,允许采集方案的充分灵活性。在这里,我们展示了在重建中使用双轴倾斜方案的可能性。通过将几何定义与复杂的算法概念(part中的掩模,一种实现快速重建的多分辨率方案)相结合,可以使用MATLAB语言或Python(也支持Python)中的简短脚本形成高级算法。

我们的实验结果表明,相对简单的复杂算法可以直接适用于实验数据集。这些实验绝不是详尽无遗的,但有助于说明ASTRA工具箱与电子断层扫描相关的关键特征,以及使用典型GPU配备的工作站获得的运行时间,以及在实验HAADF-STEM数据集上观察到的输出。

在电子断层扫描中值得注意的一个特殊用例是在高级对准方案中使用几何灵活性。目前基于投影图像互相关的对准方法只对投影图像提供简单的二维位移和旋转校正,尽管实际的几何畸变可能更复杂(例如,涉及与探测器不完全在同一平面上的倾斜轴)。尽管基于标记的方法可用于恢复此类三维几何变形的参数,但在重建算法中最佳地使用这些参数需要完全灵活的投影和反投影实现,这在现有的软件包中通常是不可用的。ASTRA工具箱为开发先进的对准算法和在先进的重建方法中使用检索到的几何参数提供了一个非常合适的平台。

ASTRA工具箱支持的其他操作,如投影数据和特定图像体素集的掩蔽操作,促进了广泛的高级重建算法的直接实现,包括DART和TV最小化方案。由于所有基本操作都能够在现代GPU硬件上实现较高的计算性能,因此这些算法随后可以以相对较低的运行时间应用于实验数据集。

尽管在算法开发和应用方面有这些优势,ASTRA工具箱绝不是目前在电子断层扫描中使用的现有软件包的替代品。对于这种用途,它目前缺乏几个关键功能:

(i) 一个直观的用户界面,提供简单和图形化的关键断层扫描操作;

(ii) 处理电子显微镜和断层扫描中常见的各种文件格式的能力;

(iii) 实现电子断层扫描中常用的各种预处理和后处理操作(例如,对准和去噪)。

由于这些原因,我们预计有三组用户将从ASTRA工具箱中受益。第一组由活跃于电子显微镜实验室的以计算为导向的研究人员组成。使用先进的显微镜技术进行尖端实验,通常会产生不适合用标准算法处理的成像数据。为了处理这些数据,必须针对手头的特定数据集定制重建算法,这可能涉及编写程序代码。这些用户将从ASTRA工具箱中受益匪浅,因为ASTRA工具箱是一个仍然提供高度定制的高级平台。第二类是电子断层扫描软件包的开发人员。由于ASTRA工具箱是开源软件,具有非商业用途的免费许可证(GPLv3),因此它可以用作电子断层扫描领域精细软件开发的构建块。最后,ASTRA工具箱提供的高级接口可以弥合目前数值数学和成像研究人员与实验用户之间存在的差距。特别是Spot算子的使用,如第3.5节所示,使我们能够用线性代数符号(数学研究人员常用的)表示高级算法,并在实验数据上使用这些算法。到目前为止,由于MATLAB等高级数值软件包中可用的标准操作的限制,这一步通常很难完成。

目前,ASTRA工具箱支持的许多操作仅限于完全适合GPU内存空间的数据集(在写入时可达12 GB),这对处理非常大的数据集施加了限制。目前的研究和实现工作集中在将功能扩展到更大尺寸的数据集上,这不仅发生在电子断层扫描中,而且还发生在其他广泛的断层扫描应用中(例如,基于X射线图像)。

你可能感兴趣的:(CT重建,医学图像重建,计算机视觉,人工智能,深度学习)