Радоновое преобразование: оптимизировать расстояние между источником / детектором и центром вращения - PullRequest
0 голосов
/ 22 октября 2019

Мой вопрос заключается в том, могу ли я оптимально определить расстояние между источником и центром вращения и расстояние между центром вращения и массивом детекторов для данного изображения и геометрии проекции. Под оптимальным я подразумеваю, что число нулевых записей вектора измерения сведено к минимуму.

В следующем фрагменте кода я использовал набор инструментов Astra, с помощью которого мы моделируем нашу 2D-томографию.

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

В моем примере, если я использую np.linspace(0,np.pi,180), число нулевых записей fp равно 1108, если я использую np.linspace(0,np.pi/180,180), вместо этого число увеличивается до 5133, что заставляет меня поверить, что значения 1500.0 и 500.0 выбраны не очень хорошо.

1 Ответ

2 голосов
/ 23 октября 2019

Вообще говоря, эти числа выбираются из-за экспериментальных ограничений, а не из алгоритмических. Во многих настройках эти значения являются фиксированными, но давайте проигнорируем их, поскольку вы, кажется, обладаете гибкостью.

Что вы хотите в экспериментальном сканировании?

Если вы ищете высокое разрешение, вы хотите, чтобы «увеличение» DSD / DSO было наивысшим, поэтому детектор находится далеко, а объект - близко к источнику. Это приходит с проблемами, хотя. Дальний детектор требует большего времени сканирования для того же SNR (из-за рассеяния и других явлений, которые заставят ваши рентгеновские лучи не идти прямо). И не только это: чем больше магнит, тем больше вероятность того, что огромные части объекта окажутся за пределами диапазона детекторов, поскольку детекторы не такие большие (в мм).

Так что общая стратегия сканированияустановить их 1) установить детектор так далеко, как вы можете с вашим строгим временем сканирования. 2) Расположите объект как можно ближе к источнику, но всегда следите за тем, чтобы вся его ширина вписывалась в детектор.

Часто могут быть достигнуты компромиссы, особенно если вы знаете, какую наименьшую функцию вы хотите видеть (разрешите 3 или 4 пикселя, чтобы правильно ее видеть).

Однако, с точки зрения алгоритма? это не имеет значения. Я не могу говорить за ASTRA, но, скорее всего, это не повлияет даже на время вычислений, так как пиксели с нулями находятся потому, что они находятся вне поля зрения и, следовательно, просто не вычисляются вообще.


Теперь, для вашего простого игрушечного примера, если вы полностью игнорируете всю физику, есть способ:

1.- используйте простую тригонометрию, чтобы вычислить, какие соотношения расстояний вам нужныубедитесь, что весь объект находится в детекторе.

2.- создать полностью белое изображение и итеративно изменять размеры, пока первая пара пикселей во внешней части детектора не станет равной нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...