major-ai-skills
Version:
Installable agentic skills / AI agent skills (SKILL.md) for Claude Code, Cursor, Codex CLI, Gemini CLI & Antigravity - 402+ professional app, token-efficiency, and common-sense skills. SEO/GEO ready.
157 lines (123 loc) • 8.92 kB
Markdown
name: 3d-slicer
description: "Automate 3D Slicer research workflows with MRML, VTK/ITK, DICOM data, and Segment Editor. Use for software workflows, not clinical interpretation."
category: medical
risk: safe
source: self
source_type: self
date_added: "2026-08-26"
tags: ["3d-slicer", "mrml-scene", "dicom-processing", "vtk-itk", "segment-editor", "medical-imaging", "claude"]
tools: ["claude", "cursor", "gemini", "codex"]
# 3D Slicer Medical Image Computing AI Skill Guide (Claude)
## Overview & Engine Architecture
3D Slicer is the premier open-source platform for medical image informatics, clinical visualization, and surgical planning. Built upon **VTK (Visualization Toolkit)**, **ITK (Insight Segmentation and Registration Toolkit)**, and **Qt**, 3D Slicer organizes all volumetric scans, label maps, surface models, and transforms in a unified **MRML (Medical Reality Modeling Language) Scene Graph (`slicer.mrmlScene`)**. Slicer embeds a full **Python 3 environment (`PythonSlicer.exe`)**, provides a programmatic **Segment Editor framework**, and executes headless batch workflows via CLI. Claude operates as a Principal Medical Informatics Architect and Biomedical Software Engineer, specializing in **MRML scene manipulation**, **automated DICOM batch ingestion**, **ITK threshold & watershed segmentation**, and **headless Slicer CLI automation**.
### 3D Slicer MRML & VTK/ITK Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ 3D Slicer System Architecture │
│ │
│ Presentation & MRML Scene Layer │
│ ├── MRML Scene Graph (`slicer.mrmlScene` Node Hierarchy) │
│ ├── 3D Viewport & 2D Slices (Red/Axial, Green/Coronal, Yellow/Sagittal)│
│ └── Volume Rendering Display Nodes (GPU Ray Casting Shaders│
│ │
│ Segmentation & Image Processing Pipeline │
│ ├── Segment Editor Engine (`vtkMRMLSegmentEditorNode`) │
│ ├── ITK Image Filters (Curvature Flow, Otsu Threshold) │
│ └── VTK Surface Extractors (Flying Edges / Marching Cubes) │
│ │
│ Data & DICOM Database Layer │
│ ├── CTK DICOM Database (`ctkDICOMDatabase` SQLite Engine) │
│ └── Volume Formats (`.nrrd`, `.nii.gz`, Multi-Frame DICOM) │
└─────────────────────────────────────────────────────────────┘
```
## Operational Capabilities & Agent Directives
1. **MRML Scene Automation via Python**: Author Python scripts interacting with `slicer.mrmlScene`, querying nodes by class (`slicer.util.getNodesByClass('vtkMRMLScalarVolumeNode')`), and managing transform hierarchies.
2. **Automated Segment Editor Scripting**: Construct automated segmentation routines using thresholding, masking, and island removal effects to extract anatomical structures (bones, lungs, vessels).
3. **3D Surface Model Generation & STL Export**: Convert segmented labelmaps into smoothed polygonal surface models (`vtkMRMLModelNode`) and export to STL/OBJ for surgical guide 3D printing.
4. **Headless CLI Execution**: Orchestrate batch clinical image pipelines using `Slicer.exe --no-splash --no-main-window --python-script <script.py>`.
## Production Python Automation: Automated Bone Segmentation & STL Exporter (`3D Slicer`)
Save this script as `batch_segment_bone.py` and run via `Slicer.exe --no-splash --no-main-window --python-script batch_segment_bone.py`:
```python
"""
3D Slicer Headless Python Automation: Automated Bone Segmentation & STL Export
Loads a CT volume (.nrrd / DICOM), segments bone (Hounsfield threshold), and exports STL.
"""
import sys
import os
import slicer
def process_ct_volume(input_volume_path: str, output_stl_path: str, min_hu: float = 200.0, max_hu: float = 3000.0):
print(f"--- [3D SLICER MEDICAL IMAGE PROCESSING PIPELINE] ---")
print(f"Loading CT Volume: {input_volume_path}...")
# 1. Load Volume into MRML Scene
volume_node = slicer.util.loadVolume(input_volume_path)
if not volume_node:
print("Error: Failed to load scalar volume into MRML scene.")
slicer.app.exit(1)
# 2. Create Segmentation Node and Setup Segment Editor
segmentation_node = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLSegmentationNode")
segmentation_node.CreateDefaultDisplayNodes()
segmentation_node.SetReferenceImageGeometryParameterFromVolumeNode(volume_node)
# Add 'Bone' Segment
bone_segment_id = segmentation_node.GetSegmentation().AddEmptySegment("Bone")
# Initialize Segment Editor Logic
segment_editor_widget = slicer.qMRMLSegmentEditorWidget()
segment_editor_widget.setMRMLScene(slicer.mrmlScene)
segment_editor_node = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLSegmentEditorNode")
segment_editor_widget.setMRMLSegmentEditorNode(segment_editor_node)
segment_editor_widget.setSegmentationNode(segmentation_node)
segment_editor_widget.setMasterVolumeNode(volume_node)
# 3. Apply Threshold Effect for Bone (HU: 200 - 3000)
print(f"Applying Thresholding Filter (HU: {min_hu} - {max_hu})...")
segment_editor_widget.setActiveEffectByName("Threshold")
effect = segment_editor_widget.activeEffect()
effect.setParameter("MinimumThreshold", str(min_hu))
effect.setParameter("MaximumThreshold", str(max_hu))
effect.self().onApply()
# 4. Generate Closed Surface 3D Representation
print("Generating 3D Closed Surface Mesh (Flying Edges)...")
segmentation_node.CreateClosedSurfaceRepresentation()
# 5. Export 3D Mesh to STL
print(f"Exporting 3D Mesh to: {output_stl_path}...")
slicer.modules.segmentations.logic().ExportSegmentsClosedSurfaceRepresentationToFiles(
output_stl_path,
segmentation_node,
[bone_segment_id],
"STL"
)
print("✅ Pipeline complete! STL exported successfully.")
slicer.app.exit(0)
if __name__ == "__main__":
# Example test execution within Slicer
input_file = "C:/Data/Sample_CT_Head.nrrd"
output_dir = "C:/Data/Exported_Models"
os.makedirs(output_dir, exist_ok=True)
process_ct_volume(input_file, output_dir)
```
## Technical Troubleshooting Matrix
| Issue & Failure Signature | Root Cause Analysis | Diagnostic & Resolution Pathway |
| :--- | :--- | :--- |
| **Volume Rendering Shows Blank Screen on Windows** | GPU ray casting shader fails on integrated graphics lacking OpenGL 4.5 capabilities. | 1. In Volume Rendering module $\rightarrow$ Set Rendering Method to **CPU Ray Casting**.<br>2. In Volume Display Node, adjust **Scalar Opacity Mapping** transfer curve window/level. |
| **DICOM Import Skips Series: `Unrecognized SOP Class`** | Enhanced multi-frame DICOM IOD or Radiation Therapy (RTSTRUCT) object missing dedicated plugin. | In Extension Manager, install **QuantitativeReporting** and **SlicerRT** extensions $\rightarrow$ Re-import DICOM. |
| **Headless Script Fails: `slicer.app.exit()` Freezes** | Script finished processing but background Qt event loop worker held an active timer. | Use `slicer.app.exit(0)` instead of `sys.exit(0)` to ensure clean Slicer application teardown. |
| **Out-Of-Memory During High-Res Mesh Generation** | Generating un-decimated marching cubes surface from massive $512\times 512\times 1000$ voxel grid. | In Segmentation node representation settings, enable **Decimate Target Reduction = 0.5** and **Smoothing Factor = 0.5**. |
## Command Line Syntax & Batch Processing
```bash
# 1. Run Headless Slicer Python Script
"C:\Program Files\Slicer 5.6\Slicer.exe" --no-splash --no-main-window --python-script "C:\Scripts\batch_segment_bone.py"
# 2. Run Standalone Python Interpreter Bundled with Slicer
"C:\Program Files\Slicer 5.6\bin\PythonSlicer.exe" -m pip install pydicom scikit-image
# 3. Launch Slicer and Load Volume Immediately
Slicer.exe --volume "C:\Data\scan.nrrd"
```
### Essential File Locations
- **Slicer Preferences**: `%APPDATA%\NA-MIC\Slicer.ini` (Windows) or `~/.config/NA-MIC/Slicer.ini` (Linux)
- **DICOM Database Root**: `~/Documents/SlicerDICOMDatabase/`
## Agent Operational Directive
> **MANDATORY**: In headless 3D Slicer batch scripts, always exit using `slicer.app.exit(0)` rather than `sys.exit()` to avoid Qt event loop deadlocks and memory corruption.