kVCT–MVCT Alignment 3D-Slicer
This repository contains research scripts for automating two tasks inside 3D Slicer:
- Alignment → Align kVCT (moving) to MVCT (fixed) volumes
- Body Mask Extraction → Extract binary BODY mask from MVCT segmentations
kvct-mvct-alignment/
├─ scripts/
│ ├─ slicer_alignment.py # alignment automation script
│ └─ slicer_bodymask.py # body mask extraction script
├─ docs/
│ ├─ usage_alignment.md # detailed alignment steps
│ ├─ usage_bodymask.md # detailed mask extraction steps
│ └─ overview.md # optional workflow notes
├─ examples/
│ ├─ example_scene.png
│ └─ example_output_mask.npy
├─ .gitignore
├─ LICENSE
└─ README.md
- Open 3D Slicer
- Load patient scene (kVCT + MVCT)
- Open the Python Interactor (
Ctrl+3) - Run one of the provided scripts:
scripts/slicer_alignment.py→ align kVCT to MVCTscripts/slicer_bodymask.py→ extract BODY mask
- See detailed instructions in the docs/ folder
The following diagram shows the full alignment process from kVCT to MVCT:

This script automates alignment of kVCT to MVCT inside 3D Slicer.
-
Load Patient Data
- Open patient scene in Slicer
- Verify volumes:
kct_p1(moving)mct_p1(fixed)
-
Update Script Variables
patientID = '01' # Patient no:1 - Folder Name kctVolumeName = 'kct_p1' # Patient no:1 kVCT modality mctVolumeName = 'mct_p1' # Patient no:1 MVCT modality path2SaveAligned = r'C:\Folder_Path'
-
Resample kVCT
- Module: Resample Scalar Volume
- Spacing:
(0.754, 0.754, 2.0) - Interpolation: BSpline
- Save as:
kct_p1_resliced
-
Crop Volume
- Module: Crop Volume → “Fit to Volume”
- Save as:
kct_p1_resliced_cropped
-
Apply Transform
- Module: Transforms → add Linear Transform
- Assign to
kct_p1_resliced_cropped - Adjust → Harden Transform
-
Save Outputs
kctAligned_<patientID>.npy→ aligned kVCTfinal_transform.tfm→ transform parameters- Scene file (
File → Save, check all)
This script extracts a binary body mask from MVCT segmentations inside 3D Slicer.
-
Load Patient Scene
- Open from
CRO_Dataset - Verify MVCT segmentation exists
- Open from
-
Update Script Variables
patientID = '58' segmentationName = '814102716: RTSTRUCT: CT_1' # segmentation node in Slicer segmentName = 'BODY' # segment to extract path2SaveMask = r'C:\Folder_Path'
-
Prepare Output Folder
- Ensure
kctAlignedMaskfolder exists at:
C:\Mubashara\Dataset_Working\AI_Dataset_UNIUD
- Ensure
-
Run Script
- Open Python Interactor (
Ctrl+3) - Paste + run script
- Open Python Interactor (
-
Verify Outputs
- BODY mask saved as
.npyinpath2SaveMask - Scene updated with segmentation nodes
- BODY mask saved as
-
Save Scene
File → Save→ check all boxes → confirm
-
Alignment
kctAligned_<patientID>.npy→ aligned kVCTfinal_transform.tfm→ transform parameters- Updated Slicer scene
-
Body Mask Extraction
<patientID>_BODY_mask.npy→ binary body mask
Alignment result in 3D Slicer slice views:
- Do not commit real patient DICOM/NIfTI volumes
.gitignorealready excludes sensitive formats:*.nii *.nii.gz *.nrrd *.mha *.mhd *.dcm *.npy outputs/
