Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

On-Board Radiotherapy CBCT In, Cleaner CT-Like Slices Out, Trained Without Paired Scans

Axial lung and pelvic slices: original CBCT with streaks and shading, RefineCBCT output, and planning CT reference (Lai and He, arXiv:2610.06094, Fig. 6)

Radiotherapy departments acquire a lot of cone-beam CT and mostly use it for one job. The patient is on the couch, the CBCT is matched to the planning CT, the couch is shifted, and treatment goes ahead. Scatter, beam hardening, noise, and truncation leave streaks, shading, and unreliable CT numbers, so CBCT rarely gets used for contouring, dose evaluation, or adaptive planning.

The obvious fix is to train a network that maps CBCT to planning-CT quality. The catch is training data. The CBCT and the planning CT are taken on different days, the patient’s position and organ filling change in between, and even after deformable registration some mismatch remains. Train on those pairs and the leftover mismatch becomes wrong supervision.

Qi Lai (Shenzhen Institutes of Advanced Technology, Chinese Academy of Sciences) and Yutong He (Southern University of Science and Technology) take the unpaired route in arXiv:2610.06094, posted 5 October 2026. Their method, RefineCBCT, learns from CBCT slices and CT slices that do not have to come from matched pairs, and aims to remove artifacts while keeping the anatomy of the treatment day. Code is on GitHub.

What goes in and what comes out

RefineCBCT works on single 2D axial slices. Each slice is padded to a fixed size and normalized, refined, and the slices can be stacked back into a volume for sagittal and coronal viewing. The output, which the paper calls sCBCT, should show fewer streaks, more even soft tissue, and CT numbers closer to the planning CT.

The featured image is Fig. 6 of the paper. In the lung case the original CBCT has heavy streaking across the whole chest wall, and the refined slice looks close to the planning CT. In the pelvic case the CBCT is dark and washed out from scatter, and the refined slice recovers the contrast between bone, muscle, and fat. In that pelvic example the planning CT shows rectal gas that is absent from both the CBCT and the refined slice, which is what you want. The output follows the anatomy of the day the CBCT was taken.

How it works

There are two parts, trained together.

The first is a translation module with two generators, one mapping CT to CBCT and one mapping CBCT to CT, each with its own PatchGAN-style discriminator. A cycle-consistency loss requires that a CT slice translated to CBCT and back ends up where it started, and the same for CBCT. This is the CycleGAN idea, and it is what lets the model train without pairs. The CT to CBCT generator produces what the authors call a guidance image, a pseudo-label that carries anatomy into the next stage.

The second part is a conditional diffusion model that runs only four reverse steps (K = 4), far shorter than the long sampling chains of standard diffusion models. At each step the generator sees the noisy image concatenated with the guidance image and predicts a clean estimate. A time-conditional discriminator judges whether each reverse step looks like a real diffusion transition, a design shared with SynDiff, the adversarial diffusion model the released code is built on. An L1 reconstruction term keeps the output close to the CBCT content so the model does not lean on the guidance alone. The pseudo-labels keep changing during training as both parts learn together.

In the ablation on the lung data, the diffusion backbone alone reached 21.152 dB PSNR and 0.451 SSIM. Adding the translation module raised that to 26.394 dB and 0.801, and adding the cycle-consistency loss gave 30.473 dB and 0.915. Inference time went from 0.301 to 0.342 seconds across those three variants. The paper does not state the GPU used.

Data and results

Both datasets are public on The Cancer Imaging Archive. The lung set has 20 patients and 6,721 slices from a 4D lung imaging collection of non-small-cell lung cancer patients. The pelvic set has 58 patients and 3,850 slices. Slices are 512 x 512. Each set contains CBCT and planning CT for the same patients, but the authors trained as if the pairs did not exist and used the planning CT only as the reference for scoring.

They compared against eight unpaired methods: CycleGAN, CUT, DCLGAN, SynDiff, FGDM, DiffusionMBIR, WIA-LD2ND, and TLIR. On the lung set RefineCBCT was best on all four image metrics, with MAE 19.411 against 26.874 for the next best method (DiffusionMBIR), and SSIM 0.931 against 0.897. On the pelvic set it was best on MAE, PSNR, and SSIM (14.905, 36.671 dB, and 0.876) and second on RMSE, where SynDiff was slightly lower (54.729 against 55.263). The gains are larger on lung, where the artifacts are worse to begin with.

