A Deep Learning-based Partial Volume Effect correction method, for Single Photon Emission Computed Tomography (SPECT).
If you use this in your research, please cite:
@article{kaprelian2025PVCNet,
title={Partial Volume Correction of SPECT Images With Deep Learning Trained on Synthetic Data},
author={Kaprélian, Théo and Etxebeste, Ane and Sarrut, David},
journal={IEEE Transactions on Radiation and Plasma Medical Sciences},
year={2025},
doi={10.1109/TRPMS.2025.3634484}
}
To generate a synthetic dataset of Lu177 sinograms, refer to this repository
The generated dataset should be in .h5 format. Each sample should be a five letter keys (like "ABCDE"). For each sample the training dataset should contain the following keys:
- "PVfree_att" key containing the ground truth sinogram without PVE (no collimator-detector modeled) obtained with attenuated forward-projection
- "PVE_att"
- "PVE_noisy"
- "rec_fp_att"
- "attmap_fp"
- "rec"
- "attmap_4mm"
- "PVCNet_rec"
To train a PVCNet, use this command:
python train.py --json configs/config_file.json --output EXAMPLE_REF --output_folder /output/folder/
Two main types of config files:
Use a file similar to configs/config_PVCNet_sino.json, i.e.:
- with a dataset/test_dataset containing the sinogram keys (PVfree_att, PVE_att, PVE_noisy, rec_fp_att, attmap_fp)
Two choices:
-
Either with 2 NN (one for denoising, one for PVC). Set
"network": "unet_denoiser_pvc", -
Either with 1 NN. Set
"network": "unet",
Use a config file similar to configs/config_PVCNet_img.json.
Once again two choices:
-
Use only "rec" (the reconstructed image with RM) and the attenuation map as input, then set
"with_PVCNet_rec": false
This is the PVCNet-img.
-
Also use "PVCNet_rec" as input, then set
"with_PVCNet_rec": true
Then, it is the PVCNet-hybrid because it uses the image reconstructed from the sinogram corrected by a previously trained PVCNet-sino.
python apply.py --input projections.mha --input_rec_fp projections_rec_fp.mha \\
--attmap_fp attmap_fp.mha --pth path/to/network.pth\\
--output output_projections.mha
python apply.py --input rec.mhd --attmap_fp attmap_4mm.mha \\
--pth path/to/network.pth\\
--output output_image.mha
python apply.py --input rec.mhd --input_rec_fp rec_noRM_PVCNet_sino_751113.mhd\\
--attmap_fp attmap_4mm.mha --pth path/to/network.pth\\
--output output_image.mha
Examples of trained models can be found in the "pth" folder