В этом примере показано, как использовать radon, iradon, fanbeam, и ifanbeam формируют проекции из образца изображения и затем восстанавливают изображение из проекций. В то время как radon и iradon использовать геометрию параллельной балки для проекций, fanbeam и ifanbeam использовать геометрию веера-балки. Для сравнения геометрий параллельного луча и веерного луча приведенные ниже примеры создают синтетические проекции для каждой геометрии, а затем используют эти синтетические проекции для восстановления исходного изображения.
Реальным применением, требующим реконструкции изображения, является рентгенопоглощающая томография, где проекции формируются путем измерения ослабления излучения, которое проходит через физический образец под разными углами. Исходное изображение можно рассматривать как поперечное сечение образца, в котором значения интенсивности представляют плотность образца. Проекции собираются специальными медицинскими устройствами визуализации, а затем внутреннее изображение образца реконструируется с использованием iradon или ifanbeam.
Функция iradon восстанавливает изображение из проекций параллельного луча. В геометрии параллельного луча каждая проекция формируется путем объединения набора интегралов линий через изображение под определенным углом. Функция ifanbeam восстанавливает изображение из веер-лучевых проекций, имеющих один излучатель и множество датчиков.
Диаграммы, иллюстрирующие обе геометрии, см. в Руководстве пользователя по обработке изображений Toolbox™.
Тестовый образ представляет собой фантом головки Shepp-Logan, который может быть сгенерирован с помощью функции phantom. Фантомное изображение иллюстрирует многие качества, которые обнаруживаются в реальной томографической визуализации человеческих голов. Яркая эллиптическая оболочка вдоль внешней части аналогична черепу, а многие эллипсы внутри аналогичны особенностям мозга или опухолям.
P = phantom(256); imshow(P)

Расчет синтетических проекций с использованием геометрии параллельного луча и изменение количества углов проекции. Для каждого из этих вызовов: radon, выход является матрицей, в которой каждый столбец является преобразованием Радона для одного из углов в соответствующем theta.
theta1 = 0:10:170; [R1,~] = radon(P,theta1); num_angles_R1 = size(R1,2)
num_angles_R1 = 18
theta2 = 0:5:175; [R2,~] = radon(P,theta2); num_angles_R2 = size(R2,2)
num_angles_R2 = 36
theta3 = 0:2:178; [R3,xp] = radon(P,theta3); num_angles_R3 = size(R3,2)
num_angles_R3 = 90
Следует отметить, что для каждого угла проекция вычисляется в N точках вдоль оси xp, где N является константой, которая зависит от диагонального расстояния изображения, так что каждый пиксель будет проецироваться для всех возможных углов проекции.
N_R1 = size(R1,1)
N_R1 = 367
N_R2 = size(R2,1)
N_R2 = 367
N_R3 = size(R3,1)
N_R3 = 367
Таким образом, если вы используете меньший фантом головы, проекция должна быть вычислена в меньшем количестве точек вдоль оси xp.
P_128 = phantom(128); [R_128,xp_128] = radon(P_128,theta1); N_128 = size(R_128,1)
N_128 = 185
Просмотр данных проекции R3. Некоторые из особенностей исходного фантомного изображения видны на изображении R3. Первый столбец R3 соответствует проекции при 0 градусах, которая интегрируется в вертикальном направлении. Самая центральная колонна соответствует проекции под углом 90 градусов, которая интегрируется в горизонтальных направлениях. Проекция при 90 градусах имеет более широкий профиль, чем проекция при 0 градусах из-за большой вертикальной полуоси крайнего эллипса фантома.
imagesc(theta3,xp,R3) colormap(hot) colorbar xlabel('Parallel Rotation Angle - \theta (degrees)'); ylabel('Parallel Sensor Position - x\prime (pixels)');

Сопоставьте параллельный поворот с шагом, dtheta, в каждой реконструкции с тем, что использовалось выше для создания соответствующих синтетических проекций. В реальном случае вы знаете геометрию ваших передатчиков и датчиков, но не исходное изображение, P.
Следующие три реконструкции (I1, I2, и I3) показывают эффект изменения количества углов, под которыми выполнены проекции. Для I1 и I2 некоторые особенности, которые были видны в исходном фантоме, не ясны. В частности, посмотрите на три эллипса внизу каждого изображения. Результат в I3 сильно напоминает оригинальное изображение, P.
Обратите внимание на значительные артефакты, присутствующие в I1 и I2. Чтобы избежать этих артефактов, используйте большее количество углов.
% Constrain the output size of each reconstruction to be the same as the % size of the original image, |P|. output_size = max(size(P)); dtheta1 = theta1(2) - theta1(1); I1 = iradon(R1,dtheta1,output_size); dtheta2 = theta2(2) - theta2(1); I2 = iradon(R2,dtheta2,output_size); dtheta3 = theta3(2) - theta3(1); I3 = iradon(R3,dtheta3,output_size); figure montage({I1,I2,I3},'Size',[1 3]) title('Reconstruction from Parallel Beam Projection with 18, 24, and 90 Projection Angles')

Рассчитайте синтетические проекции с использованием геометрии веера-луча и измените значение параметра «FanSensorSpacing».
D = 250; dsensor1 = 2; F1 = fanbeam(P,D,'FanSensorSpacing',dsensor1); dsensor2 = 1; F2 = fanbeam(P,D,'FanSensorSpacing',dsensor2); dsensor3 = 0.25; [F3, sensor_pos3, fan_rot_angles3] = fanbeam(P,D,... 'FanSensorSpacing',dsensor3);
Просмотр данных проекции F3. Обратите внимание, что углы поворота вентилятора находятся в диапазоне от 0 до 360 градусов, и одни и те же массивы имеют смещение 180 градусов, поскольку с обеих сторон производится выборка одних и тех же элементов. На этом изображении проекций веерной балки можно сопоставить элементы с теми же элементами на изображении проекций параллельной балки, приведенном выше.
imagesc(fan_rot_angles3, sensor_pos3, F3) colormap(hot) colorbar xlabel('Fan Rotation Angle (degrees)') ylabel('Fan Sensor Position (degrees)')

Сопоставьте расстояние между вентиляторами и датчиками в каждой реконструкции с расстоянием, используемым для создания каждого из синтетических выступов. В реальном случае вы знаете геометрию ваших передатчиков и датчиков, но не исходное изображение, P.
Изменение значения «FanSensorSpacing» эффективно изменяет количество датчиков, используемых при каждом угле поворота. Для каждой из этих вентиляторно-лучевых реконструкций используются одни и те же углы поворота. Это в отличие от реконструкций с параллельным лучом, в каждой из которых использовались различные углы поворота.
Обратите внимание, что параметр FanSensorSpacing является только одним из нескольких параметров, которыми можно управлять при использовании fanbeam и ifanbeam. Можно также преобразовать данные проекции параллельного и веерного луча с помощью функций fan2para и para2fan.
Ifan1 = ifanbeam(F1,D,'FanSensorSpacing',dsensor1,'OutputSize',output_size); Ifan2 = ifanbeam(F2,D,'FanSensorSpacing',dsensor2,'OutputSize',output_size); Ifan3 = ifanbeam(F3,D,'FanSensorSpacing',dsensor3,'OutputSize',output_size); figure montage({Ifan1,Ifan2,Ifan3},'Size',[1 3]) title('Reconstruction from Fan Beam Projection with 18, 24, and 90 Projection Angles')
