diff options
Diffstat (limited to 'samples/s005_3d_geometry.m')
-rw-r--r-- | samples/s005_3d_geometry.m | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/samples/s005_3d_geometry.m b/samples/s005_3d_geometry.m new file mode 100644 index 0000000..fa959c9 --- /dev/null +++ b/samples/s005_3d_geometry.m @@ -0,0 +1,98 @@ +%------------------------------------------------------------------------ +% 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(64, 64, 64); + + +% There are two main 3d projection geometry types: cone beam and parallel beam. +% Each has a regular variant, and a 'vec' variant. +% The 'vec' variants are completely free in the placement of source/detector, +% while the regular variants assume circular trajectories around the z-axis. + + +% ------------- +% Parallel beam +% ------------- + + +% Circular + +% Parameters: width of detector column, height of detector row, #rows, #columns +angles = linspace2(0, 2*pi, 48); +proj_geom = astra_create_proj_geom('parallel3d', 1.0, 1.0, 32, 64, angles); + + +% Free + +% We generate the same geometry as the circular one above. +vectors = zeros(numel(angles), 12); +for i = 1:numel(angles) + % ray direction + vectors(i,1) = sin(angles(i)); + vectors(i,2) = -cos(angles(i)); + vectors(i,3) = 0; + + % center of detector + vectors(i,4:6) = 0; + + % vector from detector pixel (0,0) to (0,1) + vectors(i,7) = cos(angles(i)); + vectors(i,8) = sin(angles(i)); + vectors(i,9) = 0; + + % vector from detector pixel (0,0) to (1,0) + vectors(i,10) = 0; + vectors(i,11) = 0; + vectors(i,12) = 1; +end + +% Parameters: #rows, #columns, vectors +proj_geom = astra_create_proj_geom('parallel3d_vec', 32, 64, vectors); + +% ---------- +% Cone beam +% ---------- + + +% Circular + +% Parameters: width of detector column, height of detector row, #rows, #columns, +% angles, distance source-origin, distance origin-detector +angles = linspace2(0, 2*pi, 48); +proj_geom = astra_create_proj_geom('cone', 1.0, 1.0, 32, 64, ... + angles, 1000, 0); + +% Free + +vectors = zeros(numel(angles), 12); +for i = 1:numel(angles) + + % source + vectors(i,1) = sin(angles(i)) * 1000; + vectors(i,2) = -cos(angles(i)) * 1000; + vectors(i,3) = 0; + + % center of detector + vectors(i,4:6) = 0; + + % vector from detector pixel (0,0) to (0,1) + vectors(i,7) = cos(angles(i)); + vectors(i,8) = sin(angles(i)); + vectors(i,9) = 0; + + % vector from detector pixel (0,0) to (1,0) + vectors(i,10) = 0; + vectors(i,11) = 0; + vectors(i,12) = 1; +end + +% Parameters: #rows, #columns, vectors +proj_geom = astra_create_proj_geom('cone_vec', 32, 64, vectors); + |