1

我的问题是,对于给定的图像和投影几何,我是否可以最佳地确定源与旋转中心之间的距离以及旋转中心与探测器阵列之间的距离。最优我的意思是测量向量的零条目的数量被最小化。

在下面的代码片段中,我使用了用于模拟 2D 断层扫描的 Astra 工具箱。

from skimage.io import imread
from astra import creators, optomo
import numpy as np

# load some 400x400 pixel image 
image = imread("/path/to/image.png, as_gray=True)"

# create geometries and projector
# proj_geom = astra_create_proj_geom('fanflat', det_width, det_count, angles, source_origin, origin_det)
proj_geom = creators.create_proj_geom('fanflat', 1.0, 400, np.linspace(0,np.pi,180), 1500.0, 500.0);
vol_geom = creators.create_vol_geom(400,400)
proj_id = creators.create_projector('line_fanflat', proj_geom, vol_geom)

# create forward projection
# fp is our measurement vector
W = optomo.OpTomo(proj_id)
fp = W*image

在我的示例中,如果我使用 arenp.linspace(0,np.pi,180)的零条目的fp数量1108,如果我改用np.linspace(0,np.pi/180,180)数字增加,5133这使我相信值1500.0500.0没有很好地选择。

4

1 回答 1

2

一般来说,选择这些数字是由于实验约束而不是算法约束。在许多设置中,这些值是固定的,但让我们忽略这些,因为您似乎具有灵活性。

在实验扫描中,你想要什么?

如果您正在寻找高分辨率,您希望“放大”DSD/DSO 是最高的,从而使探测器远离源,而物体靠近源。但是,这会带来问题。对于相同的 SNR,远探测器需要更长的扫描时间(由于散射和其他现象会使您的 X 射线无法直射)。不仅如此,mag 越大,物体的很大一部分完全超出探测器范围的可能性就越大,因为探测器并没有那么大(以 mm 为单位)。

所以设置这些的常用扫描策略是 1) 在严格的扫描时间允许的范围内尽可能地放置探测器。2) 将物体尽可能靠近源,但始终确保其整个宽度适合探测器。

通常可以做出妥协,特别是如果您知道要查看的最小特征是什么(允许 3 或 4 个像素才能正确看到它)。

但是,从算法上讲?它无关紧要。我不能代表 ASTRA,但可能连计算时间都不会受到影响,因为像素为零是因为它们不在视野范围内,因此根本不计算。


现在,对于您的简单玩具示例,如果您完全忽略所有物理,则有一种方法:

1.- 使用简单的三角法计算确保所有物体都在探测器中所需的距离比。

2.- 创建一个全白图像并迭代更改大小,直到探测器外部的前几个像素变为零。

于 2019-10-23T15:29:22.710 回答