Skip to main content

Automated pelvimetry and body composition analysis from CT segmentations

Project description

📐 ctpelvimetry

PyPI version Python versions License

The first open-source Python package for fully automated CT pelvimetry and body composition analysis.

ctpelvimetry transforms the manual, time-consuming process of measuring pelvic dimensions and body composition into a rapid, fully automated pipeline. Built for surgical data science and preoperative risk assessment, it integrates seamlessly with pre-trained deep learning models (e.g., TotalSegmentator) to extract crucial anatomical metrics directly from raw CT scans—eliminating inter-observer variability entirely.


🚀 Quick Start

Get up and running in seconds.

Installation

# Basic install (if you already have segmentations)
pip install ctpelvimetry

# Full install (includes TotalSegmentator for end-to-end automation)
pip install "ctpelvimetry[seg]"

That's it for pelvimetry. Install, run, get measurements. No registration, no tokens.

🔑 Optional: Enable Body Composition

ctpelvimetry measures pelvimetry out of the box. To also extract body composition (VAT, SAT, skeletal muscle), enable TotalSegmentator's tissue_types task with a free academic license:

# 1. Register (free, takes 30 seconds): https://backend.totalsegmentator.com/license-academic/
# 2. Set the env var (add to ~/.bashrc or ~/.zshrc to persist):
export TOTALSEG_LICENSE_KEY=aca_xxxxxxxxxxxx

If TOTALSEG_LICENSE_KEY is unset, pelvimetry runs normally; body composition is silently skipped.

⚠️ Versions ≤ 1.4.1 shipped with a hard-coded license key. That key has been removed for security and licence-compliance reasons; please register your own.

⚠️ Hardware Requirements (Important!)

Because the full end-to-end pipeline relies on deep learning models (TotalSegmentator) for 3D image segmentation, a dedicated GPU is strongly recommended.

  • Recommended Setup (for ctpelvimetry[seg]):
    • GPU: NVIDIA GPU with at least 8GB VRAM (16GB+ recommended for high-resolution CTs, e.g., NVIDIA T4, RTX 3060/4090, or A100).
    • RAM: 16GB+ System RAM.
    • Time: With a dedicated GPU, a single patient scan takes < 2 minutes.
  • Without a GPU (CPU-only):
    • The pipeline will still run, but segmentation may take 10 to 30+ minutes per scan, and you risk running out of memory (OOM) on large DICOM series.
  • Pro Tip for Clinical Researchers: If you don't have a local GPU workstation, you can easily run the full pipeline in a cloud environment like Google Colab (using a free T4 GPU).

(Note: If you are only running the basic ctpelvimetry on pre-existing segmentations, a standard CPU is perfectly fine.)

End-to-End Analysis (CLI)

Go from raw DICOM to structured measurements in one command:

ctpelvimetry pelv --dicom_dir /path/to/patient_scan --output_root ./output --qc

That's it. The pipeline will handle DICOM-to-NIfTI conversion, segmentation, landmark detection, metric calculation, and QC figure generation automatically.

Starting from NIfTI

If your data is already in NIfTI format (e.g. public datasets like the Medical Decathlon or TotalSegmentator benchmark), skip the DICOM conversion step:

# Single file
ctpelvimetry pelv --nifti_path /path/to/ct.nii.gz --patient Patient_001 --output_root ./output --qc

# Whole directory of *.nii.gz files (one per patient)
ctpelvimetry pelv --nifti_root /path/to/niftis --output_root ./output

The pipeline runs TotalSegmentator on each NIfTI volume, extracts metrics, and (in batch mode) aggregates everything into a single CSV with per-patient error isolation. Patient IDs are derived from filenames: case_001.nii.gzcase_001.


💡 Why ctpelvimetry?

Manual measurement of the mid-pelvic workspace and body composition is tedious and highly subjective.

  • Clinical Problem: Measuring Inter-Spinous Distance (ISD) or Visceral Adipose Tissue (VAT) manually takes ~15 minutes per scan and suffers from significant inter-observer variability.
  • The ctpelvimetry Solution: Fully automated measurement in < 2 minutes, providing standardized, reproducible data suitable for large-scale surgical data science and machine learning applications.

Core Advantages

  • Fully Automated: From raw DICOM to structured CSVs without a single manual click.
  • 📊 High-Throughput Batching: Process hundreds of scans sequentially with built-in failure handling and progress tracking.
  • 🛡️ Robust Quality Control: Automatic detection of pelvic rotation/tilt, and generation of multi-planar QC visualisations for immediate verification.
  • 🧩 Modular Design: Use it as a CLI tool for batch processing or import it as a Python API for custom research pipelines.

🔬 Measured Metrics

ctpelvimetry extracts two major categories of surgical metrics:

1. Pelvimetry (Mid-Pelvic Workspace)

