当前位置: 首页 > article >正文

ASTRA Toolbox学习笔记

GitHub网址:https://github.com/astra-toolbox/astra-toolbox
官方网址:http://www.astra-toolbox.com/

一、简介

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)

首先需要制定实验所需的几何形状,包括两部分:

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 体积几何的对象。在之后的投影和重建操作中,这个对象将被用于描述样品或模拟样品 的位置和尺寸。

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数据对象。以下是该模块中的主要函数及其参数和用法:

1. astra.data3d.create:创建数据对象(如投影数据、重建数据等)。

参数:

  • datatype: 数据类型字符串。对于投影数据,使用-sino;对于体数据,使用-vol。
  • geom: 几何对象。对于投影数据,使用投影几何对象;对于体数据,使用体数据几何对象。
  • data(可选): 一个包含初始数据的NumPy数组。如果省略,数据对象将用0填充。

返回值:创建的数据对象的ID。

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

2. astra.data3d.get:获取数据对象的内容。

参数:

  • id: 数据对象的ID。

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

sino_data = astra.data3d.get(sino_id)
vol_data = astra.data3d.get(vol_id)

3. astra.data3d.store:将数据对象的内容替换为新数据。此函数在ASTRA Toolbox 1.9.9及更高版本中已被弃用,推荐使用astra.data3d.set。

4. astra.data3d.set:设置数据对象的内容。

参数:

  • id: 数据对象的ID。
  • data: 一个包含新数据的NumPy数组。

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

astra.data3d.set(sino_id, new_sino_data)
astra.data3d.set(vol_id, new_vol_data)

5. astra.data3d.delete:删除数据对象,以释放内存资源。

参数:

  • id: 数据对象的ID。
astra.data3d.delete(sino_id)
astra.data3d.delete(vol_id)

6. astra.data3d.info:获取数据对象的信息,如数据类型、尺寸等。

参数:

  • id: 数据对象的ID。

返回值:一个字典,包含数据对象的信息。

sino_info = astra.data3d.info(sino_id)
vol_info = astra.data3d.info(vol_id)

这些函数为处理3D数据提供了方便的接口。在使用它们时,请确保在操作完成后删除创建的对象,以避免内存泄漏。

3.创建算法对象(Algorithm)

astra.algorithm.create函数用于在ASTRA Toolbox中创建算法对象。该函数需要一个包含算法配置信息的字典作为输入参数。通常,通过astra.astra_dict类创建这个字典。
以下是使用astra.algorithm.create函数创建SIRT(Simultaneous Iterative Reconstruction Technique)算法对象的示例:

import astra

# 创建astra_dict对象以存储算法配置信息
cfg = astra.astra_dict("SIRT")
cfg["ProjectionDataId"] = sino_id  # 投影数据对象ID
cfg["ReconstructionDataId"] = rec_id  # 重建数据对象ID(实际上是体数据对象ID)
cfg["ProjectorId"] = proj_id  # 投影仪对象ID
cfg["option"] = {"MinConstraint": 0}  # 设置其他选项,例如最小约束

# 使用astra.algorithm.create函数创建算法对象
alg_id = astra.algorithm.create(cfg)

  1. “type”(必需):算法的类型。例如,“SIRT”(Simultaneous Iterative Reconstruction
    Technique)、“FBP”(Filtered
    Backprojection)等。通过astra.astra_dict函数传递算法名称时,该键会自动设置。
  2. “ProjectionDataId”(必需):投影数据对象ID。这是一个整数,表示在ASTRA Toolbox中创建的投影数据对象。
  3. “ReconstructionDataId”(必需):重建数据对象ID。这是一个整数,表示在ASTRA
    Toolbox中创建的体数据对象,用于存储重建结果。
  4. “ProjectorId”(可选):投影仪对象ID。这是一个整数,表示在ASTRA
    Toolbox中创建的投影仪对象。对于某些算法,例如FBP,需要提供投影仪对象。投影仪对象可以通过astra.create_projector函数创建。
  5. “option”(可选):一个包含算法特定选项的字典。例如,对于SIRT算法,您可以设置最小约束和最大约束:
cfg["option"] = {"MinConstraint": 0, "MaxConstraint": 1}

对于FBP算法,您可以设置滤波器类型和滤波器参数:

cfg["option"] = {"FilterType": "Ram-Lak", "FilterParameter": 0.5}
  1. “DetectorSuperSampling”(可选):一个整数,表示检测器的超采样因子。用于提高投影和反投影操作的精度。仅适用于GPU算法。
  2. “VolumeSuperSampling”(可选):一个整数,表示体数据的超采样因子。用于提高投影和反投影操作的精度。仅适用于GPU算法。

http://www.kler.cn/a/5136.html

相关文章:

  • FreeROTS学习 内存管理
  • 【Linux】sed编辑器
  • Windows 安装 Docker 和 Docker Compose
  • 前端JavaScript中some方法的运用
  • 【HarmonyOS NEXT】鸿蒙应用实现屏幕录制详解和源码
  • 【测试】——Cucumber入门
  • Excel使用技巧:如何打印指定区域?如何设置禁止打印?
  • 华为路由器 高级ACL配置
  • 图解Redis,Redis主从复制与Redis哨兵机制
  • centos 7安装mysql
  • 盒子拖拽效果,原生js实现
  • 【Linux内网穿透】使用SFTP工具快速实现内网穿透
  • 【C语言】文件操作
  • 神策数据如何帮助企业实现营销自动化?
  • yolov5模型训练流程
  • 2023西安交通大学软件工程915考研经验帖(初试+复试)
  • 11 容器常用命令
  • *(void**)解析——如何设计可以在32位下访问到内存区域的前4个字节,在64位下访问到前8个字节?
  • 面试官:ThreadLocal了解吗?用过吗?原理是什么?底层数据如何存储的?
  • [oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
  • 蓝桥杯刷题冲刺 | 倒计时8天
  • 2023年超全的Android面经(23/30)设计模式安卓源码案例
  • 学术论文等级与分类标准——JCR
  • Element Plus 实例详解(五)___Scrollbar 滚动条
  • 语句【C++】
  • linux创建守护进程