CGLS

This is a CPU implementation of the Conjugate Gradient Least Squares (CGLS) algorithm for 2D data sets. It takes projection data and an initial reconstruction as input, and returns the reconstruction after a specified number of CGLS iterations.

The internal state of the CGLS algorithm is NOT reset between astra.algorithm.run/astra_mex_algorithm('iterate') calls. Updating the contents of the projection data and reconstruction data astra_mex_data2d objects between these calls will produce undefined behavior.

Supported geometries: parallel, parallel_vec, fanflat, fanflat_vec, matrix.

Configuration options

Name

Description

ProjectorId

Projector object ID.

ProjectionDataId

Projection data object ID.

ReconstructionDataId

ID of data object to store the result. The content of this data is used as the initial reconstruction.

option.SinogramMaskId

If specified, data object ID of a projection-data-sized volume to be used as a mask.

option.ReconstructionMaskId

If specified, data object ID of a volume-data-sized volume to be used as a mask.

Example

import astra
import matplotlib.pyplot as plt
import numpy as np

# Create geometries and projector
N = 256
N_ANGLES = 180
det_spacing = 1.0
angles = np.linspace(0, np.pi, N_ANGLES)
proj_geom = astra.create_proj_geom('parallel', det_spacing, N, angles)
vol_geom = astra.create_vol_geom(N, N)
projector_id = astra.create_projector('linear', proj_geom, vol_geom)

# Generate phantom image
phantom_id, phantom = astra.data2d.shepp_logan(vol_geom)

# Create forward projection
sinogram_id, sinogram = astra.create_sino(phantom_id, projector_id)

# Reconstruct
recon_id = astra.data2d.create('-vol', vol_geom)
cfg = astra.astra_dict('CGLS')
cfg['ProjectorId'] = projector_id
cfg['ProjectionDataId'] = sinogram_id
cfg['ReconstructionDataId'] = recon_id
algorithm_id = astra.algorithm.create(cfg)

astra.algorithm.run(algorithm_id, iterations=100)

reconstruction = astra.data2d.get(recon_id)
plt.imshow(reconstruction, cmap='gray')

# Clean up
astra.data2d.delete([sinogram_id, recon_id, phantom_id])
astra.projector.delete(projector_id)
astra.algorithm.delete(algorithm_id)