diff options
author | Willem Jan Palenstijn <wjp@usecode.org> | 2015-02-26 16:30:43 +0100 |
---|---|---|
committer | Willem Jan Palenstijn <wjp@usecode.org> | 2015-02-26 16:30:43 +0100 |
commit | 9e2bb413a937aefe57f4fcf343413543ae57258a (patch) | |
tree | f4d87d40ae17775e4e3c744476d31d56b5dba64b /samples/python/s012_masks.py | |
parent | 0ca00f4c671d6d583ae77838d3e0d4fcd411f077 (diff) | |
parent | e0aca18f687e9f49223ffb24b9be354bed4b150a (diff) | |
download | astra-9e2bb413a937aefe57f4fcf343413543ae57258a.tar.gz astra-9e2bb413a937aefe57f4fcf343413543ae57258a.tar.bz2 astra-9e2bb413a937aefe57f4fcf343413543ae57258a.tar.xz astra-9e2bb413a937aefe57f4fcf343413543ae57258a.zip |
Merge pull request #16 from dmpelt/python-interface
Add Python interface
Diffstat (limited to 'samples/python/s012_masks.py')
-rw-r--r-- | samples/python/s012_masks.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/samples/python/s012_masks.py b/samples/python/s012_masks.py new file mode 100644 index 0000000..441d11b --- /dev/null +++ b/samples/python/s012_masks.py @@ -0,0 +1,92 @@ +#----------------------------------------------------------------------- +#Copyright 2013 Centrum Wiskunde & Informatica, Amsterdam +# +#Author: Daniel M. Pelt +#Contact: D.M.Pelt@cwi.nl +#Website: http://dmpelt.github.io/pyastratoolbox/ +# +# +#This file is part of the Python interface to the +#All Scale Tomographic Reconstruction Antwerp Toolbox ("ASTRA Toolbox"). +# +#The Python interface to the ASTRA Toolbox is free software: you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation, either version 3 of the License, or +#(at your option) any later version. +# +#The Python interface to the ASTRA Toolbox is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with the Python interface to the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. +# +#----------------------------------------------------------------------- + + +import astra +import numpy as np + +# In this example we will create a reconstruction in a circular region, +# instead of the usual rectangle. + +# This is done by placing a circular mask on the square reconstruction volume: + +c = np.linspace(-127.5,127.5,256) +x, y = np.meshgrid(c,c) +mask = np.array((x**2 + y**2 < 127.5**2),dtype=np.float) + +import pylab +pylab.gray() +pylab.figure(1) +pylab.imshow(mask) + +vol_geom = astra.create_vol_geom(256, 256) +proj_geom = astra.create_proj_geom('parallel', 1.0, 384, np.linspace(0,np.pi,50,False)) + +# As before, create a sinogram from a phantom +import scipy.io +P = scipy.io.loadmat('phantom.mat')['phantom256'] +proj_id = astra.create_projector('line',proj_geom,vol_geom) +sinogram_id, sinogram = astra.create_sino(P, proj_id,useCUDA=True) + +pylab.figure(2) +pylab.imshow(P) +pylab.figure(3) +pylab.imshow(sinogram) + +# Create a data object for the reconstruction +rec_id = astra.data2d.create('-vol', vol_geom) + +# Create a data object for the mask +mask_id = astra.data2d.create('-vol', vol_geom, mask) + +# Set up the parameters for a reconstruction algorithm using the GPU +cfg = astra.astra_dict('SIRT_CUDA') +cfg['ReconstructionDataId'] = rec_id +cfg['ProjectionDataId'] = sinogram_id +cfg['option'] = {} +cfg['option']['ReconstructionMaskId'] = mask_id + +# Create the algorithm object from the configuration structure +alg_id = astra.algorithm.create(cfg) + +# Run 150 iterations of the algorithm +astra.algorithm.run(alg_id, 150) + +# Get the result +rec = astra.data2d.get(rec_id) + +pylab.figure(4) +pylab.imshow(rec) + +pylab.show() + +# Clean up. Note that GPU memory is tied up in the algorithm object, +# and main RAM in the data objects. +astra.algorithm.delete(alg_id) +astra.data2d.delete(mask_id) +astra.data2d.delete(rec_id) +astra.data2d.delete(sinogram_id) +astra.projector.delete(proj_id) |