๐ฅ Python CT Simulation on Low Dose/ Limited Angle/ Sparse View Reconstruction using CUDA Astra Toolbox
๐ A comprehensive Python toolkit for CT (Computed Tomography) image processing, sinogram generation, and reconstruction with various noise and artifact simulations.
This project provides two main scripts for CT image processing:
-
๐
sino_creation.py- Interactive CT sinogram creation and reconstruction from DICOM IMA files
-
๐ง
noise_reconstruction.py- Advanced CT reconstruction with noise and artifact simulations
The toolkit supports various CT reconstruction scenarios including normal FBP reconstruction, low-dose CT (LDCT), limited angle reconstruction, and sparse view reconstruction.
- ๐ Load and process DICOM IMA files
- ๐ฏ Generate high-quality sinograms using ASTRA toolbox
- โ Optional FBP reconstruction for verification
- ๐ Visualization comparing original, sinogram, and reconstructed images
- ๐ Batch processing support with glob patterns
- โ๏ธ Configurable preprocessing (Gaussian filtering)
- ๐ Low-Dose CT (LDCT): Simulates reduced radiation dose with Poisson noise
- ๐ Limited Angle: Reconstruction from constrained angular range (default: 120ยฐ)
- ๐ฏ Sparse View: Reconstruction with reduced projection angles
- โญ Normal FBP: High-quality baseline reconstruction
- ๐ Comprehensive visualization comparing all reconstruction types
- ๐ Python 3.7+
- ๐ฎ CUDA-compatible GPU (optional, for faster reconstruction)
- ๐พ Sufficient RAM for processing large CT datasets
# Install required Python packages
pip install numpy matplotlib scikit-image tqdm pydicom
# Install ASTRA Toolbox (for CT reconstruction)
# Option 1: Using conda (recommended) ๐
conda install -c astra-toolbox astra-toolbox
# Option 2: Using pip
pip install astra-toolboxCT_Simulation/
โโโ ๐ sino_creation.py # Sinogram generation script
โโโ ๐ง noise_reconstruction.py # Noise/artifact reconstruction script
โโโ ๐ sample/ # Sample data directory
โ โโโ ๐ฅ sample.IMA # Sample DICOM file
โ โโโ ๐ผ๏ธ *.png # Sample visualizations
โโโ ๐ค output/ # Generated outputs
โ โโโ ๐ sinograms/ # Generated sinograms (.npy)
โ โโโ โญ normal/ # Normal reconstructions
โ โโโ ๐ ldct/ # Low-dose reconstructions
โ โโโ ๐ limited_angle/ # Limited angle reconstructions
โ โโโ ๐ฏ sparse_view/ # Sparse view reconstructions
โ โโโ ๐ visualizations/ # Comparison plots
โโโ ๐ฆ archive/ # Archived/legacy scripts
โโโ ๐ *.log # Processing logs
Generate sinograms from DICOM IMA files with optional reconstruction and visualization.
# Process single IMA file
python sino_creation.py sample/sample.IMA --output_dir ./output
# Process multiple files with pattern matching ๐
python sino_creation.py "sample/*.IMA" --output_dir ./output
# Process with reconstruction verification โ
python sino_creation.py sample/sample.IMA --output_dir ./output --reconstruct
# Process with visualization (includes reconstruction) ๐
python sino_creation.py sample/sample.IMA --output_dir ./output --visualize# Full pipeline with all options ๐
python sino_creation.py "data/*.IMA" \
--output_dir ./results \
--reconstruct \
--visualize \
--verbose \
--log_file processing.log- ๐
input: Input IMA file path or glob pattern - ๐ค
--output_dir, -o: Output directory (default:./output) - โ
--reconstruct, -r: Perform FBP reconstruction for verification - ๐
--visualize, -v: Create comparison visualization - ๐
--verbose: Enable detailed logging (default: True) - ๐
--log_file: Custom log file path (default:sino_creation.log)
- ๐ Sinograms:
output/sinograms/{filename}.npy - ๐ Reconstructions:
output/reconstructions/{filename}.npy(if--reconstruct) - ๐ Visualizations:
output/visualizations/{filename}_comparison.png(if--visualize)
Perform various CT reconstruction methods from existing sinogram files.
# Normal FBP reconstruction only โญ
python noise_reconstruction.py output/sinograms/sample.npy --output_dir ./output
# Enable specific reconstruction types ๐ฏ
python noise_reconstruction.py output/sinograms/sample.npy \
--output_dir ./output \
--ldct \
--limited_angle \
--sparse_view
# Process multiple sinograms with visualization ๐
python noise_reconstruction.py "output/sinograms/*.npy" \
--output_dir ./output \
--ldct \
--limited_angle \
--sparse_view \
--visualize- ๐
input: Input sinogram file (.npy) or glob pattern - ๐ค
--output_dir, -o: Output directory (default:./output) - ๐
--ldct: Enable Low-Dose CT reconstruction - ๐
--limited_angle: Enable Limited Angle reconstruction - ๐ฏ
--sparse_view: Enable Sparse View reconstruction - ๐
--visualize, -v: Create comprehensive comparison visualization - ๐
--verbose: Enable detailed logging (default: True) - ๐
--log_file: Custom log file path (default:noise_reconstruction.log)
- โญ Normal FBP: High-quality baseline reconstruction (always performed)
- ๐ Low-Dose CT (LDCT):
- ๐ Dose reduction factor: 50% (configurable)
- ๐ฒ Poisson noise simulation for photon counting statistics
- ๐ Limited Angle:
- ๐ Angular range: 120ยฐ (configurable)
- ๐ฏ Starting angle: 0ยฐ (configurable)
- ๐ฏ Sparse View:
- ๐ Sampling factor: Every 24th angle (configurable)
- โญ Normal:
output/normal/{filename}.npy - ๐ LDCT:
output/ldct/{filename}.npy(if--ldct) - ๐ Limited Angle:
output/limited_angle/{filename}.npy(if--limited_angle) - ๐ฏ Sparse View:
output/sparse_view/{filename}.npy(if--sparse_view) - ๐ Visualization:
output/visualizations/{filename}_comprehensive.png(if--visualize)
Here's a complete workflow from DICOM file to various reconstructions:
# Step 1: Generate sinogram from DICOM file ๐
python sino_creation.py sample/sample.IMA \
--output_dir ./output \
--visualize
# Step 2: Perform various reconstructions with noise/artifacts ๐ง
python noise_reconstruction.py output/sinograms/sample.npy \
--output_dir ./output \
--ldct \
--limited_angle \
--sparse_view \
--visualize
# Results will be available in: ๐
# - output/sinograms/sample.npy (original sinogram)
# - output/normal/sample.npy (normal reconstruction)
# - output/ldct/sample.npy (low-dose reconstruction)
# - output/limited_angle/sample.npy (limited angle reconstruction)
# - output/sparse_view/sample.npy (sparse view reconstruction)
# - output/visualizations/ (comparison plots)Key parameters can be modified in the script headers:
๐ Sinogram Creation (sino_creation.py):
NUM_ANGLES = 2160 # Number of projection angles
ANGLE_RANGE_DEG = (0.0, 360.0) # Angular range
DETECTOR_SPACING = 1.0 # Detector pixel spacing
APPLY_GAUSSIAN_FILTER = False # Preprocessing filter
GAUSSIAN_SIGMA = 0.4 # Filter parameter๐ง Noise Reconstruction (noise_reconstruction.py):
# Low-dose parameters ๐
DOSE_REDUCTION_FACTOR = 0.5 # 50% dose reduction
POISSON_NOISE_SCALE = 1.0 # Noise scaling
# Limited angle parameters ๐
LIMITED_ANGLE_RANGE_DEG = 120.0 # Angular range
LIMITED_ANGLE_START_DEG = 0.0 # Starting angle
# Sparse view parameters ๐ฏ
SPARSE_VIEW_FACTOR = 24 # Sampling factor- ๐ฎ GPU Acceleration: CUDA-enabled GPUs significantly speed up reconstruction
- ๐พ Memory Usage: Large datasets may require substantial RAM
- โฑ๏ธ Processing Time: Varies with image size and number of angles
- ๐ Sinogram generation: ~1-5 seconds per image
- ๐ FBP reconstruction: ~0.1-1 seconds per reconstruction
Both scripts generate detailed logs:
- ๐
sino_creation.log: Sinogram generation process - ๐ง
noise_reconstruction.log: Reconstruction process
Use --verbose flag for detailed console output. ๐
I compared lots of algorithms, here are a comparison plot:

This project is licensed under the MIT License - see the LICENSE file for details.
Feel free to reach me (Jie) out if you have any questions or suggestions! This is NOT a very professional project, but I'm happy to improve it. ๐
๐ก Tip: Start with the sample data in the
sample/directory to get familiar with the toolkit before processing your own DICOM files!