Для получения информации о создании данных о проекции из линейных интегралов вдоль параллельных путей смотрите Преобразование Радона. Чтобы преобразовать данные о проекции луча вентилятора в данные о проекции параллельного луча, используйте функцию fan2para
.
Функция fanbeam
вычисляет проекции матрицы изображений вдоль заданных направлений. Проекция двумерной функции f (x, y) является набором линейных интегралов. Функция fanbeam
вычисляет линейные интегралы вдоль путей, которые исходят из одного источника, формируя форму вентилятора. Чтобы представлять изображение, функция fanbeam
берет несколько проекций изображения от различных углов путем вращения источника вокруг центра изображения. Следующие данные показывают одну проекцию луча вентилятора в заданном угле поворота.
Проекция луча вентилятора в тете угла поворота
Когда вы вычисляете данные о проекции луча вентилятора с помощью функции fanbeam
, вы задаете в качестве аргументов изображение и расстояние между вершиной проекций луча вентилятора и центром вращения (центральный пиксель в изображении). Функция fanbeam
определяет количество лучей, на основе размера изображения и настроек параметров fanbeam
.
Параметр FanSensorGeometry
задает, как выравниваются датчики: 'arc'
или 'line'
.
Геометрия датчика вентилятора | Описание |
---|---|
'arc' | fanbeam располагает датчики вдоль дуги, располагая датчики с интервалами в 1 интервале степени. Используйте параметр FanSensorSpacing , чтобы управлять расстоянием между датчиками путем определения угла между каждым лучом. Это - геометрия датчика вентилятора по умолчанию. |
'line' | Датчики положения fanbeam вдоль прямой линии, а не дуга. Используйте параметр FanSensorSpacing , чтобы задать расстояние между датчиками, в пикселях, вдоль x´ ось. |
Параметр FanRotationIncrement
задает шаг угла поворота. По умолчанию fanbeam
берет проекции под различными углами путем вращения источника вокруг центрального пикселя в 1 интервале степени.
Следующие фигуры иллюстрируют оба этих конфигураций. Первая фигура иллюстрирует геометрию, используемую функцией fanbeam
, когда FanSensorGeometry
установлен в 'arc'
(значение по умолчанию). Отметьте, как вы задаете расстояние между датчиками путем определения углового интервала лучей.
Проекция луча вентилятора с геометрией дуги
Следующая фигура иллюстрирует геометрию, используемую функцией fanbeam
, когда FanSensorGeometry
установлен в 'line'
. В этой фигуре отметьте, как вы задаете положение датчиков путем определения расстояния между ними в пикселях вдоль x´ ось.
Проекция луча вентилятора с геометрией строки
Чтобы восстановить изображение от данных о проекции луча вентилятора, используйте функцию ifanbeam
. С этой функцией вы задаете в качестве аргументов данные о проекции и расстояние между вершиной проекций луча вентилятора и центром вращения, когда данные о проекции были созданы. Например, этот код воссоздает изображение I
от данных о проекции P
и расстояние D
.
I = ifanbeam(P,D);
По умолчанию функция ifanbeam
принимает, что данные о проекции луча вентилятора были созданы с помощью геометрии датчика вентилятора дуги с лучами, расположенными с интервалами под 1 углом степени и проекциями, взятыми в 1 шаге степени в полных 360 областях значений степени. Как с функцией fanbeam
, можно использовать параметры ifanbeam
, чтобы задать другие значения для этих характеристик данных о проекции. Используйте те же значения для этих параметров, которые использовались, когда данные о проекции были созданы. Для получения дополнительной информации об этих параметрах, смотрите ifanbeam
.
Функция ifanbeam
преобразовывает данные о проекции луча вентилятора в данные о проекции параллельного луча с функцией fan2para
, и затем вызывает функцию iradon
, чтобы выполнить реконструкцию изображений. Поэтому функция ifanfeam
поддерживает определенные параметры iradon
, которые она передает функции iradon
. Смотрите Обратное Преобразование Радона для получения дополнительной информации о функции iradon
.
Этот пример показывает, как использовать fanbeam
и ifanbeam
, чтобы сформировать проекции из демонстрационного изображения и затем восстановить изображение от проекций.
Сгенерируйте тестовое изображение и отобразите его. Тестовое изображение является фантомом главы Shepp-Логана, который может быть сгенерирован функцией phantom
. Фантомное изображение иллюстрирует многие качества, которые найдены в реальной томографической обработке изображений человеческих голов.
P = phantom(256); imshow(P)
Вычислите данные о проекции луча вентилятора тестового изображения, с помощью параметра FanSensorSpacing
, чтобы отличаться интервал датчика. Пример использует геометрию дуги fanbeam, таким образом, вы задаете интервал между датчиками путем определения углового интервала лучей. Первый вызов располагает лучи с интервалами в 2 градусах; второе в 1 степени; и третье в 0,25 градусах. В каждом вызове расстояние между центром вращения и вершиной проекций является постоянным на уровне 250 пикселей. Кроме того, fanbeam
вращает проекцию вокруг центрального пикселя в 1 шаге степени.
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
. Поскольку fanbeam
вычисляет данные о проекции в углах поворота от 0 до 360 градусов, те же шаблоны происходят при смещении 180 градусов. Те же функции выбираются с обеих сторон.
figure, imagesc(fan_rot_angles3, sensor_pos3, F3) colormap(hot); colorbar xlabel('Fan Rotation Angle (degrees)') ylabel('Fan Sensor Position (degrees)')
Восстановите изображение от данных о проекции луча вентилятора с помощью ifanbeam
. В каждой реконструкции совпадайте с интервалом датчика вентилятора интервалу, используемому, когда данные о проекции были созданы ранее. Пример использует параметр OutputSize
, чтобы ограничить выходной размер каждой реконструкции совпадать с размером оригинального изображения P
. В выводе отметьте, как качество реконструкции поправляется как количество лучей в увеличениях проекции. Первое изображение, Ifan1
, было создано с помощью 2 интервалов степени лучей; второе изображение, Ifan2
, было создано с помощью 1 интервала степени лучей; третье изображение, Ifan3
, было создано с помощью 0,25 интервалов лучей.
output_size = max(size(P)); Ifan1 = ifanbeam(F1,D, ... 'FanSensorSpacing',dsensor1,'OutputSize',output_size); figure, imshow(Ifan1) title('Ifan1')
Ifan2 = ifanbeam(F2,D, ... 'FanSensorSpacing',dsensor2,'OutputSize',output_size); figure, imshow(Ifan2) title('Ifan2')
Ifan3 = ifanbeam(F3,D, ... 'FanSensorSpacing',dsensor3,'OutputSize',output_size); figure, imshow(Ifan3) title('Ifan3')