Automated pelvimetry and body composition analysis from CT segmentations
Project description
ctpelvimetry
The first open-source Python package for fully automated CT pelvimetry and body composition analysis.
Automatically measure pelvic dimensions and body composition from CT images — no manual annotation required. Integrates with TotalSegmentator for segmentation and provides a complete DICOM-to-results pipeline.
pip install ctpelvimetry
Why ctpelvimetry?
- Fully automated — from DICOM to structured results in one command, no manual landmark placement
- Reproducible — eliminates inter-observer variability inherent in manual CT pelvimetry
- Batch-ready — process hundreds of patients with progress tracking and failure summaries
- Quality-controlled — automatic detection of pelvic rotation, tilt, and sacrum offset with QC figures
- Modular — use the full pipeline or individual analysis functions via CLI or Python API
Features
Pelvimetry Measurements
| Metric | Description |
|---|---|
| ISD (mm) | Inter-Spinous Distance |
| Inlet AP (mm) | Promontory → Upper Symphysis | | Outlet AP (mm) | Coccygeal Apex → Lower Symphysis | | Outlet Transverse (mm) | Intertuberous diameter | | Outlet Area (cm²) | Ellipse approx: π/4 × AP × Transverse | | Sacral Length (mm) | Promontory → Coccygeal Apex | | Sacral Depth (mm) | Max anterior concavity |
Body Composition Measurements
| Metric | Description |
|---|---|
| VAT (cm²) | Visceral Adipose Tissue area |
| SAT (cm²) | Subcutaneous Adipose Tissue area |
| V/S ratio | VAT / SAT ratio |
| SMA (cm²) | Skeletal Muscle Area |
Measured at L3 vertebral level and ISD (mid-pelvis) level.
Key Features
- Per-metric error isolation — failure in one metric does not affect the others
- Quality gates — automatic detection of pelvic rotation, tilt, and sacrum offset
- Batch processing — process hundreds of patients with progress tracking and failure summaries
- QC figures — sagittal combined, extended 3-panel, and body composition overlays
- Modular design — use the full pipeline or individual analysis functions
QC Output Example
Sagittal QC figure showing automated landmark detection and pelvimetric measurements: sacral length (magenta), inlet AP (green), outlet AP (orange), and sacral depth (cyan).
Extended QC panel: (a) outlet transverse diameter at tuberosity level, (b) interspinous distance on axial view, and (c) complete pelvimetry measurement summary.
Installation
# Basic install (analyse existing segmentations)
pip install ctpelvimetry
# Full install (includes TotalSegmentator for segmentation)
pip install "ctpelvimetry[seg]"
Note: The full install pulls in TotalSegmentator and its PyTorch dependencies. If you only need to analyse pre-existing segmentations, the basic install is sufficient.
Dependencies
| Package | Minimum Version |
|---|---|
| numpy | ≥ 1.24 |
| nibabel | ≥ 5.0 |
| pandas | ≥ 2.0 |
| scipy | ≥ 1.11 |
| matplotlib | ≥ 3.7 |
| tqdm | ≥ 4.60 |
| TotalSegmentator | ≥ 2.0 (optional, pip install ".[seg]") |
Usage Examples
CLI — Pelvimetry (from existing segmentation)
ctpelvimetry pelv \
--seg_folder /path/to/segmentations \
--nifti_path /path/to/ct.nii.gz \
--patient Patient_001 \
--output_root ./output --qc
CLI — Full Pipeline (DICOM → NIfTI → Seg → Measurements)
ctpelvimetry pelv \
--dicom_dir /path/to/Patient_001 \
--output_root ./output \
--patient Patient_001
CLI — Body Composition
ctpelvimetry body-comp \
--patient Patient_001 \
--seg_root ./batch_output \
--nifti_root ./batch_output \
--pelvimetry_csv ./batch_output/combined_pelvimetry_report.csv \
--output body_comp.csv --qc
CLI — Batch Processing
# Pelvimetry batch
ctpelvimetry pelv \
--dicom_root /path/to/DICOMs \
--output_root ./output \
--start 1 --end 250
# Body composition batch
ctpelvimetry body-comp \
--seg_root ./batch_output \
--nifti_root ./batch_output \
--pelvimetry_csv ./report.csv \
--output body_comp.csv \
--start 1 --end 210 --qc_root ./qc
Python API
from ctpelvimetry import run_combined_pelvimetry, process_single_patient
# Pelvimetry
result = run_combined_pelvimetry(
"Patient_001", "/path/to/seg", "/path/to/ct.nii.gz"
)
# Body composition
result = process_single_patient(
"Patient_001", "/path/to/seg_root",
"/path/to/ct.nii.gz", "/path/to/report.csv"
)
Package Structure
ctpelvimetry/
├── __init__.py # Public API
├── config.py # PelvicConfig, constants
├── io.py # Mask loading, coordinate transforms
├── conversion.py # DICOM → NIfTI (dcm2niix)
├── segmentation.py # TotalSegmentator execution
├── landmarks.py # Midline, symphysis, sacral landmarks
├── metrics.py # ISD, ITD, sacral depth
├── body_composition.py # VAT/SAT/SMA analysis
├── qc.py # QC figure generation
├── pipeline.py # run_combined_pelvimetry, run_full_pipeline
├── batch.py # Batch orchestration
└── cli.py # Unified CLI entry point
Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -m "Add your feature") - Push to the branch (
git push origin feature/your-feature) - Open a Pull Request
Citation
If you use ctpelvimetry in your research, please cite:
@software{huang2025ctpelvimetry,
author = {Huang, Shih-Feng},
title = {ctpelvimetry: Automated CT Pelvimetry and Body Composition Analysis},
year = {2025},
url = {https://github.com/odafeng/ctpelvimetry},
version = {1.1.0}
}
A peer-reviewed manuscript describing ctpelvimetry is currently in preparation. Citation details will be updated upon publication.
License
This project is licensed under the Apache License 2.0.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ctpelvimetry-1.4.1.tar.gz.
File metadata
- Download URL: ctpelvimetry-1.4.1.tar.gz
- Upload date:
- Size: 48.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f25d5a67b154897582517d684af53236543ca1c5fd59a028f3946a0825c84a1
|
|
| MD5 |
dfadceb935beff4d399818cc68e6ca07
|
|
| BLAKE2b-256 |
bfe8b2f3908dc3d3c5ae27c0c619d863e285982cf659d6045c76a0d838d74f3b
|
File details
Details for the file ctpelvimetry-1.4.1-py3-none-any.whl.
File metadata
- Download URL: ctpelvimetry-1.4.1-py3-none-any.whl
- Upload date:
- Size: 45.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
655787a47c37a1dc104c726379a4329545622c76fe7cf77a69836cd2b2a9f0c8
|
|
| MD5 |
d9f8db84b4a39f472c2b25b863726ddf
|
|
| BLAKE2b-256 |
e5ed871c0318cffc5bc9ecc4f00c29c1cac7bb25dfcb1343ae1a29d301a46511
|