diff options
Diffstat (limited to 'samples/s004_cpu_reconstruction.m')
-rw-r--r-- | samples/s004_cpu_reconstruction.m | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/samples/s004_cpu_reconstruction.m b/samples/s004_cpu_reconstruction.m new file mode 100644 index 0000000..69414e2 --- /dev/null +++ b/samples/s004_cpu_reconstruction.m @@ -0,0 +1,60 @@ +%------------------------------------------------------------------------ +% This file is part of the +% All Scale Tomographic Reconstruction Antwerp Toolbox ("ASTRA-Toolbox") +% +% Copyright: iMinds-Vision Lab, University of Antwerp +% License: Open Source under GPLv3 +% Contact: mailto:astra@ua.ac.be +% Website: http://astra.ua.ac.be +%------------------------------------------------------------------------ + +vol_geom = astra_create_vol_geom(256, 256); +proj_geom = astra_create_proj_geom('parallel', 1.0, 384, linspace2(0,pi,180)); + +% For CPU-based algorithms, a "projector" object specifies the projection +% model used. In this case, we use the "strip" model. +proj_id = astra_create_projector('strip', proj_geom, vol_geom); + +% Create a sinogram from a phantom +P = phantom(256); +[sinogram_id, sinogram] = astra_create_sino(P, proj_id); +figure(1); imshow(P, []); +figure(2); imshow(sinogram, []); + +astra_mex_data2d('delete', sinogram_id); + +% We now re-create the sinogram data object as we would do when loading +% an external sinogram +sinogram_id = astra_mex_data2d('create', '-sino', proj_geom, sinogram); + +% Create a data object for the reconstruction +rec_id = astra_mex_data2d('create', '-vol', vol_geom); + +% Set up the parameters for a reconstruction algorithm using the CPU +% The main difference with the configuration of a GPU algorithm is the +% extra ProjectorId setting. +cfg = astra_struct('SIRT'); +cfg.ReconstructionDataId = rec_id; +cfg.ProjectionDataId = sinogram_id; +cfg.ProjectorId = proj_id; + +% Available algorithms: +% ART, SART, SIRT, CGLS, FBP + + +% Create the algorithm object from the configuration structure +alg_id = astra_mex_algorithm('create', cfg); + +% Run 20 iterations of the algorithm +% This will have a runtime in the order of 10 seconds. +astra_mex_algorithm('iterate', alg_id, 20); + +% Get the result +rec = astra_mex_data2d('get', rec_id); +figure(3); imshow(rec, []); + +% Clean up. +astra_mex_projector('delete', proj_id); +astra_mex_algorithm('delete', alg_id); +astra_mex_data2d('delete', rec_id); +astra_mex_data2d('delete', sinogram_id); |