Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Reconstrucción de una imagen a partir de datos de proyección

En este ejemplo se muestra cómo utilizar , , , y formar proyecciones a partir de una imagen de ejemplo y, a continuación, reconstruir la imagen a partir de las proyecciones.radoniradonfanbeamifanbeam Mientras y utilice una geometría de viga paralela para las proyecciones y utilice una geometría de viga de ventilador.radoniradonfanbeamifanbeam Para comparar geometrías de viga paralela y viga de ventilador, los ejemplos siguientes crean proyecciones sintéticas para cada geometría y, a continuación, utilizan esas proyecciones sintéticas para reconstruir la imagen original.

Una aplicación del mundo real que requiere reconstrucción de la imagen es la tomografía de absorción de rayos X donde las proyecciones se forman midiendo la atenuación de la radiación que pasa a través de una muestra física en diferentes ángulos. La imagen original se puede considerar como una sección transversal a través de la muestra en la que los valores de intensidad representan la densidad de la muestra. Las proyecciones son recogidas por dispositivos de imágenes médicas especiales y luego una imagen interna de la muestra se reconstruye usando o .iradonifanbeam

La función reconstruye una imagen a partir de proyecciones de vigas paralelas.iradon En la geometría de viga paralela, cada proyección se forma combinando un conjunto de integrales de línea a través de una imagen en un ángulo específico. La función reconstruye una imagen a partir de proyecciones de haz de ventilador, que tienen un emisor y varios sensores.ifanbeam

Consulte la Guía del usuario de image Processing Toolbox™ para ver los diagramas que ilustran ambas geometrías.

Crear Head Phantom

La imagen de prueba es el fantasma de cabeza Shepp-Logan que se puede generar utilizando la función .phantom La imagen fantasma ilustra muchas cualidades que se encuentran en las imágenes tomográficas del mundo real de las cabezas humanas. La brillante concha elíptica a lo largo del exterior es análoga a un cráneo y las muchas elipses en su interior son análogas a las características cerebrales o tumores.

P = phantom(256); imshow(P)

Viga paralela - Calcular proyecciones sintéticas

Calcule proyecciones sintéticas utilizando geometría de viga paralela y varíe el número de ángulos de proyección. Para cada una de estas llamadas a , la salida es una matriz en la que cada columna es la transformación Radon para uno de los ángulos en el correspondiente.radonTheta

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 

Tenga en cuenta que para cada ángulo, la proyección se calcula en puntos a lo largo del eje xp, donde hay una constante que depende de la distancia diagonal de la imagen de modo que cada píxel se proyectará para todos los ángulos de proyección posibles.NN

N_R1 = size(R1,1)
N_R1 = 367 
N_R2 = size(R2,1)
N_R2 = 367 
N_R3 = size(R3,1)
N_R3 = 367 

Por lo tanto, si utiliza un fantasma de cabeza más pequeño, la proyección debe calcularse en menos puntos a lo largo del eje xp.

P_128 = phantom(128); [R_128,xp_128] = radon(P_128,theta1); N_128 = size(R_128,1)
N_128 = 185 

Visualizar los datos de proyección .R3 Algunas de las características de la imagen fantasma original son visibles en la imagen de .R3 La primera columna de corresponde a una proyección a 0 grados, que se está integrando en la dirección vertical.R3 La columna más central corresponde a una proyección a 90 grados, que se está integrando en las direcciones horizontales. La proyección a 90 grados tiene un perfil más ancho que la proyección a 0 grados debido al gran semieje vertical de la elipse más externa del fantasma.

imagesc(theta3,xp,R3) colormap(hot) colorbar xlabel('Parallel Rotation Angle - \theta (degrees)');  ylabel('Parallel Sensor Position - x\prime (pixels)');

Rayo paralelo - Reconstruir cabeza fantasma a partir de datos de proyección

Haga coincidir el incremento de rotación paralelo, , en cada reconstrucción con la utilizada anteriormente para crear las proyecciones sintéticas correspondientes.dtheta En un caso del mundo real, conocería la geometría de sus transmisores y sensores, pero no la imagen de origen, .P

Las tres reconstrucciones siguientes ( , , y ) muestran el efecto de variar el número de ángulos en los que se realizan las proyecciones.I1I2I3 Para y algunas características que eran visibles en el fantasma original no están claras.I1I2 Específicamente, mire las tres elipses en la parte inferior de cada imagen. El resultado es muy similar a la imagen original, .I3P

Observe los artefactos significativos presentes en y .I1I2 Para evitar estos artefactos, utilice un mayor número de ángulos.

% 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')

Haz de ventilador - Calcular proyecciones sintéticas

Calcule las proyecciones sintéticas utilizando la geometría del haz de ventilador y varíe el '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);

Visualizar los datos de proyección .F3 Observe que los ángulos de rotación del ventilador oscilan entre 0 y 360 grados y que los mismos patrones se producen con un desplazamiento de 180 grados porque se muestrean las mismas entidades desde ambos lados. Puede correlacionar entidades en esta imagen de proyecciones de haz de ventilador con las mismas entidades en la imagen de proyecciones de haz paralelo, arriba.

imagesc(fan_rot_angles3, sensor_pos3, F3) colormap(hot) colorbar xlabel('Fan Rotation Angle (degrees)') ylabel('Fan Sensor Position (degrees)')

Fan Beam - Reconstruir Head Phantom a partir de Datos de Proyección

Haga coincidir el espacio entre el ventilador y el sensor en cada reconstrucción con el utilizado para crear cada una de las proyecciones sintéticas. En un caso del mundo real, conocería la geometría de sus transmisores y sensores, pero no la imagen de origen, .P

Cambiar el valor del 'FanSensorSpacing' cambia efectivamente el número de sensores utilizados en cada ángulo de rotación. Para cada una de estas reconstrucciones de haz de ventilador, se utilizan los mismos ángulos de rotación. Esto contrasta con las reconstrucciones de vigas paralelas que cada una utilizó diferentes ángulos de rotación.

Tenga en cuenta que 'FanSensorSpacing' es solo un parámetro de varios que puede controlar al usar y .fanbeamifanbeam También puede convertir entre datos de proyección de haz de ventilador y paralelo utilizando las funciones y .fan2parapara2fan

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')