确定扫描场景的几何参数———以2维直线束为例#
这段代码演示了使用ASTRA工具箱进行计算机断层成像(CT)重建的基本流程,主要功能包括:
创建CT扫描的几何参数配置(扫描几何+重建体积几何)
生成Shepp-Logan仿体(测试图像)
通过GPU投影运算生成正弦图(sinogram)
可视化原始图像和投影数据
1. 导入工具包#
python文件的第一步通常是引入所需要的包
import astra
import numpy as np #python主要的矩阵数据处理库
import pylab #用于可视化
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[1], line 3
1 import astra
2 import numpy as np #python主要的矩阵数据处理库
----> 3 import pylab #用于可视化
ModuleNotFoundError: No module named 'pylab'
2. 确定几何#
我们需要根据实际场景确定工程的几何参数设置.以下面图片展示的场景为例子

在平行束CT扫描系统中,X射线源与线阵探测器呈刚性地对向排布,两者始终保持固定距离。 该几何布局中,所有X射线路径严格平行,模拟了第一代CT扫描仪的工作模式,其中仿体位于射线源与探测器中间的旋转平台上,每个投影角度对应探测器捕获一条完整的正弦图剖面线。共采集180度数据。
#体积参数
vol_geom = astra.create_vol_geom(256, 256)
#投影参数
proj_geom = astra.create_proj_geom(
'parallel', # 使用平行光束(如老式CT)
1.0, # 探测器间距1像素
384, # 有384个探测单元
np.linspace(0, np.pi, 180, False) # 从0到180°拍180张(每1° 1张),False表示不包含终点
)
#创建投影器
proj_id = astra.create_projector('cuda', proj_geom, vol_geom)
# 'cuda'表示使用NVIDIA显卡加速
3. 生成测试图像#
Shepp-Logan仿体是国际公认的CT测试模型:
phantom_id, P = astra.data2d.shepp_logan(vol_geom)
# phantom_id : 数据对象ID
# P : 实际的256×256像素图像数据
#可视化
pylab.gray() # 使用灰度图显示
pylab.figure(1)
pylab.imshow(P)
<matplotlib.image.AxesImage at 0x7f18283fceb0>
4. 正投影模拟#
接下来我们要计算这个几何条件下的正投影弦图。当扫描架以等角步进(Δθ=1°)旋转时,384个探测单元以1mm间距同步采集穿透仿体的衰减信号,最终形成180×384的投影矩阵

sinogram_id, sinogram = astra.create_sino(P, proj_id)
# sinogram : 生成的180×384正弦图数据
pylab.figure(2)
pylab.imshow(sinogram) # 显示CT扫描结果(像扇形展开的胶片)
pylab.show()
5. 清理内存#
ASTRA会在GPU上分配内存,需要手动释放
astra.data2d.delete(sinogram_id)
astra.data2d.delete(phantom_id)
astra.projector.delete(proj_id)