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
spaceDiscretizedSpace

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.

Returns
geometryParallelBeamGeometry

If space is 2d, return a Parallel2dGeometry. If space is 3d, return a Parallel3dAxisGeometry.

Notes

According to [NW2001], pages 72–74, a function f : \mathbb{R}^2 \to \mathbb{R} that has compact support

\| x \| > \rho  \implies f(x) = 0,

and is essentially bandlimited

\| \xi \| > \Omega \implies \hat{f}(\xi) \approx 0,

can be fully reconstructed from a parallel beam ray transform if (1) the projection angles are sampled with a spacing of \Delta \psi such that

\Delta \psi \leq \frac{\pi}{\rho \Omega},

and (2) the detector is sampled with an interval \Delta s that satisfies

\Delta s \leq \frac{\pi}{\Omega}.

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