For CT-number fidelity the paper plots HU line profiles through soft tissue and bone, and HU distributions inside bone and soft-tissue regions placed at matching locations. In both datasets the refined values sit closer to the planning CT and spread less than the original CBCT.

They also ran one downstream test, object detection with YOLOv8, on original and corrected slices. On lung, detection mAP went from 0.529 on raw CBCT to 0.779 after RefineCBCT, and IoU from 0.189 to 0.735. On pelvis, IoU went from 0.559 to 0.830 (best of all methods) and mAP from 0.799 to 0.939, second to DiffusionMBIR at 0.941.

What I would check before using it

The released code is thin. The repository has train.py, test.py, dataset.py, and utilities, and as of 6 October 2026 the README is still largely the SynDiff README it was built from. Its example commands use MRI contrasts (T1, T2), and the pretrained weights it links are SynDiff’s MRI models, not CBCT weights. The paper says trained weights have been published, but I did not find CBCT checkpoints in the repository.

The inference input needs a close look. The paper’s implementation details say that for each input CT slice a guidance image is generated, and that diffusion sampling starts from Gaussian noise. The released test.py follows that pattern: with its default flags (contrast1 = CBCT, contrast2 = CT) it loads aligned CBCT and CT arrays, conditions the generator on the CT array, and scores the output against the CBCT array. For a clinic, the useful setup is a CBCT going in alone, with no same-day CT. Before you plan around this, confirm which input the trained model needs at inference.

The authors list their own limits. Both datasets are small, the model is 2D and does not model neighboring slices, the planning CT reference carries its own mismatch with the CBCT, and segmentation, dose calculation, and adaptive planning were not tested. The paper does not describe the train and test split by patient. They write that the results show “technical feasibility rather than direct clinical benefit” and that performance across scanners, institutions, and imaging protocols still needs validation. The sagittal and coronal reconstructions in Fig. 8 show no obvious seams between slices, but the paper does not measure through-plane consistency.

Where this fits in a radiotherapy viewer

If I were adding this to a treatment-review viewer, I would show the refined CBCT as a separate derived series next to the original, never in place of it, and tag it in the DICOM header as machine-generated. A side-by-side or swipe view against the original CBCT and the planning CT lets a physicist see what changed. The per-slice design should be cheap to run on a series as it arrives, and stacking the output back into a volume gives you the multiplanar views the team already uses for registration review.

The first use I would test is contouring support, because propagated contours on a cleaner CBCT are easier to check by eye. Dose recalculation on the refined images would need its own HU calibration and validation, which the paper does not cover.

Code and data availability

Code is public at github.com/Lai-KK/RefineCBCT (PyTorch, adapted from SynDiff). The lung and pelvic CBCT and planning CT data are available from The Cancer Imaging Archive. As of 6 October 2026 the repository does not include CBCT model weights or a CBCT-specific README.

Sources

  • Lai, Q., He, Y. Anatomy-preserving unpaired cone-beam CT refinement for image-guided radiotherapy using pseudo-label guided diffusion. arXiv:2610.06094, 2026. https://arxiv.org/abs/2610.06094. PDF: https://arxiv.org/pdf/2610.06094.
  • Code: https://github.com/Lai-KK/RefineCBCT.
  • Özbey, M., Dalmaz, O., Dar, S. U. H., Bedel, H. A., Öztürk, Ş., Güngör, A., Çukur, T. Unsupervised medical image translation with adversarial diffusion models (SynDiff). IEEE Transactions on Medical Imaging, 2023.
  • Hugo, G. D., et al. Data from 4D Lung Imaging of NSCLC Patients. The Cancer Imaging Archive, 2016. https://doi.org/10.7937/K9/TCIA.2016.ELN8YGLE.
  • Featured image: Fig. 6 (a, b) of arXiv:2610.06094, axial slices of the original CBCT, the RefineCBCT output, and the planning CT for a lung case and a pelvic case.

We build custom medical imaging platforms — advanced DICOM viewers, AI segmentation, and the clinical systems around them.

Get in Touch

Copyright © 2026 PYCAD. All Rights Reserved.