helical_geometry

odl.tomo.geometry.conebeam.helical_geometry(space, src_radius, det_radius, num_turns, n_pi=1, num_angles=None, det_shape=None)[source]

Create a default helical geometry from space.

This function is intended for simple test cases where users do not need the full flexibility of the geometries, but simply wants a geometry that works.

The geometry returned by this function has equidistant angles that lie (strictly) between 0 and 2 * pi * num_turns. The detector is centered around 0, and its size is chosen such that the whole space is covered with lines.

The number of angles and detector elements is chosen such that the resulting sinogram is fully sampled 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 since the latter is always origin-centered.

Parameters:
spaceDiscretizedSpace

Reconstruction space, the space of the volumetric data to be projected. Must be 3-dimensional.

src_radiusnonnegative float

Radius of the source circle. Must be larger than the radius of the smallest vertical cylinder containing space.domain, i.e., the source must be outside the volume for all rotations.

det_radiusnonnegative float

Radius of the detector circle.

num_turnspositive float

Total number of helical turns.

num_anglesint, optional

Number of angles. Default: Enough to fully sample the data, see Notes.

n_piodd int, optional

Total number of half rotations to include in the window. Values larger than 1 should be used if the pitch is much smaller than the detector height.

det_shapeint or sequence of ints, optional

Number of detector pixels. Default: Enough to fully sample the data, see Notes.

Returns:
geometryConeBeamGeometry

Projection geometry with equidistant angles and zero-centered detector as determined by sampling criteria.

Notes

In the "fan beam direction", the sampling exactly follows the two-dimensional case see cone_beam_geometry for a description.

In the "axial direction", e.g. along the [0, 0, 1] axis, the geometry is sampled according to two criteria. First, the bounds of the detector are chosen to satisfy the tuy condition. See [TSS1998] for a full description.

Second, the sampling rate is selected according to the nyquist criterion to give a full sampling. This is done by sampling such that the pixel size is half of the size of the projection of the smallest voxel onto the detector.

References

[TSS1998] Tam, K C, Samarasekera, S and Sauer, F. Exact cone beam CT with a spiral scan. Physics in Medicine & Biology 4 (1998), p 1015.

Examples

Create a helical beam geometry from space:

>>> space = odl.uniform_discr([-1, -1, -1], [1, 1, 1], (20, 20, 20))
>>> geometry = helical_geometry(space, src_radius=5, det_radius=5,
...                             num_turns=3)
>>> geometry.angles.size
234
>>> geometry.detector.shape
(57, 9)