Metric Description
ISD (mm) Inter-Spinous Distance (Crucial for deep pelvic surgery)
Inlet AP (mm) Promontory → Upper Symphysis
Outlet AP (mm) Coccygeal Apex → Lower Symphysis
Outlet Transverse (mm) Intertuberous diameter
Sacral Depth & Length (mm) Pelvic concavity quantification

2. Body Composition

Metric Description
VAT / SAT (cm²) Visceral / Subcutaneous Adipose Tissue area
V/S Ratio VAT / SAT ratio (Indicator of visceral obesity)
SMA (cm²) Skeletal Muscle Area (Measured at L3 and mid-pelvis levels)

👁️ Visual Quality Control (QC)

Trust, but verify. ctpelvimetry automatically generates detailed QC panels for every scan to ensure landmark accuracy.

Sagittal QC showing automated landmark detection: sacral length (magenta), inlet AP (green), outlet AP (orange), and sacral depth (cyan).

Extended QC panel: (a) outlet transverse diameter, (b) interspinous distance (ISD), and (c) tabular measurement summary.


💻 Python API Usage

For data scientists building custom pipelines, ctpelvimetry provides a clean Python API:

from ctpelvimetry import (
    run_combined_pelvimetry,
    run_nifti_pipeline,
    process_single_patient,
)

# 1a. Run Pelvimetry on existing segmentation
pelv_results = run_combined_pelvimetry(
    patient_id="Patient_001",
    seg_folder="/path/to/segmentation_masks",
    nifti_path="/path/to/ct.nii.gz",
)
print(f"Automated ISD: {pelv_results['ISD_mm']} mm")

# 1b. Or start from a NIfTI file (runs TotalSegmentator internally)
pelv_results = run_nifti_pipeline(
    patient_id="Patient_001",
    nifti_path="/path/to/ct.nii.gz",
    output_root="./output",
)

# 2. Run Body Composition analysis
body_comp_results = process_single_patient(
    patient_id="Patient_001",
    seg_root="/path/to/seg_root",
    nifti_path="/path/to/ct.nii.gz",
    pelvimetry_csv="/path/to/report.csv",
)

(See the batch.py module for large-scale dataset orchestration.)


📂 Architecture

ctpelvimetry/
├── cli.py               # Unified CLI entry point
├── pipeline.py          # Core orchestration (DICOM → Metrics)
├── segmentation.py      # TotalSegmentator integration wrapper
├── landmarks.py         # 3D geometric landmark detection
├── metrics.py           # Pelvimetric calculations (ISD, etc.)
├── body_composition.py  # Fat/Muscle area quantification
├── qc.py                # Visual reporting generation
└── batch.py             # High-throughput batch processing

🤝 Contributing

We welcome contributions from both the surgical and data science communities!

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m "Add amazing feature")
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📝 Citation

If you use ctpelvimetry to facilitate your research, please consider citing our work:

@software{huang2025ctpelvimetry,
  author    = {Huang, Shih-Feng},
  title     = {ctpelvimetry: Automated CT Pelvimetry and Body Composition Analysis},
  year      = {2025},
  url       = {[https://github.com/odafeng/ctpelvimetry](https://github.com/odafeng/ctpelvimetry)},
  version   = {1.1.0}
}

A peer-reviewed manuscript detailing the clinical validation of this pipeline is currently in preparation.


License: Apache License 2.0 | Author: Shih-Feng Huang, MD

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

ctpelvimetry-1.6.0.tar.gz (55.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ctpelvimetry-1.6.0-py3-none-any.whl (49.6 kB view details)

Uploaded Python 3

File details

Details for the file ctpelvimetry-1.6.0.tar.gz.

File metadata

  • Download URL: ctpelvimetry-1.6.0.tar.gz
  • Upload date:
  • Size: 55.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ctpelvimetry-1.6.0.tar.gz
Algorithm Hash digest
SHA256 00ce98a8c2e70ee64b746496222d3fd132d32e55af5f7cf90b651ccc908c98db
MD5 b17ec17310097ea569841bf55f3f7b31
BLAKE2b-256 a27eb134b7720becc294eb8f853382cfc05b01e824cefc8c34a23476470cecc3

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctpelvimetry-1.6.0.tar.gz:

Publisher: release.yml on odafeng/ctpelvimetry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ctpelvimetry-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: ctpelvimetry-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 49.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ctpelvimetry-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 996bfafa5aeb2c2c4033fd6addb6d98a9b508798fcdde15d87d7fa84257290ce
MD5 ca4c4e4410f4d6c4c60e812ef263b2a0
BLAKE2b-256 1fd780471209e40ec88bf7b0658e6f582c23390b1c563e4aea1a4c7e999e0136

See more details on using hashes here.

Provenance

The following attestation bundles were made for ctpelvimetry-1.6.0-py3-none-any.whl:

Publisher: release.yml on odafeng/ctpelvimetry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page