Synthetic GAN Volume Export
This example writes a generated CT volume as both NIfTI and DICOM while preserving the geometry of an original image. It is useful for GAN audit studies, visual review, and downstream pipelines that expect DICOM slices.
Workflow
- Load or generate a synthetic volume in
(z, y, x)order. - Copy geometry from an original image or DICOM series.
- Write outputs with synthetic identifiers.
- Save a manifest for reproducibility.
Example
import numpy as np
import SimpleITK as sitk
from fyron.audit import create_provenance_manifest, write_manifest
from fyron.dicom.synthetic import (
write_synthetic_dicom_series,
write_synthetic_nifti,
)
reference_nifti = sitk.ReadImage("data/original/case_001/ct.nii.gz")
generated_hu = np.load("models/gan_outputs/case_001.npy")
nifti_path = write_synthetic_nifti(
volume=generated_hu,
output_path="outputs/case_001/synthetic_ct.nii.gz",
reference_image=reference_nifti,
metadata={"generator": "abdomen_gan_v1"},
)
dicom_manifest = write_synthetic_dicom_series(
volume=generated_hu,
output_dir="outputs/case_001/dicom",
reference_dicom_dir="data/original/case_001/dicom",
patient_id="SYN_CASE_001",
series_description="Synthetic abdomen CT generated by GAN",
intensity_mode="hu",
)
audit = create_provenance_manifest(
title="GAN synthetic CT export case 001",
inputs=[
"data/original/case_001/ct.nii.gz",
"data/original/case_001/dicom",
"models/gan_outputs/case_001.npy",
],
outputs=[str(nifti_path), *dicom_manifest["path"].tolist()],
parameters={"copy_patient_tags": False, "intensity_mode": "hu"},
)
write_manifest(audit, "outputs/case_001/synthetic_export_manifest.json")Review Checklist
- Confirm the synthetic series has new UIDs.
- Confirm patient tags are synthetic.
- Confirm image orientation and spacing match the intended reference.
- Confirm the generated volume is marked as derived synthetic data.
- Keep the manifest with the experiment outputs.