www.gusucode.com > images 案例代码 matlab源码程序 > images/ReconstructImageUsingInverseFanbeamProjectionExample.m
%% Reconstruct Image using Inverse Fanbeam Projection % This example shows how to use |fanbeam| and |ifanbeam| to % form projections from a sample image and then reconstruct the image % from the projections. %% % Generate a test image and display it. The test image is the Shepp-Logan % head phantom, which can be generated by the |phantom| function. The % phantom image illustrates many of the qualities that are found in % real-world tomographic imaging of human heads. % Copyright 2015 The MathWorks, Inc. P = phantom(256); imshow(P) %% % Compute fan-beam projection data of the test image, using the % |FanSensorSpacing| parameter to vary the sensor spacing. The example uses % the fanbeam arc geometry, so you specify the spacing between sensors by % specifying the angular spacing of the beams. The first call spaces the % beams at 2 degrees; the second at 1 degree; and the third at 0.25 % degrees. In each call, the distance between the center of rotation and % vertex of the projections is constant at 250 pixels. In addition, % |fanbeam| rotates the projection around the center pixel at 1 degree % increments. 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); %% % Plot the projection data |F3| . Because |fanbeam| calculates projection % data at rotation angles from 0 to 360 degrees, the same patterns occur at % an offset of 180 degrees. The same features are being sampled from both % sides. figure, imagesc(fan_rot_angles3, sensor_pos3, F3) colormap(hot); colorbar xlabel('Fan Rotation Angle (degrees)') ylabel('Fan Sensor Position (degrees)') %% % Reconstruct the image from the fan-beam projection data using |ifanbeam| % . In each reconstruction, match the fan sensor spacing with the spacing % used when the projection data was created previously. The example uses % the |OutputSize| parameter to constrain the output size of each % reconstruction to be the same as the size of the original image |P| . In % the output, note how the quality of the reconstruction gets better as the % number of beams in the projection increases. The first image, |Ifan1| , % was created using 2 degree spacing of the beams; the second image, % |Ifan2| , was created using 1 degree spacing of the beams; the third % image, |Ifan3| , was created using 0.25 spacing of the beams. 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')