ASTRA Toolbox学习笔记-Python

ASTRAToolbox:X射线成像的开源算法库
ASTRAToolbox是一个开源的算法库,专注于处理X射线相干散射和传输成像。它支持多种投影几何和算法,如FBP、SART、SIRT等。用户可以创建几何形状、投影数据对象和算法对象,进行模拟投影和图像重建。文章还提供了创建和使用这些对象的Python代码示例,强调了GPU加速的投影和反投影功能。

GitHub网址:https://github.com/astra-toolbox/astra-toolbox
官方网址:http://www.astra-toolbox.com/
文章网址:Fast and flexible X-ray tomography using the ASTRA toolbox



一、简介

ASTRA Toolbox 是一个用于处理 X 射线相干散射和 X 射线传输成像的开源算法工具箱。本文档概述了该工具箱的基本概念。

几何

ASTRA Toolbox 支持以下几种类型的投影几何:

  • 平行束二维投影
  • 锥束二维投影
  • 平行束三维投影
  • 锥束三维投影
  • 向量二维投影
  • 向量三维投影

每种几何类型都可以通过 ASTRA 提供的 create_*_proj_geom 函数创建。

数据和算法

ASTRA Toolbox 为 X 射线相干散射和 X 射线传输成像提供了许多不同的算法,包括以下几种:

  • Filtered Backprojection (FBP)
  • Simultaneous Algebraic ReconstructionTechnique (SART)
  • Simultaneous Iterative Reconstruction Technique (SIRT)
  • Conjugate Gradient (CG)
  • Total Variation (TV)

ASTRA Toolbox 提供了创建和管理算法对象的 API,用于指定算法的输入和输出数据以及算法的参数。有关如何使用 API 的详细信息,请参阅 ASTRA Toolbox 文档。

二、使用

1.创建几何(Geometry)

首先需要制定实验所需的几何形状,包括两部分:
(1)Volume geometries(体积几何)
指定了样品或幻影在二维或三维空间中的位置。它采用2D矩形或3D盒子的形式,通常以原点为中心。

创建一个3D的体积几何:

vol_geom = astra_create_vol_geom(y,x,z); 

astra_create_vol_geom(y, x, z)用于创建一个 3D 体积几何。它接收三个参数,分别表示体积在三个维度(y, x, z)上的大小。这个函数返回一个用于描述体积几何的对象,这个对象将在之后的投影和重建操作中使用。

例如,如果你想创建一个具有尺寸 128x128x128 的立方体,你可以使用以下代码:

vol_geom = astra_create_vol_geom(128, 128, 128)

这将创建一个表示 128x128x128 大小的 3D 体积几何的对象。在之后的投影和重建操作中,这个对象将被用于描述样品或模拟样品 的位置和尺寸。

(2)a projection geometry(投影几何)
指定了射线源和探测器的位置和轨迹。可用的投影几何类型有2D平行光束、2D扇形光束、3D平行光束和3D锥形光束。

proj_geom = astra_create_proj_geom('cone',  det_spacing_x, det_spacing_y, det_row_count, det_col_count, angles, source_origin, origin_det);

创建一个圆锥投影几何(cone)。函数的参数如下:

‘cone’:代表几何类型,这里是圆锥投影。
det_spacing_x:探测器像素在x方向上的间距。
det_spacing_y:探测器像素在y方向上的间距。
det_row_count:探测器面板的行数。
det_col_count:探测器面板的列数。
angles:投影角度的数组,单位通常是弧度。
source_origin:源点到物体原点的距离。
origin_det:物体原点到探测器的距离。

函数返回一个代表投影几何的对象,它包含了上述参数的信息。这个投影几何对象可用于后续的投影、反投影等操作。

2.创建投影数据对象(data)

使用astra.data3d模块来创建3D数据对象。主要使用的函数为以下两个:astra.data3d.create(data_type, geometry, data=None)astra.data3d.delete(data_object_ids),用于创建和删除数据对象。以下是该模块中的主要函数及其参数和用法:


1. astra.data3d.create(data_type, geometry, data=None):用于创建一个ASTRA数据对象。这个函数可以用于创建三维的投影数据或者体积数据。

  • data_type 是一个字符串,表示数据类型。对于三维投影数据,使用 ‘-proj3d’。对于三维体积数据,使用 ‘-vol’。
  • geometry 是一个包含投影几何或体积几何的字典。对于投影数据,使用由 astra.create_proj_geom() 创建的投影几何。对于体积数据,使用由 astra.create_vol_geom() 创建的体积几何。
  • data 是可选的 NumPy 数组,包含初始数据。如果未指定,将使用零填充数据。

返回值:返回一个数据对象ID,这个ID可以用于后续的ASTRA函数调用。

sino_id = astra.data3d.create('-sino', proj_geom, sino_data)
vol_id = astra.data3d.create('-vol', vol_geom, vol_data)

2. astra.data3d.get(dataset_id): 用于获取三维数据集对象的信息。具体来说,可以获取三维数据集对象的属性,例如数据类型、大小、数据范围等。
参数:

  • dataset_id: 数据对象的ID。

返回值:一个包含数据对象内容的NumPy数组。

import numpy as np
import astra

# 创建一个体积几何
vol_geom = astra.create_vol_geom(128, 128, 128)

# 使用现有的 NumPy 数组创建一个三维体积数据对象
data = np.random.rand(128, 128, 128)
vol_data_id = astra.data3d.create('-vol', vol_geom, data)

# 获取数据对象中的数据
retrieved_data = astra.data3d.get(vol_data_id)

# 检查原始数据和检索到的数据是否相同
print(np.allclose(data, retrieved_data))  # 如果数据相同,则输出 True

3. a

评论 31
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值