parallel_beam_geometry¶
- odl.tomo.geometry.parallel.parallel_beam_geometry(space, num_angles=None, det_shape=None)[source]¶
Create default parallel beam geometry from
space
.This is intended for simple test cases where users do not need the full flexibility of the geometries, but simply want a geometry that works.
This default geometry gives a fully sampled sinogram according to the Nyquist criterion, which in general results in a very large number of samples. In particular, a
space
that is not centered at the origin can result in very large detectors.- Parameters:
- space
DiscretizedSpace
Reconstruction space, the space of the volumetric data to be projected. Needs to be 2d or 3d.
- num_anglesint, optional
Number of angles. Default: Enough to fully sample the data, see Notes.
- det_shapeint or sequence of int, optional
Number of detector pixels. Default: Enough to fully sample the data, see Notes.
- space
- Returns:
- geometry
ParallelBeamGeometry
If
space
is 2d, return aParallel2dGeometry
. Ifspace
is 3d, return aParallel3dAxisGeometry
.
- geometry
Notes
According to [NW2001], pages 72--74, a function that has compact support
and is essentially bandlimited
can be fully reconstructed from a parallel beam ray transform if (1) the projection angles are sampled with a spacing of such that
and (2) the detector is sampled with an interval that satisfies
The geometry returned by this function satisfies these conditions exactly.
If the domain is 3-dimensional, the geometry is "separable", in that each slice along the z-dimension of the data is treated as independed 2d data.
References
[NW2001]Natterer, F and Wuebbeling, F. Mathematical Methods in Image Reconstruction. SIAM, 2001. https://dx.doi.org/10.1137/1.9780898718324
Examples
Create a parallel beam geometry from a 2d space:
>>> space = odl.uniform_discr([-1, -1], [1, 1], (20, 20)) >>> geometry = parallel_beam_geometry(space) >>> geometry.angles.size 45 >>> geometry.detector.size 31