summaryrefslogtreecommitdiffstats
path: root/samples/s005_3d_geometry.m
diff options
context:
space:
mode:
Diffstat (limited to 'samples/s005_3d_geometry.m')
-rw-r--r--samples/s005_3d_geometry.m98
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);
+