exponenta event banner

Восстановление изображения из данных проекции

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

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

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

Диаграммы, иллюстрирующие обе геометрии, см. в Руководстве пользователя по обработке изображений Toolbox™.

Создать фантом головки

Тестовый образ представляет собой фантом головки Shepp-Logan, который может быть сгенерирован с помощью функции phantom. Фантомное изображение иллюстрирует многие качества, которые обнаруживаются в реальной томографической визуализации человеческих голов. Яркая эллиптическая оболочка вдоль внешней части аналогична черепу, а многие эллипсы внутри аналогичны особенностям мозга или опухолям.

P = phantom(256);
imshow(P)

Figure contains an axes. The axes contains an object of type image.

Параллельная балка - расчет синтетических проекций

Расчет синтетических проекций с использованием геометрии параллельного луча и изменение количества углов проекции. Для каждого из этих вызовов: 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)');

Figure contains an axes. The axes contains an object of type image.

Параллельная балка - восстановление фантома головки на основе данных проекции

Сопоставьте параллельный поворот с шагом, 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')

Figure contains an axes. The axes with title Reconstruction from Parallel Beam Projection with 18, 24, and 90 Projection Angles contains an object of type image.

Балка вентилятора - расчет синтетических выступов

Рассчитайте синтетические проекции с использованием геометрии веера-луча и измените значение параметра «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)')

Figure contains an axes. The axes contains an object of type image.

Вентиляторная балка - Восстановление фантома головки на основе данных проекции

Сопоставьте расстояние между вентиляторами и датчиками в каждой реконструкции с расстоянием, используемым для создания каждого из синтетических выступов. В реальном случае вы знаете геометрию ваших передатчиков и датчиков, но не исходное изображение, 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')

Figure contains an axes. The axes with title Reconstruction from Fan Beam Projection with 18, 24, and 90 Projection Angles contains an object of type image.