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