我的问题是,对于给定的图像和投影几何形状,我是否可以最优地确定源与旋转中心之间的距离以及旋转中心与检测器阵列之间的距离。最优是指测量矢量零项的数量最小。在下面的代码片段中,我使用了Astra工具箱来模拟2D层析成像。from skimage.io import imreadfrom astra import creators, optomoimport numpy as np# load some 400x400 pixel imageimage = 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 vectorW = optomo.OpTomo(proj_id)fp = W*image在我的示例中,如果我使用np.linspace(0,np.pi,180),则fp的零条目数为1108,如果我使用np.linspace(0,np.pi/180,180),则该数字会增加到5133,这使我相信值1500.0和的选择不正确。 最佳答案 一般而言,选择这些数字是根据实验约束而不是算法约束。在许多设置中,这些值是固定的,但您似乎可以灵活地忽略它们。在实验扫描中,您想要什么?如果要寻找高分辨率,则希望“放大倍数” DSD / DSO最高,从而将检测器放在远处,而物体应靠近源。但是,这带来了问题。对于相同的SNR,远距离探测器需要更长的扫描时间(由于散射和其他现象会使X射线无法直行)。不仅如此,磁石越大,就越有可能使物体的很大一部分完全超出检测器范围,因为检测器并不大(以mm为单位)。因此,设置这些参数的常见扫描策略是:1)在严格的扫描时间内将检测器尽其所能。 2)将物体尽可能地靠近光源,但要始终确保其整个宽度适合探测器。通常可以做出折衷,特别是如果您知道要查看的最小功能是什么(允许3或4像素正确看到它)。但是,从算法上来讲?它无关紧要。我不能说ASTRA,但可能甚至不会影响计算时间,因为具有零的像素是因为它们不在视场中,因此根本就不会被计算。现在,以您的简单玩具示例为例,如果您完全忽略所有物理学,则可以采用以下方法:1.-使用简单三角函数来计算所需的距离比例,以确保所有物体都在探测器中。2.-创建一张全白色的图像,然后反复更改大小,直到检测器外部的前几对像素变为零为止。关于python - on变换:优化源/探测器与旋转中心之间的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58509104/
10-12 18:04